Merge
authorlana
Thu, 11 Oct 2012 16:59:50 -0700
changeset 14032 1a8b3b760f60
parent 13982 47b91529e614 (current diff)
parent 14031 9c7cee73b12d (diff)
child 14033 b0ce391a86b9
Merge
jdk/src/share/classes/sun/util/xml/XMLUtils.java
jdk/src/share/test/pack200/pack.conf
--- a/jdk/make/java/java/FILES_java.gmk	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/make/java/java/FILES_java.gmk	Thu Oct 11 16:59:50 2012 -0700
@@ -213,6 +213,7 @@
             sun/util/locale/provider/DateFormatSymbolsProviderImpl.java \
             sun/util/locale/provider/DecimalFormatSymbolsProviderImpl.java \
             sun/util/locale/provider/DictionaryBasedBreakIterator.java \
+            sun/util/locale/provider/FallbackLocaleProviderAdapter.java \
             sun/util/locale/provider/HostLocaleProviderAdapter.java \
             sun/util/locale/provider/HostLocaleProviderAdapterImpl.java \
             sun/util/locale/provider/JRELocaleConstants.java \
@@ -235,6 +236,7 @@
     java/util/Observer.java \
     java/util/Properties.java \
         java/util/InvalidPropertiesFormatException.java \
+	sun/util/spi/XmlPropertiesProvider.java \
     java/util/PropertyPermission.java \
     java/util/PropertyResourceBundle.java \
     java/util/Random.java \
--- a/jdk/make/java/nio/mapfile-bsd	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/make/java/nio/mapfile-bsd	Thu Oct 11 16:59:50 2012 -0700
@@ -108,6 +108,7 @@
 		Java_sun_nio_ch_Net_setInterface6;
 		Java_sun_nio_ch_Net_getInterface6;
 		Java_sun_nio_ch_Net_shutdown;
+		Java_sun_nio_ch_Net_poll;
                 Java_sun_nio_ch_PollArrayWrapper_interrupt;
                 Java_sun_nio_ch_PollArrayWrapper_poll0;
                 Java_sun_nio_ch_ServerSocketChannelImpl_accept0;
--- a/jdk/make/java/nio/mapfile-linux	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/make/java/nio/mapfile-linux	Thu Oct 11 16:59:50 2012 -0700
@@ -116,6 +116,7 @@
 		Java_sun_nio_ch_Net_setInterface6;
 		Java_sun_nio_ch_Net_getInterface6;
 		Java_sun_nio_ch_Net_shutdown;
+		Java_sun_nio_ch_Net_poll;
                 Java_sun_nio_ch_PollArrayWrapper_interrupt;
                 Java_sun_nio_ch_PollArrayWrapper_poll0;
                 Java_sun_nio_ch_ServerSocketChannelImpl_accept0;
--- a/jdk/make/java/nio/mapfile-solaris	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/make/java/nio/mapfile-solaris	Thu Oct 11 16:59:50 2012 -0700
@@ -104,6 +104,7 @@
 		Java_sun_nio_ch_Net_setInterface6;
 		Java_sun_nio_ch_Net_getInterface6;
 		Java_sun_nio_ch_Net_shutdown;
+		Java_sun_nio_ch_Net_poll;
                 Java_sun_nio_ch_PollArrayWrapper_interrupt;
                 Java_sun_nio_ch_PollArrayWrapper_poll0;
                 Java_sun_nio_ch_ServerSocketChannelImpl_accept0;
--- a/jdk/make/javax/crypto/Makefile	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/make/javax/crypto/Makefile	Thu Oct 11 16:59:50 2012 -0700
@@ -158,7 +158,12 @@
 #
 
 ifdef OPENJDK
-all: build-jar install-jar build-policy install-limited
+ifdef UNLIMITED_CRYPTO
+POLICY = install-unlimited
+else
+POLICY = install-limited
+endif
+all: build-jar install-jar build-policy $(POLICY)
 else  # OPENJDK
 ifeq ($(strip $(FILES_java)),)
 all:
--- a/jdk/make/sun/osxapp/Makefile	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/make/sun/osxapp/Makefile	Thu Oct 11 16:59:50 2012 -0700
@@ -28,6 +28,11 @@
 PRODUCT = sun
 include $(BUILDDIR)/common/Defs.gmk
 
+GEN_DIR=$(GENSRCDIR)/sun/osxapp
+ICON_DATA = $(GEN_DIR)/AWTIconData.h
+
+CLASSES_INIT += $(ICON_DATA)
+
 #
 # Files
 #
@@ -63,6 +68,7 @@
 	-framework QuartzCore
 
 CPPFLAGS += \
+        -I$(GEN_DIR) \
         $(call NativeSrcDirList,-I,/native/sun/osxapp)
 
 
@@ -70,6 +76,34 @@
   CPPFLAGS += -DINTERNAL_BUILD
 endif
 
-clean clobber::
+TEMPDIR_CLASSES = $(TEMPDIR)/classes
+
+$(TEMPDIR_CLASSES)/sun/osxapp/ToBin.class: ToBin.java
+	@$(prep-target)
+	$(BOOT_JAVAC_CMD) -d $(TEMPDIR_CLASSES) $<
+
+ifdef OPENJDK
+    ICONS_PATH_PREFIX=$(PLATFORM_SRC_MACOS)
+else
+    ICONS_PATH_PREFIX=$(CLOSED_SRC)/macosx
+endif
+
+generated.clean:
+	$(RM) -r $(GEN_DIR)/*.h
 
-.PHONY:
+ICONPATH=$(ICONS_PATH_PREFIX)/native/sun/osxapp/resource/icons
+ICON = $(ICONPATH)/JavaApp.icns
+
+$(GEN_DIR)/AWTIconData.h: $(TEMPDIR_CLASSES)/sun/osxapp/ToBin.class $(ICON) 
+	$(prep-target)
+	$(RM) $(ICON_DATA)
+	$(ECHO) "static unsigned char sAWTIconData[] = { " >> $(ICON_DATA);  \
+	$(CAT) $(ICON) | \
+	    $(BOOT_JAVA_CMD) -cp $(TEMPDIR_CLASSES) -Djava.awt.headless=true \
+	    sun.osxapp.ToBin >> $(ICON_DATA); \
+	$(ECHO) "};" >> $(ICON_DATA);
+
+
+clean clobber:: generated.clean
+
+.PHONY: generated.clean
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/make/sun/osxapp/ToBin.java	Thu Oct 11 16:59:50 2012 -0700
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package sun.osxapp;
+
+import java.io.*;
+
+public class ToBin {
+    public static void main(String[] args) throws Exception {
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        int nRead;
+        byte[] data = new byte[4096];
+
+        while ((nRead = System.in.read(data, 0, data.length)) != -1) {
+            baos.write(data, 0, nRead);
+        }
+
+        baos.flush();
+
+        byte[] buf = baos.toByteArray();
+        for (int i = 0; i < buf.length; i++) {
+            System.out.print(String.format("0x%1$02X", buf[i]) + ", ");
+            if (i % 20 == 0) {
+                System.out.println();
+            }
+        }
+    }
+}
--- a/jdk/make/sun/util/Makefile	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/make/sun/util/Makefile	Thu Oct 11 16:59:50 2012 -0700
@@ -41,3 +41,20 @@
 #
 include $(BUILDDIR)/common/Classes.gmk
 
+#
+# Rules for XML properties provider configuration file
+#
+SERVICEDIR = $(CLASSBINDIR)/META-INF/services
+FILES_copy = $(SERVICEDIR)/sun.util.spi.XmlPropertiesProvider
+
+copy-files: $(FILES_copy)
+
+$(SERVICEDIR)/%: $(SHARE_SRC)/classes/sun/util/xml/META-INF/services/%
+	$(install-file)
+
+build: copy-files
+
+clean::
+	$(RM) $(FILES_copy)
+
+
--- a/jdk/src/macosx/classes/sun/lwawt/LWCanvasPeer.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/macosx/classes/sun/lwawt/LWCanvasPeer.java	Thu Oct 11 16:59:50 2012 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -26,26 +26,27 @@
 
 package sun.lwawt;
 
+import java.awt.AWTException;
 import java.awt.BufferCapabilities;
-import java.awt.Canvas;
 import java.awt.Component;
+import java.awt.Dimension;
 import java.awt.GraphicsConfiguration;
 import java.awt.Image;
 import java.awt.peer.CanvasPeer;
 
 import javax.swing.JComponent;
 
-final class LWCanvasPeer extends LWComponentPeer<Component, JComponent>
-        implements CanvasPeer {
+class LWCanvasPeer<T extends Component, D extends JComponent>
+        extends LWComponentPeer<T, D> implements CanvasPeer {
 
-    LWCanvasPeer(final Canvas target, PlatformComponent platformComponent) {
+    LWCanvasPeer(final T target, final PlatformComponent platformComponent) {
         super(target, platformComponent);
     }
-
     // ---- PEER METHODS ---- //
 
     @Override
-    public void createBuffers(int numBuffers, BufferCapabilities caps) {
+    public void createBuffers(int numBuffers, BufferCapabilities caps)
+            throws AWTException {
         // TODO
     }
 
@@ -67,10 +68,20 @@
     }
 
     @Override
-    public GraphicsConfiguration getAppropriateGraphicsConfiguration(
+    public final GraphicsConfiguration getAppropriateGraphicsConfiguration(
             GraphicsConfiguration gc)
     {
         // TODO
         return gc;
     }
+
+    @Override
+    public final Dimension getPreferredSize() {
+        return getMinimumSize();
+    }
+
+    @Override
+    public final Dimension getMinimumSize() {
+        return getBounds().getSize();
+    }
 }
--- a/jdk/src/macosx/classes/sun/lwawt/LWCheckboxPeer.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/macosx/classes/sun/lwawt/LWCheckboxPeer.java	Thu Oct 11 16:59:50 2012 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -186,6 +186,11 @@
         }
 
         @Override
+        public Dimension getPreferredSize() {
+            return getCurrentButton().getPreferredSize();
+        }
+
+        @Override
         @Transient
         public Dimension getMinimumSize() {
             return getCurrentButton().getMinimumSize();
--- a/jdk/src/macosx/classes/sun/lwawt/LWComponentPeer.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/macosx/classes/sun/lwawt/LWComponentPeer.java	Thu Oct 11 16:59:50 2012 -0700
@@ -123,7 +123,7 @@
     //   private volatile boolean paintPending;
     private volatile boolean isLayouting;
 
-    private D delegate = null;
+    private final D delegate;
     private Container delegateContainer;
     private Component delegateDropTarget;
     private final Object dropTargetLock = new Object();
@@ -133,6 +133,11 @@
 
     private final PlatformComponent platformComponent;
 
+    /**
+     * Character with reasonable value between the minimum width and maximum.
+     */
+    static final char WIDE_CHAR = '0';
+
     private final class DelegateContainer extends Container {
         {
             enableEvents(0xFFFFFFFF);
@@ -267,9 +272,7 @@
     }
 
     protected final D getDelegate() {
-        synchronized (getStateLock()) {
-            return delegate;
-        }
+        return delegate;
     }
 
     protected Component getDelegateFocusOwner() {
@@ -698,26 +701,23 @@
     }
 
     @Override
-    public FontMetrics getFontMetrics(Font f) {
+    public FontMetrics getFontMetrics(final Font f) {
         // Borrow the metrics from the top-level window
 //        return getWindowPeer().getFontMetrics(f);
         // Obtain the metrics from the offscreen window where this peer is
         // mostly drawn to.
         // TODO: check for "use platform metrics" settings
-        Graphics g = getWindowPeer().getGraphics();
-        try {
-            if (g != null) {
+        final Graphics g = getOnscreenGraphics();
+        if (g != null) {
+            try {
                 return g.getFontMetrics(f);
-            } else {
-                synchronized (getDelegateLock()) {
-                    return delegateContainer.getFontMetrics(f);
-                }
-            }
-        } finally {
-            if (g != null) {
+            } finally {
                 g.dispose();
             }
         }
+        synchronized (getDelegateLock()) {
+            return delegateContainer.getFontMetrics(f);
+        }
     }
 
     @Override
@@ -847,31 +847,46 @@
     }
 
     /**
-     * Should be overridden in subclasses to forward the request
-     * to the Swing helper component, if required.
+     * Determines the preferred size of the component. By default forwards the
+     * request to the Swing helper component. Should be overridden in subclasses
+     * if required.
      */
     @Override
     public Dimension getPreferredSize() {
-        // It looks like a default implementation for all toolkits
-        return getMinimumSize();
+        final Dimension size;
+        synchronized (getDelegateLock()) {
+            size = getDelegate().getPreferredSize();
+        }
+        return validateSize(size);
     }
 
-    /*
-     * Should be overridden in subclasses to forward the request
-     * to the Swing helper component.
+    /**
+     * Determines the minimum size of the component. By default forwards the
+     * request to the Swing helper component. Should be overridden in subclasses
+     * if required.
      */
     @Override
     public Dimension getMinimumSize() {
-        D delegate = getDelegate();
+        final Dimension size;
+        synchronized (getDelegateLock()) {
+            size = getDelegate().getMinimumSize();
+        }
+        return validateSize(size);
+    }
 
-        if (delegate == null) {
-            // Is it a correct default value?
-            return getBounds().getSize();
-        } else {
-            synchronized (getDelegateLock()) {
-                return delegate.getMinimumSize();
-            }
+    /**
+     * In some situations delegates can return empty minimum/preferred size.
+     * (For example: empty JLabel, etc), but awt components never should be
+     * empty. In the XPeers or WPeers we use some magic constants, but here we
+     * try to use something more useful,
+     */
+    private Dimension validateSize(final Dimension size) {
+        if (size.width == 0 || size.height == 0) {
+            final FontMetrics fm = getFontMetrics(getFont());
+            size.width = fm.charWidth(WIDE_CHAR);
+            size.height = fm.getHeight();
         }
+        return size;
     }
 
     @Override
--- a/jdk/src/macosx/classes/sun/lwawt/LWContainerPeer.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/macosx/classes/sun/lwawt/LWContainerPeer.java	Thu Oct 11 16:59:50 2012 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -41,7 +41,7 @@
 import javax.swing.JComponent;
 
 abstract class LWContainerPeer<T extends Container, D extends JComponent>
-    extends LWComponentPeer<T, D>
+    extends LWCanvasPeer<T, D>
     implements ContainerPeer
 {
     // List of child peers sorted by z-order from bottom-most
--- a/jdk/src/macosx/classes/sun/lwawt/LWLabelPeer.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/macosx/classes/sun/lwawt/LWLabelPeer.java	Thu Oct 11 16:59:50 2012 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -26,37 +26,26 @@
 
 package sun.lwawt;
 
-import java.awt.Dimension;
-import java.awt.FontMetrics;
 import java.awt.Label;
 import java.awt.peer.LabelPeer;
 
 import javax.swing.JLabel;
 import javax.swing.SwingConstants;
 
-import javax.tools.annotation.GenerateNativeHeader;
-
 /**
  * Lightweight implementation of {@link LabelPeer}. Delegates most of the work
  * to the {@link JLabel}.
  */
-/* No native methods here, but the constants are needed in the supporting JNI code */
-@GenerateNativeHeader
 final class LWLabelPeer extends LWComponentPeer<Label, JLabel>
         implements LabelPeer {
 
-    private static final int TEXT_XPAD = 5;
-    private static final int TEXT_YPAD = 1;
-
     LWLabelPeer(final Label target, final PlatformComponent platformComponent) {
         super(target, platformComponent);
     }
 
     @Override
     protected JLabel createDelegate() {
-        final JLabel label = new JLabel();
-        label.setVerticalAlignment(SwingConstants.TOP);
-        return label;
+        return new JLabel();
     }
 
     @Override
@@ -80,24 +69,6 @@
         }
     }
 
-    @Override
-    public Dimension getMinimumSize() {
-        int w = TEXT_XPAD;
-        int h = TEXT_YPAD;
-        final FontMetrics fm = getFontMetrics(getFont());
-        if (fm != null) {
-            final String text;
-            synchronized (getDelegateLock()) {
-                text = getDelegate().getText();
-            }
-            if (text != null) {
-                w += fm.stringWidth(text);
-            }
-            h += fm.getHeight();
-        }
-        return new Dimension(w, h);
-    }
-
     /**
      * Converts {@code Label} alignment constant to the {@code JLabel} constant.
      * If wrong Label alignment provided returns default alignment.
--- a/jdk/src/macosx/classes/sun/lwawt/LWListPeer.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/macosx/classes/sun/lwawt/LWListPeer.java	Thu Oct 11 16:59:50 2012 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -32,10 +32,22 @@
 import java.awt.peer.ListPeer;
 import java.util.Arrays;
 
-final class LWListPeer
-        extends LWComponentPeer<List, LWListPeer.ScrollableJList>
+/**
+ * Lightweight implementation of {@link ListPeer}.
+ */
+final class LWListPeer extends LWComponentPeer<List, LWListPeer.ScrollableJList>
         implements ListPeer {
 
+    /**
+     * The default number of visible rows.
+     */
+    private static final int DEFAULT_VISIBLE_ROWS = 4; // From java.awt.List,
+
+    /**
+     * This text is used for cell bounds calculation.
+     */
+    private static final String TEXT = "0123456789abcde";
+
     LWListPeer(final List target, final PlatformComponent platformComponent) {
         super(target, platformComponent);
         if (!getTarget().isBackgroundSet()) {
@@ -135,6 +147,16 @@
     }
 
     @Override
+    public Dimension getPreferredSize() {
+        return getMinimumSize();
+    }
+
+    @Override
+    public Dimension getMinimumSize() {
+        return getMinimumSize(DEFAULT_VISIBLE_ROWS);
+    }
+
+    @Override
     public Dimension getPreferredSize(final int rows) {
         return getMinimumSize(rows);
     }
@@ -142,16 +164,26 @@
     @Override
     public Dimension getMinimumSize(final int rows) {
         synchronized (getDelegateLock()) {
-            final int margin = 2;
-            final int space = 1;
+            final Dimension size = getCellSize();
+            size.height *= rows;
+            // Always take vertical scrollbar into account.
+            final JScrollBar vbar = getDelegate().getVerticalScrollBar();
+            size.width += vbar != null ? vbar.getMinimumSize().width : 0;
+            // JScrollPane and JList insets
+            final Insets pi = getDelegate().getInsets();
+            final Insets vi = getDelegate().getView().getInsets();
+            size.width += pi.left + pi.right + vi.left + vi.right;
+            size.height += pi.top + pi.bottom + vi.top + vi.bottom;
+            return size;
+        }
+    }
 
-            // TODO: count ScrollPane's scrolling elements if any.
-            final FontMetrics fm = getFontMetrics(getFont());
-            final int itemHeight = (fm.getHeight() - fm.getLeading()) + (2 * space);
-
-            return new Dimension(20 + (fm == null ? 10 * 15 : fm.stringWidth("0123456789abcde")),
-                    (fm == null ? 10 : itemHeight) * rows + (2 * margin));
-        }
+    private Dimension getCellSize() {
+        final JList<String> jList = getDelegate().getView();
+        final ListCellRenderer<? super String> cr = jList.getCellRenderer();
+        final Component cell = cr.getListCellRendererComponent(jList, TEXT, 0,
+                                                               false, false);
+        return cell.getPreferredSize();
     }
 
     private void revalidate() {
@@ -165,10 +197,10 @@
 
         private boolean skipStateChangedEvent;
 
-        private DefaultListModel<Object> model =
-                new DefaultListModel<Object>() {
+        private final DefaultListModel<String> model =
+                new DefaultListModel<String>() {
                     @Override
-                    public void add(final int index, final Object element) {
+                    public void add(final int index, final String element) {
                         if (index == -1) {
                             addElement(element);
                         } else {
@@ -181,7 +213,7 @@
 
         ScrollableJList() {
             getViewport().setScrollMode(JViewport.SIMPLE_SCROLL_MODE);
-            final JList<Object> list = new JListDelegate();
+            final JList<String> list = new JListDelegate();
             list.addListSelectionListener(this);
 
             getViewport().setView(list);
@@ -223,11 +255,11 @@
             }
         }
 
-        public JList getView() {
-            return (JList) getViewport().getView();
+        public JList<String> getView() {
+            return (JList<String>) getViewport().getView();
         }
 
-        public DefaultListModel<Object> getModel() {
+        public DefaultListModel<String> getModel() {
             return model;
         }
 
@@ -254,7 +286,7 @@
             }
         }
 
-        private final class JListDelegate extends JList<Object> {
+        private final class JListDelegate extends JList<String> {
 
             JListDelegate() {
                 super(ScrollableJList.this.model);
@@ -272,7 +304,7 @@
                     final int index = locationToIndex(e.getPoint());
                     if (0 <= index && index < getModel().getSize()) {
                         LWListPeer.this.postEvent(new ActionEvent(getTarget(), ActionEvent.ACTION_PERFORMED,
-                            getModel().getElementAt(index).toString(), e.getWhen(), e.getModifiers()));
+                            getModel().getElementAt(index), e.getWhen(), e.getModifiers()));
                     }
                 }
             }
@@ -281,10 +313,10 @@
             protected void processKeyEvent(final KeyEvent e) {
                 super.processKeyEvent(e);
                 if (e.getID() == KeyEvent.KEY_PRESSED && e.getKeyCode() == KeyEvent.VK_ENTER) {
-                    final Object selectedValue = getSelectedValue();
+                    final String selectedValue = getSelectedValue();
                     if(selectedValue != null){
                         LWListPeer.this.postEvent(new ActionEvent(getTarget(), ActionEvent.ACTION_PERFORMED,
-                            selectedValue.toString(), e.getWhen(), e.getModifiers()));
+                            selectedValue, e.getWhen(), e.getModifiers()));
                     }
                 }
             }
--- a/jdk/src/macosx/classes/sun/lwawt/LWPanelPeer.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/macosx/classes/sun/lwawt/LWPanelPeer.java	Thu Oct 11 16:59:50 2012 -0700
@@ -26,7 +26,6 @@
 
 package sun.lwawt;
 
-import java.awt.Dimension;
 import java.awt.Panel;
 import java.awt.peer.PanelPeer;
 
@@ -43,9 +42,4 @@
     public JPanel createDelegate() {
         return new JPanel();
     }
-
-    @Override
-    public Dimension getMinimumSize() {
-        return getBounds().getSize();
-    }
 }
--- a/jdk/src/macosx/classes/sun/lwawt/LWScrollBarPeer.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/macosx/classes/sun/lwawt/LWScrollBarPeer.java	Thu Oct 11 16:59:50 2012 -0700
@@ -27,7 +27,6 @@
 package sun.lwawt;
 
 import java.awt.Adjustable;
-import java.awt.Dimension;
 import java.awt.Scrollbar;
 import java.awt.event.AdjustmentEvent;
 import java.awt.event.AdjustmentListener;
@@ -93,13 +92,6 @@
         }
     }
 
-    @Override
-    public Dimension getPreferredSize() {
-        synchronized (getDelegateLock()) {
-            return getDelegate().getPreferredSize();
-        }
-    }
-
     // Peer also registered as a listener for ComponentDelegate component
     @Override
     public void adjustmentValueChanged(final AdjustmentEvent e) {
--- a/jdk/src/macosx/classes/sun/lwawt/LWTextAreaPeer.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/macosx/classes/sun/lwawt/LWTextAreaPeer.java	Thu Oct 11 16:59:50 2012 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -29,6 +29,7 @@
 import java.awt.Component;
 import java.awt.Cursor;
 import java.awt.Dimension;
+import java.awt.Insets;
 import java.awt.Point;
 import java.awt.TextArea;
 import java.awt.event.TextEvent;
@@ -41,11 +42,22 @@
 import javax.swing.text.Document;
 import javax.swing.text.JTextComponent;
 
+/**
+ * Lightweight implementation of {@link TextAreaPeer}. Delegates most of the
+ * work to the {@link JTextArea} inside JScrollPane.
+ */
 final class LWTextAreaPeer
         extends LWTextComponentPeer<TextArea, LWTextAreaPeer.ScrollableJTextArea>
         implements TextAreaPeer {
 
+    /**
+     * The default number of visible columns.
+     */
     private static final int DEFAULT_COLUMNS = 60;
+
+    /**
+     * The default number of visible rows.
+     */
     private static final int DEFAULT_ROWS = 10;
 
     LWTextAreaPeer(final TextArea target,
@@ -87,26 +99,41 @@
     }
 
     @Override
+    public Dimension getPreferredSize() {
+        return getMinimumSize();
+    }
+
+    @Override
     public Dimension getMinimumSize() {
         return getMinimumSize(DEFAULT_ROWS, DEFAULT_COLUMNS);
     }
 
     @Override
-    public Dimension getMinimumSize(final int rows, final int columns) {
-        return getPreferredSize(rows, columns);
+    public Dimension getPreferredSize(final int rows, final int columns) {
+        return getMinimumSize(rows, columns);
     }
 
     @Override
-    public Dimension getPreferredSize(final int rows, final int columns) {
-        final Dimension size = super.getPreferredSize(rows, columns);
+    public Dimension getMinimumSize(final int rows, final int columns) {
+        final Dimension size = super.getMinimumSize(rows, columns);
         synchronized (getDelegateLock()) {
-            final JScrollBar vbar = getDelegate().getVerticalScrollBar();
-            final JScrollBar hbar = getDelegate().getHorizontalScrollBar();
-            final int scrollbarW = vbar != null ? vbar.getWidth() : 0;
-            final int scrollbarH = hbar != null ? hbar.getHeight() : 0;
-            return new Dimension(size.width + scrollbarW,
-                                 size.height + scrollbarH);
+            // JScrollPane insets
+            final Insets pi = getDelegate().getInsets();
+            size.width += pi.left + pi.right;
+            size.height += pi.top + pi.bottom;
+            // Take scrollbars into account.
+            final int vsbPolicy = getDelegate().getVerticalScrollBarPolicy();
+            if (vsbPolicy == ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS) {
+                final JScrollBar vbar = getDelegate().getVerticalScrollBar();
+                size.width += vbar != null ? vbar.getMinimumSize().width : 0;
+            }
+            final int hsbPolicy = getDelegate().getHorizontalScrollBarPolicy();
+            if (hsbPolicy == ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS) {
+                final JScrollBar hbar = getDelegate().getHorizontalScrollBar();
+                size.height += hbar != null ? hbar.getMinimumSize().height : 0;
+            }
         }
+        return size;
     }
 
     @Override
--- a/jdk/src/macosx/classes/sun/lwawt/LWTextComponentPeer.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/macosx/classes/sun/lwawt/LWTextComponentPeer.java	Thu Oct 11 16:59:50 2012 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -48,10 +48,7 @@
         extends LWComponentPeer<T, D>
         implements DocumentListener, TextComponentPeer, InputMethodListener {
 
-    /**
-     * Character with reasonable value between the minimum width and maximum.
-     */
-    protected static final char WIDE_CHAR = 'w';
+
     private volatile boolean firstChangeSkipped;
 
     LWTextComponentPeer(final T target,
@@ -95,18 +92,16 @@
      */
     abstract JTextComponent getTextComponent();
 
-    public Dimension getPreferredSize(final int rows, final int columns) {
+    public Dimension getMinimumSize(final int rows, final int columns) {
         final Insets insets;
         synchronized (getDelegateLock()) {
-            insets = getDelegate().getInsets();
+            insets = getTextComponent().getInsets();
         }
         final int borderHeight = insets.top + insets.bottom;
         final int borderWidth = insets.left + insets.right;
         final FontMetrics fm = getFontMetrics(getFont());
-        final int charWidth = (fm != null) ? fm.charWidth(WIDE_CHAR) : 10;
-        final int itemHeight = (fm != null) ? fm.getHeight() : 10;
-        return new Dimension(columns * charWidth + borderWidth,
-                             rows * itemHeight + borderHeight);
+        return new Dimension(fm.charWidth(WIDE_CHAR) * columns + borderWidth,
+                             fm.getHeight() * rows + borderHeight);
     }
 
     @Override
@@ -187,6 +182,7 @@
         }
     }
 
+    //TODO IN XAWT we just return true..
     @Override
     public final boolean isFocusable() {
         return getTarget().isFocusable();
--- a/jdk/src/macosx/classes/sun/lwawt/LWTextFieldPeer.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/macosx/classes/sun/lwawt/LWTextFieldPeer.java	Thu Oct 11 16:59:50 2012 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -37,16 +37,10 @@
 import javax.swing.JPasswordField;
 import javax.swing.text.JTextComponent;
 
-import javax.tools.annotation.GenerateNativeHeader;
-
-/* No native methods here, but the constants are needed in the supporting JNI code */
-@GenerateNativeHeader
 final class LWTextFieldPeer
         extends LWTextComponentPeer<TextField, JPasswordField>
         implements TextFieldPeer, ActionListener {
 
-    private static final int DEFAULT_COLUMNS = 1;
-
     LWTextFieldPeer(final TextField target,
                     final PlatformComponent platformComponent) {
         super(target, platformComponent);
@@ -83,17 +77,12 @@
 
     @Override
     public Dimension getPreferredSize(final int columns) {
-        return getPreferredSize(1, columns);
+        return getMinimumSize(columns);
     }
 
     @Override
     public Dimension getMinimumSize(final int columns) {
-        return getPreferredSize(columns);
-    }
-
-    @Override
-    public Dimension getMinimumSize() {
-        return getMinimumSize(DEFAULT_COLUMNS);
+        return getMinimumSize(1, columns);
     }
 
     @Override
--- a/jdk/src/macosx/classes/sun/lwawt/LWToolkit.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/macosx/classes/sun/lwawt/LWToolkit.java	Thu Oct 11 16:59:50 2012 -0700
@@ -310,7 +310,7 @@
     @Override
     public CanvasPeer createCanvas(Canvas target) {
         PlatformComponent platformComponent = createPlatformComponent();
-        LWCanvasPeer peer = new LWCanvasPeer(target, platformComponent);
+        LWCanvasPeer<?, ?> peer = new LWCanvasPeer<>(target, platformComponent);
         targetCreatedPeer(target, peer);
         peer.initialize();
         return peer;
--- a/jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformResponder.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformResponder.java	Thu Oct 11 16:59:50 2012 -0700
@@ -160,6 +160,9 @@
 
             if(isDeadChar){
                 testChar = (char) out[2];
+                if(testChar == 0){
+                    return;
+                }
             }
 
             jkeyCode = out[0];
--- a/jdk/src/macosx/native/apple/security/KeystoreImpl.m	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/macosx/native/apple/security/KeystoreImpl.m	Thu Oct 11 16:59:50 2012 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -337,7 +337,6 @@
             // Call back to the Java object to create Java objects corresponding to this security object.
             jlong nativeKeyRef = ptr_to_jlong(privateKeyRef);
             JNFCallVoidMethod(env, keyStore, jm_createKeyEntry, alias, creationDate, nativeKeyRef, certRefArray, javaCertArray);
-            break;
         }
     } while (searchResult == noErr);
 
--- a/jdk/src/macosx/native/sun/awt/AWTEvent.m	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/macosx/native/sun/awt/AWTEvent.m	Thu Oct 11 16:59:50 2012 -0700
@@ -383,6 +383,7 @@
 {
     TISInputSourceRef currentKeyboard = TISCopyCurrentKeyboardInputSource();
     CFDataRef uchr = (CFDataRef)TISGetInputSourceProperty(currentKeyboard, kTISPropertyUnicodeKeyLayoutData);
+    if (uchr == nil) { return; }
     const UCKeyboardLayout *keyboardLayout = (const UCKeyboardLayout*)CFDataGetBytePtr(uchr);
     // Carbon modifiers should be used instead of NSEvent modifiers
     UInt32 modifierKeyState = (GetCurrentEventKeyModifiers() >> 8) & 0xFF;
@@ -563,18 +564,18 @@
     const struct _nsKeyToJavaModifier* cur;
 
     for (cur = nsKeyToJavaModifierTable; cur->nsMask != 0; ++cur) {
-        jint mask = isExtMods? cur->javaExtMask : cur->javaMask; 
+        jint mask = isExtMods? cur->javaExtMask : cur->javaMask;
         if ((mask & javaModifiers) != 0) {
             nsFlags |= cur->nsMask;
         }
     }
 
     // special case
-    jint mask = isExtMods? java_awt_event_InputEvent_ALT_GRAPH_DOWN_MASK : 
+    jint mask = isExtMods? java_awt_event_InputEvent_ALT_GRAPH_DOWN_MASK :
                            java_awt_event_InputEvent_ALT_GRAPH_MASK;
 
     if ((mask & javaModifiers) != 0) {
-        nsFlags |= NSAlternateKeyMask;      
+        nsFlags |= NSAlternateKeyMask;
     }
 
     return nsFlags;
--- a/jdk/src/macosx/native/sun/awt/AWTView.m	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/macosx/native/sun/awt/AWTView.m	Thu Oct 11 16:59:50 2012 -0700
@@ -279,7 +279,10 @@
         return;
     }
 
-    if (![self hasMarkedText] && fKeyEventsNeeded) {
+    NSString *eventCharacters = [event characters];
+    BOOL isDeadKey = (eventCharacters != nil && [eventCharacters length] == 0);
+
+    if ((![self hasMarkedText] && fKeyEventsNeeded) || isDeadKey) {
         [self deliverJavaKeyEventHelper: event];
     }
 
--- a/jdk/src/macosx/native/sun/awt/CTextPipe.m	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/macosx/native/sun/awt/CTextPipe.m	Thu Oct 11 16:59:50 2012 -0700
@@ -142,8 +142,11 @@
     // get our baseline transform and font
     CGContextRef cgRef = qsdo->cgRef;
     CGAffineTransform ctmText = CGContextGetTextMatrix(cgRef);
-    //CGFontRef cgFont = CGContextGetFont(cgRef);
 
+    /* Save and restore of graphics context is done before the iteration.  
+       This seems to work using our test case (see bug ID 7158350) so we are restoring it at
+       the end of the for loop.  If we find out that save/restore outside the loop
+       doesn't work on all cases then we will move the Save/Restore inside the loop.*/
     CGContextSaveGState(cgRef);
     CGAffineTransform invTx = CGAffineTransformInvert(strike->fTx);
 
@@ -210,13 +213,9 @@
         pt.x += advances[i].width;
         pt.y += advances[i].height;
 
-        // reset the font on the context after striking a unicode with CoreText
-        if (uniChar != 0)
-        {
-           // CGContextSetFont(cgRef, cgFont);
-            CGContextSaveGState(cgRef);
-        }
     }
+    // reset the font on the context after striking a unicode with CoreText
+    CGContextRestoreGState(cgRef);
 }
 
 // Using the Quartz Surface Data context, draw a hot-substituted character run
--- a/jdk/src/macosx/native/sun/awt/InitIDs.m	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/macosx/native/sun/awt/InitIDs.m	Thu Oct 11 16:59:50 2012 -0700
@@ -47,7 +47,10 @@
 {
 }
 
-
+JNIEXPORT void JNICALL Java_java_awt_Choice_initIDs
+(JNIEnv *env, jclass cls)
+{
+}
 
 JNIEXPORT void JNICALL Java_java_awt_Color_initIDs
 (JNIEnv *env, jclass cls)
--- a/jdk/src/macosx/native/sun/awt/LWCToolkit.m	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/macosx/native/sun/awt/LWCToolkit.m	Thu Oct 11 16:59:50 2012 -0700
@@ -33,6 +33,7 @@
 #import "ThreadUtilities.h"
 #import "AWT_debug.h"
 #import "CSystemColors.h"
+#import  "NSApplicationAWT.h"
 
 #import "sun_lwawt_macosx_LWCToolkit.h"
 
@@ -47,7 +48,7 @@
     return eventCount;
 }
 
-+ (void) eventCountPlusPlus{
++ (void) eventCountPlusPlus{    
     eventCount++;
 }
 
@@ -79,7 +80,6 @@
 
 @end
 
-
 /*
  * Class:     sun_lwawt_macosx_LWCToolkit
  * Method:    nativeSyncQueue
@@ -90,12 +90,22 @@
 {
     int currentEventNum = [AWTToolkit getEventCount];
 
-    [JNFRunLoop performOnMainThreadWaiting:YES withBlock:^(){}];
-
+    NSApplication* sharedApp = [NSApplication sharedApplication];
+    if ([sharedApp isKindOfClass:[NSApplicationAWT class]]) {
+        NSApplicationAWT* theApp = (NSApplicationAWT*)sharedApp;
+        [theApp postDummyEvent];
+        [theApp waitForDummyEvent];
+    } else {
+        // could happen if we are embedded inside SWT application,
+        // in this case just spin a single empty block through 
+        // the event loop to give it a chance to process pending events
+        [JNFRunLoop performOnMainThreadWaiting:YES withBlock:^(){}];
+    }
+    
     if (([AWTToolkit getEventCount] - currentEventNum) != 0) {
         return JNI_TRUE;
     }
-
+        
     return JNI_FALSE;
 }
 
--- a/jdk/src/macosx/native/sun/osxapp/NSApplicationAWT.h	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/macosx/native/sun/osxapp/NSApplicationAWT.h	Thu Oct 11 16:59:50 2012 -0700
@@ -29,11 +29,15 @@
 @interface NSApplicationAWT : NSApplication {
     NSString *fApplicationName;
     NSWindow *eventTransparentWindow;
+    NSTimeInterval dummyEventTimestamp;
+    NSConditionLock* seenDummyEventLock;
 }
 
 - (void) finishLaunching;
 - (void) registerWithProcessManager;
 - (void) setDockIconWithEnv:(JNIEnv *)env;
+- (void) postDummyEvent;
+- (void) waitForDummyEvent;
 
 + (void) runAWTLoopWithApp:(NSApplication*)app;
 
--- a/jdk/src/macosx/native/sun/osxapp/NSApplicationAWT.m	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/macosx/native/sun/osxapp/NSApplicationAWT.m	Thu Oct 11 16:59:50 2012 -0700
@@ -31,6 +31,7 @@
 #import "PropertiesUtilities.h"
 #import "ThreadUtilities.h"
 #import "QueuingApplicationDelegate.h"
+#import "AWTIconData.h"
 
 
 static BOOL sUsingDefaultNIB = YES;
@@ -52,6 +53,9 @@
 
 AWT_ASSERT_APPKIT_THREAD;
     fApplicationName = nil;
+    dummyEventTimestamp = 0.0;
+    seenDummyEventLock = nil;
+
 
     // NSApplication will call _RegisterApplication with the application's bundle, but there may not be one.
     // So, we need to call it ourselves to ensure the app is set up properly.
@@ -255,25 +259,26 @@
         theIconPath = [PropertiesUtilities javaSystemPropertyForKey:@"apple.awt.application.icon" withEnv:env];
     }
 
-    // If the icon file wasn't specified as an argument and we need to get an icon
-    // we'll use the generic java app icon.
-    NSString *defaultIconPath = [NSString stringWithFormat:@"%@%@", SHARED_FRAMEWORK_BUNDLE, @"/Resources/GenericApp.icns"];
-    if (theIconPath == nil) {
+    // Use the path specified to get the icon image
+    NSImage* iconImage = nil;
+    if (theIconPath != nil) {
+        iconImage = [[NSImage alloc] initWithContentsOfFile:theIconPath];
+    } 
+
+    // If no icon file was specified or we failed to get the icon image
+    // and there is no bundle's icon, then use the default icon
+    if (iconImage == nil) {
         NSString* bundleIcon = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleIconFile"];
         if (bundleIcon == nil) {
-            theIconPath = defaultIconPath;
+            NSData* iconData;
+            iconData = [[NSData alloc] initWithBytesNoCopy: sAWTIconData length: sizeof(sAWTIconData) freeWhenDone: NO];
+            iconImage = [[NSImage alloc] initWithData: iconData];
+            [iconData release];
         }
     }
 
-    // Set up the dock icon if we have an icon name.
-    if (theIconPath != nil) {
-        NSImage *iconImage = [[NSImage alloc] initWithContentsOfFile:theIconPath];
-
-        // If we failed for some reason fall back to the default icon.
-        if (iconImage == nil) {
-            iconImage = [[NSImage alloc] initWithContentsOfFile:defaultIconPath];
-        }
-
+    // Set up the dock icon if we have an icon image.
+    if (iconImage != nil) {
         [NSApp setApplicationIconImage:iconImage];
         [iconImage release];
     }
@@ -328,6 +333,45 @@
     return event;
 }
 
+// NSTimeInterval has microseconds precision
+#define TS_EQUAL(ts1, ts2) (fabs((ts1) - (ts2)) < 1e-6)
+
+- (void)sendEvent:(NSEvent *)event
+{
+    if ([event type] == NSApplicationDefined && TS_EQUAL([event timestamp], dummyEventTimestamp)) {
+        [seenDummyEventLock lockWhenCondition:NO];
+        [seenDummyEventLock unlockWithCondition:YES];
+    } else {
+        [super sendEvent:event];
+    }
+}
+
+- (void)postDummyEvent {
+    seenDummyEventLock = [[NSConditionLock alloc] initWithCondition:NO];
+    dummyEventTimestamp = [NSProcessInfo processInfo].systemUptime;
+    
+    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];    
+    NSEvent* event = [NSEvent otherEventWithType: NSApplicationDefined
+                                        location: NSMakePoint(0,0)
+                                   modifierFlags: 0
+                                       timestamp: dummyEventTimestamp
+                                    windowNumber: 0
+                                         context: nil
+                                         subtype: 0
+                                           data1: 0
+                                           data2: 0];
+    [NSApp postEvent: event atStart: NO];
+    [pool drain];
+}
+
+- (void)waitForDummyEvent {
+    [seenDummyEventLock lockWhenCondition:YES];
+    [seenDummyEventLock unlock];
+    [seenDummyEventLock release];
+
+    seenDummyEventLock = nil;
+}
+
 @end
 
 
Binary file jdk/src/macosx/native/sun/osxapp/resource/icons/JavaApp.icns has changed
--- a/jdk/src/share/classes/com/sun/security/auth/module/Krb5LoginModule.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/share/classes/com/sun/security/auth/module/Krb5LoginModule.java	Thu Oct 11 16:59:50 2012 -0700
@@ -1064,12 +1064,17 @@
 
             if (storeKey) {
                 if (encKeys == null) {
-                    if (!privCredSet.contains(ktab)) {
-                        privCredSet.add(ktab);
-                        // Compatibility; also add keys to privCredSet
-                        for (KerberosKey key: ktab.getKeys(kerbClientPrinc)) {
-                            privCredSet.add(new Krb5Util.KeysFromKeyTab(key));
+                    if (ktab != null) {
+                        if (!privCredSet.contains(ktab)) {
+                            privCredSet.add(ktab);
+                            // Compatibility; also add keys to privCredSet
+                            for (KerberosKey key: ktab.getKeys(kerbClientPrinc)) {
+                                privCredSet.add(new Krb5Util.KeysFromKeyTab(key));
+                            }
                         }
+                    } else {
+                        succeeded = false;
+                        throw new LoginException("No key to store");
                     }
                 } else {
                     for (int i = 0; i < kerbKeys.length; i ++) {
--- a/jdk/src/share/classes/java/awt/Choice.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/share/classes/java/awt/Choice.java	Thu Oct 11 16:59:50 2012 -0700
@@ -104,7 +104,16 @@
     /*
      * JDK 1.1 serialVersionUID
      */
-     private static final long serialVersionUID = -4075310674757313071L;
+    private static final long serialVersionUID = -4075310674757313071L;
+
+    static {
+        /* ensure that the necessary native libraries are loaded */
+        Toolkit.loadLibraries();
+        /* initialize JNI field and method ids */
+        if (!GraphicsEnvironment.isHeadless()) {
+            initIDs();
+        }
+    }
 
     /**
      * Creates a new choice menu. The menu initially has no items in it.
@@ -711,6 +720,10 @@
       }
     }
 
+    /**
+     * Initialize JNI field and method IDs
+     */
+    private static native void initIDs();
 
 /////////////////
 // Accessibility support
--- a/jdk/src/share/classes/java/io/FilePermission.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/share/classes/java/io/FilePermission.java	Thu Oct 11 16:59:50 2012 -0700
@@ -76,7 +76,7 @@
  * <P>
  * Be careful when granting FilePermissions. Think about the implications
  * of granting read and especially write access to various files and
- * directories. The "&lt;&lt;ALL FILES>>" permission with write action is
+ * directories. The "&lt;&lt;ALL FILES&gt;&gt;" permission with write action is
  * especially dangerous. This grants permission to write to the entire
  * file system. One thing this effectively allows is replacement of the
  * system binary, including the JVM runtime environment.
@@ -180,9 +180,7 @@
      * @param mask the actions mask to use.
      *
      */
-    private void init(int mask)
-    {
-
+    private void init(int mask) {
         if ((mask & ALL) != mask)
                 throw new IllegalArgumentException("invalid actions mask");
 
@@ -274,9 +272,7 @@
      *          If actions is <code>null</code>, empty or contains an action
      *          other than the specified possible actions.
      */
-
-    public FilePermission(String path, String actions)
-    {
+    public FilePermission(String path, String actions) {
         super(path);
         init(getMask(actions));
     }
@@ -293,8 +289,7 @@
      */
 
     // package private for use by the FilePermissionCollection add method
-    FilePermission(String path, int mask)
-    {
+    FilePermission(String path, int mask) {
         super(path);
         init(mask);
     }
@@ -337,7 +332,6 @@
      * this FilePermission's path also implies that FilePermission's path.
      *
      * @param that the FilePermission to check against.
-     * @param exact return immediately if the masks are not equal
      * @return the effective mask
      */
     boolean impliesIgnoreMask(FilePermission that) {
@@ -412,7 +406,6 @@
      *
      * @return a hash code value for this object.
      */
-
     public int hashCode() {
         return this.cpath.hashCode();
     }
@@ -424,7 +417,6 @@
      * @return the actions mask.
      */
     private static int getMask(String actions) {
-
         int mask = NONE;
 
         // Null action valid?
@@ -552,7 +544,6 @@
      *
      * @return the actions mask.
      */
-
     int getMask() {
         return mask;
     }
@@ -564,8 +555,7 @@
      *
      * @return the canonical string representation of the actions.
      */
-    private static String getActions(int mask)
-    {
+    private static String getActions(int mask) {
         StringBuilder sb = new StringBuilder();
         boolean comma = false;
 
@@ -610,15 +600,13 @@
      *
      * @return the canonical string representation of the actions.
      */
-    public String getActions()
-    {
+    public String getActions() {
         if (actions == null)
             actions = getActions(this.mask);
 
         return actions;
     }
 
-
     /**
      * Returns a new PermissionCollection object for storing FilePermission
      * objects.
@@ -650,7 +638,6 @@
      * @return a new PermissionCollection object suitable for storing
      * FilePermissions.
      */
-
     public PermissionCollection newPermissionCollection() {
         return new FilePermissionCollection();
     }
@@ -712,22 +699,20 @@
  */
 
 final class FilePermissionCollection extends PermissionCollection
-implements Serializable {
-
+    implements Serializable
+{
     // Not serialized; see serialization section at end of class
     private transient List<Permission> perms;
 
     /**
-     * Create an empty FilePermissions object.
-     *
+     * Create an empty FilePermissionCollection object.
      */
-
     public FilePermissionCollection() {
         perms = new ArrayList<>();
     }
 
     /**
-     * Adds a permission to the FilePermissions. The key for the hash is
+     * Adds a permission to the FilePermissionCollection. The key for the hash is
      * permission.path.
      *
      * @param permission the Permission object to add.
@@ -738,9 +723,7 @@
      * @exception SecurityException - if this FilePermissionCollection object
      *                                has been marked readonly
      */
-
-    public void add(Permission permission)
-    {
+    public void add(Permission permission) {
         if (! (permission instanceof FilePermission))
             throw new IllegalArgumentException("invalid permission: "+
                                                permission);
@@ -757,16 +740,14 @@
      * Check and see if this set of permissions implies the permissions
      * expressed in "permission".
      *
-     * @param p the Permission object to compare
+     * @param permission the Permission object to compare
      *
      * @return true if "permission" is a proper subset of a permission in
      * the set, false if not.
      */
-
-    public boolean implies(Permission permission)
-    {
+    public boolean implies(Permission permission) {
         if (! (permission instanceof FilePermission))
-                return false;
+            return false;
 
         FilePermission fp = (FilePermission) permission;
 
@@ -795,7 +776,6 @@
      *
      * @return an enumeration of all the FilePermission objects.
      */
-
     public Enumeration<Permission> elements() {
         // Convert Iterator into Enumeration
         synchronized (this) {
@@ -841,8 +821,9 @@
     /*
      * Reads in a Vector of FilePermissions and saves them in the perms field.
      */
-    private void readObject(ObjectInputStream in) throws IOException,
-    ClassNotFoundException {
+    private void readObject(ObjectInputStream in)
+        throws IOException, ClassNotFoundException
+    {
         // Don't call defaultReadObject()
 
         // Read in serialized fields
--- a/jdk/src/share/classes/java/io/ObjectOutputStream.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/share/classes/java/io/ObjectOutputStream.java	Thu Oct 11 16:59:50 2012 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1996, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 2012, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -484,7 +484,7 @@
      * stream.  The state is reset to be the same as a new ObjectOutputStream.
      * The current point in the stream is marked as reset so the corresponding
      * ObjectInputStream will be reset at the same point.  Objects previously
-     * written to the stream will not be refered to as already being in the
+     * written to the stream will not be referred to as already being in the
      * stream.  They will be written to the stream again.
      *
      * @throws  IOException if reset() is invoked while serializing an object.
--- a/jdk/src/share/classes/java/io/PrintWriter.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/share/classes/java/io/PrintWriter.java	Thu Oct 11 16:59:50 2012 -0700
@@ -784,7 +784,7 @@
      *         <tt>null</tt> argument depends on the <a
      *         href="../util/Formatter.html#syntax">conversion</a>.
      *
-     * @throws  IllegalFormatException
+     * @throws  java.util.IllegalFormatException
      *          If a format string contains an illegal syntax, a format
      *          specifier that is incompatible with the given arguments,
      *          insufficient arguments given the format string, or other
@@ -835,7 +835,7 @@
      *         <tt>null</tt> argument depends on the <a
      *         href="../util/Formatter.html#syntax">conversion</a>.
      *
-     * @throws  IllegalFormatException
+     * @throws  java.util.IllegalFormatException
      *          If a format string contains an illegal syntax, a format
      *          specifier that is incompatible with the given arguments,
      *          insufficient arguments given the format string, or other
@@ -879,7 +879,7 @@
      *         <tt>null</tt> argument depends on the <a
      *         href="../util/Formatter.html#syntax">conversion</a>.
      *
-     * @throws  IllegalFormatException
+     * @throws  java.util.IllegalFormatException
      *          If a format string contains an illegal syntax, a format
      *          specifier that is incompatible with the given arguments,
      *          insufficient arguments given the format string, or other
@@ -939,7 +939,7 @@
      *         <tt>null</tt> argument depends on the <a
      *         href="../util/Formatter.html#syntax">conversion</a>.
      *
-     * @throws  IllegalFormatException
+     * @throws  java.util.IllegalFormatException
      *          If a format string contains an illegal syntax, a format
      *          specifier that is incompatible with the given arguments,
      *          insufficient arguments given the format string, or other
--- a/jdk/src/share/classes/java/io/Reader.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/share/classes/java/io/Reader.java	Thu Oct 11 16:59:50 2012 -0700
@@ -91,7 +91,7 @@
      *         -1 if this source of characters is at its end
      * @throws IOException if an I/O error occurs
      * @throws NullPointerException if target is null
-     * @throws ReadOnlyBufferException if target is a read only buffer
+     * @throws java.nio.ReadOnlyBufferException if target is a read only buffer
      * @since 1.5
      */
     public int read(java.nio.CharBuffer target) throws IOException {
--- a/jdk/src/share/classes/java/lang/Class.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/share/classes/java/lang/Class.java	Thu Oct 11 16:59:50 2012 -0700
@@ -2970,7 +2970,7 @@
     /**
      * Returns a map from simple name to enum constant.  This package-private
      * method is used internally by Enum to implement
-     *     public static <T extends Enum<T>> T valueOf(Class<T>, String)
+     * {@code public static <T extends Enum<T>> T valueOf(Class<T>, String)}
      * efficiently.  Note that the map is returned by this method is
      * created lazily on first use.  Typically it won't ever get created.
      */
--- a/jdk/src/share/classes/java/lang/InheritableThreadLocal.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/share/classes/java/lang/InheritableThreadLocal.java	Thu Oct 11 16:59:50 2012 -0700
@@ -76,7 +76,6 @@
      *
      * @param t the current thread
      * @param firstValue value for the initial entry of the table.
-     * @param map the map to store.
      */
     void createMap(Thread t, T firstValue) {
         t.inheritableThreadLocals = new ThreadLocalMap(this, firstValue);
--- a/jdk/src/share/classes/java/lang/Integer.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/share/classes/java/lang/Integer.java	Thu Oct 11 16:59:50 2012 -0700
@@ -752,7 +752,7 @@
      * -128 and 127 (inclusive) as required by JLS.
      *
      * The cache is initialized on first usage.  The size of the cache
-     * may be controlled by the -XX:AutoBoxCacheMax=<size> option.
+     * may be controlled by the {@code -XX:AutoBoxCacheMax=<size>} option.
      * During VM initialization, java.lang.Integer.IntegerCache.high property
      * may be set and saved in the private system properties in the
      * sun.misc.VM class.
--- a/jdk/src/share/classes/java/lang/Package.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/share/classes/java/lang/Package.java	Thu Oct 11 16:59:50 2012 -0700
@@ -316,7 +316,7 @@
      * attributes are defined in the manifests that accompany
      * the classes.
      *
-     * @param class the class to get the package of.
+     * @param c the class to get the package of.
      * @return the package of the class. It may be null if no package
      *          information is available from the archive or codebase.  */
     static Package getPackage(Class<?> c) {
@@ -411,14 +411,13 @@
     /**
      * Construct a package instance with the specified version
      * information.
-     * @param pkgName the name of the package
+     * @param name the name of the package
      * @param spectitle the title of the specification
      * @param specversion the version of the specification
      * @param specvendor the organization that maintains the specification
      * @param impltitle the title of the implementation
      * @param implversion the version of the implementation
      * @param implvendor the organization that maintains the implementation
-     * @return a new package for containing the specified information.
      */
     Package(String name,
             String spectitle, String specversion, String specvendor,
--- a/jdk/src/share/classes/java/lang/StrictMath.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/share/classes/java/lang/StrictMath.java	Thu Oct 11 16:59:50 2012 -0700
@@ -365,7 +365,7 @@
      * @param a the value to be floored or ceiled
      * @param negativeBoundary result for values in (-1, 0)
      * @param positiveBoundary result for values in (0, 1)
-     * @param increment value to add when the argument is non-integral
+     * @param sign the sign of the result
      */
     private static double floorOrCeil(double a,
                                       double negativeBoundary,
@@ -811,7 +811,7 @@
      * @param value the long value
      * @return the argument as an int
      * @throws ArithmeticException if the {@code argument} overflows an int
-     * @see Math#toIntExact(int)
+     * @see Math#toIntExact(long)
      * @since 1.8
      */
     public static int toIntExact(long value) {
--- a/jdk/src/share/classes/java/lang/String.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/share/classes/java/lang/String.java	Thu Oct 11 16:59:50 2012 -0700
@@ -2782,7 +2782,7 @@
      *         <tt>null</tt> argument depends on the <a
      *         href="../util/Formatter.html#syntax">conversion</a>.
      *
-     * @throws  IllegalFormatException
+     * @throws  java.util.IllegalFormatException
      *          If a format string contains an illegal syntax, a format
      *          specifier that is incompatible with the given arguments,
      *          insufficient arguments given the format string, or other
@@ -2826,7 +2826,7 @@
      *         <tt>null</tt> argument depends on the <a
      *         href="../util/Formatter.html#syntax">conversion</a>.
      *
-     * @throws  IllegalFormatException
+     * @throws  java.util.IllegalFormatException
      *          If a format string contains an illegal syntax, a format
      *          specifier that is incompatible with the given arguments,
      *          insufficient arguments given the format string, or other
--- a/jdk/src/share/classes/java/lang/System.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/share/classes/java/lang/System.java	Thu Oct 11 16:59:50 2012 -0700
@@ -545,7 +545,7 @@
      * <tr><td><code>java.version</code></td>
      *     <td>Java Runtime Environment version</td></tr>
      * <tr><td><code>java.vendor</code></td>
-     *     <td>Java Runtime Environment vendor</td></tr
+     *     <td>Java Runtime Environment vendor</td></tr>
      * <tr><td><code>java.vendor.url</code></td>
      *     <td>Java vendor URL</td></tr>
      * <tr><td><code>java.home</code></td>
--- a/jdk/src/share/classes/java/lang/ThreadGroup.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/share/classes/java/lang/ThreadGroup.java	Thu Oct 11 16:59:50 2012 -0700
@@ -918,9 +918,6 @@
      *
      * @param  t
      *         the Thread whose start method was invoked
-     *
-     * @param  failed
-     *         true if the thread could not be started successfully
      */
     void threadStartFailed(Thread t) {
         synchronized(this) {
--- a/jdk/src/share/classes/java/lang/ThreadLocal.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/share/classes/java/lang/ThreadLocal.java	Thu Oct 11 16:59:50 2012 -0700
@@ -47,8 +47,8 @@
  *     private static final AtomicInteger nextId = new AtomicInteger(0);
  *
  *     // Thread local variable containing each thread's ID
- *     private static final ThreadLocal&lt;Integer> threadId =
- *         new ThreadLocal&lt;Integer>() {
+ *     private static final ThreadLocal&lt;Integer&gt; threadId =
+ *         new ThreadLocal&lt;Integer&gt;() {
  *             &#64;Override protected Integer initialValue() {
  *                 return nextId.getAndIncrement();
  *         }
@@ -222,7 +222,6 @@
      *
      * @param t the current thread
      * @param firstValue value for the initial entry of the map
-     * @param map the map to store.
      */
     void createMap(Thread t, T firstValue) {
         t.threadLocals = new ThreadLocalMap(this, firstValue);
--- a/jdk/src/share/classes/java/lang/management/ThreadInfo.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/share/classes/java/lang/management/ThreadInfo.java	Thu Oct 11 16:59:50 2012 -0700
@@ -147,8 +147,9 @@
      * @param waitedCount   Number of times waited on a lock
      * @param waitedTime    Approx time waited on a lock
      * @param stackTrace    Thread stack trace
-     * @param lockedMonitors List of locked monitors
-     * @param lockedSynchronizers List of locked synchronizers
+     * @param monitors      List of locked monitors
+     * @param stackDepths   List of stack depths
+     * @param synchronizers List of locked synchronizers
      */
     private ThreadInfo(Thread t, int state, Object lockObj, Thread lockOwner,
                        long blockedCount, long blockedTime,
--- a/jdk/src/share/classes/java/net/AbstractPlainDatagramSocketImpl.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/share/classes/java/net/AbstractPlainDatagramSocketImpl.java	Thu Oct 11 16:59:50 2012 -0700
@@ -48,11 +48,6 @@
     protected InetAddress connectedAddress = null;
     private int connectedPort = -1;
 
-    /* cached socket options */
-    private int multicastInterface = 0;
-    private boolean loopbackMode = true;
-    private int ttl = -1;
-
     private static final String os = AccessController.doPrivileged(
         new sun.security.action.GetPropertyAction("os.name")
     );
@@ -104,7 +99,7 @@
     /**
      * Sends a datagram packet. The packet contains the data and the
      * destination address to send the packet to.
-     * @param packet to be sent.
+     * @param p the packet to be sent.
      */
     protected abstract void send(DatagramPacket p) throws IOException;
 
@@ -135,13 +130,13 @@
 
     /**
      * Peek at the packet to see who it is from.
-     * @param return the address which the packet came from.
+     * @param i the address to populate with the sender address
      */
     protected abstract int peek(InetAddress i) throws IOException;
     protected abstract int peekData(DatagramPacket p) throws IOException;
     /**
      * Receive the datagram packet.
-     * @param Packet Received.
+     * @param p the packet to receive into
      */
     protected synchronized void receive(DatagramPacket p)
         throws IOException {
@@ -153,7 +148,7 @@
 
     /**
      * Set the TTL (time-to-live) option.
-     * @param TTL to be set.
+     * @param ttl TTL to be set.
      */
     protected abstract void setTimeToLive(int ttl) throws IOException;
 
@@ -164,7 +159,7 @@
 
     /**
      * Set the TTL (time-to-live) option.
-     * @param TTL to be set.
+     * @param ttl TTL to be set.
      */
     @Deprecated
     protected abstract void setTTL(byte ttl) throws IOException;
@@ -177,7 +172,7 @@
 
     /**
      * Join the multicast group.
-     * @param multicast address to join.
+     * @param inetaddr multicast address to join.
      */
     protected void join(InetAddress inetaddr) throws IOException {
         join(inetaddr, null);
@@ -185,14 +180,14 @@
 
     /**
      * Leave the multicast group.
-     * @param multicast address to leave.
+     * @param inetaddr multicast address to leave.
      */
     protected void leave(InetAddress inetaddr) throws IOException {
         leave(inetaddr, null);
     }
     /**
      * Join the multicast group.
-     * @param multicast address to join.
+     * @param mcastaddr multicast address to join.
      * @param netIf specifies the local interface to receive multicast
      *        datagram packets
      * @throws  IllegalArgumentException if mcastaddr is null or is a
@@ -212,7 +207,7 @@
 
     /**
      * Leave the multicast group.
-     * @param multicast address to leave.
+     * @param mcastaddr  multicast address to leave.
      * @param netIf specified the local interface to leave the group at
      * @throws  IllegalArgumentException if mcastaddr is null or is a
      *          SocketAddress subclass not supported by this socket
--- a/jdk/src/share/classes/java/net/AbstractPlainSocketImpl.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/share/classes/java/net/AbstractPlainSocketImpl.java	Thu Oct 11 16:59:50 2012 -0700
@@ -368,7 +368,7 @@
     /**
      * Binds the socket to the specified address of the specified local port.
      * @param address the address
-     * @param port the port
+     * @param lport the port
      */
     protected synchronized void bind(InetAddress address, int lport)
         throws IOException
--- a/jdk/src/share/classes/java/net/DatagramSocket.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/share/classes/java/net/DatagramSocket.java	Thu Oct 11 16:59:50 2012 -0700
@@ -105,7 +105,7 @@
      * Connects this socket to a remote socket address (IP address + port number).
      * Binds socket if not already bound.
      * <p>
-     * @param   addr    The remote address.
+     * @param   address The remote address.
      * @param   port    The remote port
      * @throws  SocketException if binding the socket fails.
      */
--- a/jdk/src/share/classes/java/net/Inet4Address.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/share/classes/java/net/Inet4Address.java	Thu Oct 11 16:59:50 2012 -0700
@@ -177,7 +177,6 @@
      * a loopback address; or false otherwise.
      * @since 1.4
      */
-    private static final int loopback = 2130706433; /* 127.0.0.1 */
     public boolean isLoopbackAddress() {
         /* 127.x.x.x */
         byte[] byteAddr = getAddress();
--- a/jdk/src/share/classes/java/net/SocketInputStream.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/share/classes/java/net/SocketInputStream.java	Thu Oct 11 16:59:50 2012 -0700
@@ -112,7 +112,7 @@
      * <i>length</i> bytes of data.
      * @param b the buffer into which the data is read
      * @param off the start offset of the data
-     * @param len the maximum number of bytes read
+     * @param length the maximum number of bytes read
      * @return the actual number of bytes read, -1 is
      *          returned when the end of the stream is reached.
      * @exception IOException If an I/O error has occurred.
@@ -209,7 +209,7 @@
 
     /**
      * Skips n bytes of input.
-     * @param n the number of bytes to skip
+     * @param numbytes the number of bytes to skip
      * @return  the actual number of bytes skipped.
      * @exception IOException If an I/O error has occurred.
      */
--- a/jdk/src/share/classes/java/net/SocketPermission.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/share/classes/java/net/SocketPermission.java	Thu Oct 11 16:59:50 2012 -0700
@@ -138,7 +138,7 @@
  */
 
 public final class SocketPermission extends Permission
-implements java.io.Serializable
+    implements java.io.Serializable
 {
     private static final long serialVersionUID = -7204263841984476862L;
 
@@ -232,8 +232,7 @@
         trustNameService = tmp.booleanValue();
     }
 
-    private static synchronized Debug getDebug()
-    {
+    private static synchronized Debug getDebug() {
         if (!debugInit) {
             debug = Debug.getInstance("access");
             debugInit = true;
@@ -288,8 +287,7 @@
         defaultDeny = true;
     }
 
-    private static String getHost(String host)
-    {
+    private static String getHost(String host) {
         if (host.equals("")) {
             return "localhost";
         } else {
@@ -679,8 +677,8 @@
     }
 
     private boolean authorizedIPv4(String cname, byte[] addr) {
-            String authHost = "";
-            InetAddress auth;
+        String authHost = "";
+        InetAddress auth;
 
         try {
             authHost = "auth." +
@@ -708,8 +706,8 @@
     }
 
     private boolean authorizedIPv6(String cname, byte[] addr) {
-            String authHost = "";
-            InetAddress auth;
+        String authHost = "";
+        InetAddress auth;
 
         try {
             StringBuffer sb = new StringBuffer(39);
@@ -810,7 +808,6 @@
      * @return true if the specified permission is implied by this object,
      * false if not.
      */
-
     public boolean implies(Permission p) {
         int i,j;
 
@@ -844,12 +841,11 @@
      *      to find a match based on the IP addresses in both objects.
      * <li> Attempt to match on the canonical hostnames of both objects.
      * </ul>
-     * @param p the incoming permission request
+     * @param that the incoming permission request
      *
      * @return true if "permission" is a proper subset of the current object,
      * false if not.
      */
-
     boolean impliesIgnoreMask(SocketPermission that) {
         int i,j;
 
@@ -1229,7 +1225,7 @@
  */
 
 final class SocketPermissionCollection extends PermissionCollection
-implements Serializable
+    implements Serializable
 {
     // Not serialized; see serialization section at end of class
     private transient List<SocketPermission> perms;
@@ -1255,9 +1251,7 @@
      * @exception SecurityException - if this SocketPermissionCollection object
      *                                has been marked readonly
      */
-
-    public void add(Permission permission)
-    {
+    public void add(Permission permission) {
         if (! (permission instanceof SocketPermission))
             throw new IllegalArgumentException("invalid permission: "+
                                                permission);
@@ -1276,7 +1270,7 @@
      * Check and see if this collection of permissions implies the permissions
      * expressed in "permission".
      *
-     * @param p the Permission object to compare
+     * @param permission the Permission object to compare
      *
      * @return true if "permission" is a proper subset of a permission in
      * the collection, false if not.
@@ -1369,8 +1363,9 @@
     /*
      * Reads in a Vector of SocketPermissions and saves them in the perms field.
      */
-    private void readObject(ObjectInputStream in) throws IOException,
-    ClassNotFoundException {
+    private void readObject(ObjectInputStream in)
+        throws IOException, ClassNotFoundException
+    {
         // Don't call in.defaultReadObject()
 
         // Read in serialized fields
--- a/jdk/src/share/classes/java/net/SocksSocketImpl.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/share/classes/java/net/SocksSocketImpl.java	Thu Oct 11 16:59:50 2012 -0700
@@ -644,7 +644,7 @@
      * means "accept incoming connection from", so the SocketAddress is the
      * the one of the host we do accept connection from.
      *
-     * @param      addr   the Socket address of the remote host.
+     * @param      saddr   the Socket address of the remote host.
      * @exception  IOException  if an I/O error occurs when binding this socket.
      */
     protected synchronized void socksBind(InetSocketAddress saddr) throws IOException {
--- a/jdk/src/share/classes/java/net/URLConnection.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/share/classes/java/net/URLConnection.java	Thu Oct 11 16:59:50 2012 -0700
@@ -1241,10 +1241,9 @@
 
     /**
      * Gets the Content Handler appropriate for this connection.
-     * @param connection the connection to use.
      */
     synchronized ContentHandler getContentHandler()
-    throws UnknownServiceException
+        throws UnknownServiceException
     {
         String contentType = stripOffParameters(getContentType());
         ContentHandler handler = null;
--- a/jdk/src/share/classes/java/nio/X-Buffer.java.template	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/share/classes/java/nio/X-Buffer.java.template	Thu Oct 11 16:59:50 2012 -0700
@@ -741,6 +741,8 @@
     public $Type$Buffer put($Type$Buffer src) {
         if (src == this)
             throw new IllegalArgumentException();
+        if (isReadOnly())
+            throw new ReadOnlyBufferException();
         int n = src.remaining();
         if (n > remaining())
             throw new BufferOverflowException();
@@ -888,6 +890,8 @@
      */
     public $Type$Buffer put(String src, int start, int end) {
         checkBounds(start, end - start, src.length());
+        if (isReadOnly())
+            throw new ReadOnlyBufferException();
         if (end - start > remaining())
             throw new BufferOverflowException();
         for (int i = start; i < end; i++)
--- a/jdk/src/share/classes/java/nio/channels/Channels.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/share/classes/java/nio/channels/Channels.java	Thu Oct 11 16:59:50 2012 -0700
@@ -84,7 +84,7 @@
     /**
      * Write all remaining bytes in buffer to the given channel.
      *
-     * @throws  IllegalBlockingException
+     * @throws  IllegalBlockingModeException
      *          If the channel is selectable and configured non-blocking.
      */
     private static void writeFully(WritableByteChannel ch, ByteBuffer bb)
--- a/jdk/src/share/classes/java/nio/file/FileSystem.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/share/classes/java/nio/file/FileSystem.java	Thu Oct 11 16:59:50 2012 -0700
@@ -347,7 +347,7 @@
      *   <td><tt>C:&#92;&#92;*</tt>
      *   <td>Matches <tt>C:&#92;foo</tt> and <tt>C:&#92;bar</tt> on the Windows
      *   platform (note that the backslash is escaped; as a string literal in the
-     *   Java Language the pattern would be <tt>"C:&#92;&#92;&#92;&#92*"</tt>) </td>
+     *   Java Language the pattern would be <tt>"C:&#92;&#92;&#92;&#92;*"</tt>) </td>
      * </tr>
      *
      * </table>
--- a/jdk/src/share/classes/java/nio/file/Files.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/share/classes/java/nio/file/Files.java	Thu Oct 11 16:59:50 2012 -0700
@@ -510,7 +510,7 @@
      * <pre>
      *     DirectoryStream.Filter&lt;Path&gt; filter = new DirectoryStream.Filter&lt;Path&gt;() {
      *         public boolean accept(Path file) throws IOException {
-     *             return (Files.size(file) > 8192L);
+     *             return (Files.size(file) &gt; 8192L);
      *         }
      *     };
      *     Path dir = ...
@@ -1592,7 +1592,7 @@
      *     Path path = ...
      *     AclFileAttributeView view = Files.getFileAttributeView(path, AclFileAttributeView.class);
      *     if (view != null) {
-     *         List&lt;AclEntry&gt acl = view.getAcl();
+     *         List&lt;AclEntry&gt; acl = view.getAcl();
      *         :
      *     }
      * </pre>
--- a/jdk/src/share/classes/java/nio/file/Path.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/share/classes/java/nio/file/Path.java	Thu Oct 11 16:59:50 2012 -0700
@@ -522,7 +522,7 @@
      *
      * @return  a {@code Path} object representing the absolute path
      *
-     * @throws  IOError
+     * @throws  java.io.IOError
      *          if an I/O error occurs
      * @throws  SecurityException
      *          In the case of the default provider, a security manager
--- a/jdk/src/share/classes/java/nio/file/attribute/AclFileAttributeView.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/share/classes/java/nio/file/attribute/AclFileAttributeView.java	Thu Oct 11 16:59:50 2012 -0700
@@ -85,7 +85,7 @@
  *         .build();
  *
  *     // read ACL, insert ACE, re-write ACL
- *     List&lt;AclEntry&gt acl = view.getAcl();
+ *     List&lt;AclEntry&gt; acl = view.getAcl();
  *     acl.add(0, entry);   // insert before any DENY entries
  *     view.setAcl(acl);
  * </pre>
--- a/jdk/src/share/classes/java/nio/file/attribute/FileTime.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/share/classes/java/nio/file/attribute/FileTime.java	Thu Oct 11 16:59:50 2012 -0700
@@ -310,7 +310,7 @@
         private final long days;
 
         /**
-         * The excess (in nanoseconds); can be negative if days <= 0.
+         * The excess (in nanoseconds); can be negative if days &lt;= 0.
          */
         private final long excessNanos;
 
--- a/jdk/src/share/classes/java/security/AllPermission.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/share/classes/java/security/AllPermission.java	Thu Oct 11 16:59:50 2012 -0700
@@ -62,9 +62,7 @@
     /**
      * Creates a new AllPermission object.
      */
-
-    public AllPermission()
-    {
+    public AllPermission() {
         super("<all permissions>");
     }
 
@@ -77,8 +75,7 @@
      * @param name ignored
      * @param actions ignored.
      */
-    public AllPermission(String name, String actions)
-    {
+    public AllPermission(String name, String actions) {
         this();
     }
 
@@ -120,8 +117,7 @@
      *
      * @return the actions.
      */
-    public String getActions()
-    {
+    public String getActions() {
         return "<all actions>";
     }
 
@@ -133,7 +129,6 @@
      * @return a new PermissionCollection object suitable for
      * storing AllPermissions.
      */
-
     public PermissionCollection newPermissionCollection() {
         return new AllPermissionCollection();
     }
@@ -157,8 +152,8 @@
  */
 
 final class AllPermissionCollection
-extends PermissionCollection
-implements java.io.Serializable
+    extends PermissionCollection
+    implements java.io.Serializable
 {
 
     // use serialVersionUID from JDK 1.2.2 for interoperability
@@ -188,8 +183,7 @@
      *                                has been marked readonly
      */
 
-    public void add(Permission permission)
-    {
+    public void add(Permission permission) {
         if (! (permission instanceof AllPermission))
             throw new IllegalArgumentException("invalid permission: "+
                                                permission);
@@ -203,13 +197,12 @@
      * Check and see if this set of permissions implies the permissions
      * expressed in "permission".
      *
-     * @param p the Permission object to compare
+     * @param permission the Permission object to compare
      *
      * @return always returns true.
      */
 
-    public boolean implies(Permission permission)
-    {
+    public boolean implies(Permission permission) {
         return all_allowed; // No sync; staleness OK
     }
 
@@ -219,8 +212,7 @@
      *
      * @return an enumeration of all the AllPermission objects.
      */
-    public Enumeration<Permission> elements()
-    {
+    public Enumeration<Permission> elements() {
         return new Enumeration<Permission>() {
             private boolean hasMore = all_allowed;
 
--- a/jdk/src/share/classes/java/security/BasicPermission.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/share/classes/java/security/BasicPermission.java	Thu Oct 11 16:59:50 2012 -0700
@@ -68,7 +68,7 @@
  */
 
 public abstract class BasicPermission extends Permission
-implements java.io.Serializable
+    implements java.io.Serializable
 {
 
     private static final long serialVersionUID = 6279438298436773498L;
@@ -84,10 +84,8 @@
 
     /**
      * initialize a BasicPermission object. Common to all constructors.
-     *
      */
-    private void init(String name)
-    {
+    private void init(String name) {
         if (name == null)
             throw new NullPointerException("name can't be null");
 
@@ -129,9 +127,7 @@
      * @throws NullPointerException if <code>name</code> is <code>null</code>.
      * @throws IllegalArgumentException if <code>name</code> is empty.
      */
-
-    public BasicPermission(String name)
-    {
+    public BasicPermission(String name) {
         super(name);
         init(name);
     }
@@ -148,8 +144,7 @@
      * @throws NullPointerException if <code>name</code> is <code>null</code>.
      * @throws IllegalArgumentException if <code>name</code> is empty.
      */
-    public BasicPermission(String name, String actions)
-    {
+    public BasicPermission(String name, String actions) {
         super(name);
         init(name);
     }
@@ -238,8 +233,7 @@
      *
      * @return the empty string "".
      */
-    public String getActions()
-    {
+    public String getActions() {
         return "";
     }
 
@@ -296,7 +290,6 @@
  *
  * @see java.security.Permission
  * @see java.security.Permissions
- * @see java.security.PermissionsImpl
  *
  *
  * @author Roland Schemers
@@ -305,8 +298,8 @@
  */
 
 final class BasicPermissionCollection
-extends PermissionCollection
-implements java.io.Serializable
+    extends PermissionCollection
+    implements java.io.Serializable
 {
 
     private static final long serialVersionUID = 739301742472979399L;
@@ -360,9 +353,7 @@
      * @exception SecurityException - if this BasicPermissionCollection object
      *                                has been marked readonly
      */
-
-    public void add(Permission permission)
-    {
+    public void add(Permission permission) {
         if (! (permission instanceof BasicPermission))
             throw new IllegalArgumentException("invalid permission: "+
                                                permission);
@@ -398,16 +389,14 @@
      * Check and see if this set of permissions implies the permissions
      * expressed in "permission".
      *
-     * @param p the Permission object to compare
+     * @param permission the Permission object to compare
      *
      * @return true if "permission" is a proper subset of a permission in
      * the set, false if not.
      */
-
-    public boolean implies(Permission permission)
-    {
+    public boolean implies(Permission permission) {
         if (! (permission instanceof BasicPermission))
-                return false;
+            return false;
 
         BasicPermission bp = (BasicPermission) permission;
 
@@ -468,7 +457,6 @@
      *
      * @return an enumeration of all the BasicPermission objects.
      */
-
     public Enumeration<Permission> elements() {
         // Convert Iterator of Map values into an Enumeration
         synchronized (this) {
--- a/jdk/src/share/classes/java/security/CodeSource.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/share/classes/java/security/CodeSource.java	Thu Oct 11 16:59:50 2012 -0700
@@ -207,7 +207,7 @@
      * Returns the code signers associated with this CodeSource.
      * <p>
      * If this CodeSource object was created using the
-     * {@link #CodeSource(URL url, Certificate[] certs)}
+     * {@link #CodeSource(URL url, java.security.cert.Certificate[] certs)}
      * constructor then its certificate chains are extracted and used to
      * create an array of CodeSigner objects. Note that only X.509 certificates
      * are examined - all other certificate types are ignored.
--- a/jdk/src/share/classes/java/security/KeyStore.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/share/classes/java/security/KeyStore.java	Thu Oct 11 16:59:50 2012 -0700
@@ -32,6 +32,7 @@
 import java.util.*;
 import javax.crypto.SecretKey;
 
+import javax.security.auth.DestroyFailedException;
 import javax.security.auth.callback.*;
 
 /**
@@ -278,8 +279,7 @@
          * @exception DestroyFailedException if this method was unable
          *      to clear the password
          */
-        public synchronized void destroy()
-                throws javax.security.auth.DestroyFailedException {
+        public synchronized void destroy() throws DestroyFailedException {
             destroyed = true;
             if (password != null) {
                 Arrays.fill(password, ' ');
--- a/jdk/src/share/classes/java/security/cert/PKIXRevocationChecker.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/share/classes/java/security/cert/PKIXRevocationChecker.java	Thu Oct 11 16:59:50 2012 -0700
@@ -50,7 +50,7 @@
  * status of certificates with OCSP and CRLs. By default, OCSP is the
  * preferred mechanism for checking revocation status, with CRLs as the
  * fallback mechanism. However, this preference can be switched to CRLs with
- * the {@link Option.PREFER_CRLS} option.
+ * the {@link Option#PREFER_CRLS PREFER_CRLS} option.
  *
  * <p>A {@code PKIXRevocationChecker} is obtained by calling the
  * {@link CertPathValidator#getRevocationChecker getRevocationChecker} method
--- a/jdk/src/share/classes/java/sql/CallableStatement.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/share/classes/java/sql/CallableStatement.java	Thu Oct 11 16:59:50 2012 -0700
@@ -1562,7 +1562,7 @@
      * @param parameterName the name of the parameter
      * @return the parameter value in full precision.  If the value is
      * SQL <code>NULL</code>, the result is <code>null</code>.
-     * @exception SQLExceptionif parameterName does not correspond to a named
+     * @exception SQLException if parameterName does not correspond to a named
      * parameter;  if a database access error occurs or
      * this method is called on a closed <code>CallableStatement</code>
      * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
--- a/jdk/src/share/classes/java/text/CollationElementIterator.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/share/classes/java/text/CollationElementIterator.java	Thu Oct 11 16:59:50 2012 -0700
@@ -119,7 +119,7 @@
      * on the predefined collation rules.  If the source string is empty,
      * NULLORDER will be returned on the calls to next().
      * @param sourceText the source string.
-     * @param order the collation object.
+     * @param owner the collation object.
      */
     CollationElementIterator(String sourceText, RuleBasedCollator owner) {
         this.owner = owner;
@@ -137,7 +137,7 @@
      * on the predefined collation rules.  If the source string is empty,
      * NULLORDER will be returned on the calls to next().
      * @param sourceText the source string.
-     * @param order the collation object.
+     * @param owner the collation object.
      */
     CollationElementIterator(CharacterIterator sourceText, RuleBasedCollator owner) {
         this.owner = owner;
--- a/jdk/src/share/classes/java/text/DecimalFormat.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/share/classes/java/text/DecimalFormat.java	Thu Oct 11 16:59:50 2012 -0700
@@ -529,9 +529,25 @@
     @Override
     public StringBuffer format(double number, StringBuffer result,
                                FieldPosition fieldPosition) {
-        fieldPosition.setBeginIndex(0);
-        fieldPosition.setEndIndex(0);
-
+        // If fieldPosition is a DontCareFieldPosition instance we can
+        // try to go to fast-path code.
+        boolean tryFastPath = false;
+        if (fieldPosition == DontCareFieldPosition.INSTANCE)
+            tryFastPath = true;
+        else {
+            fieldPosition.setBeginIndex(0);
+            fieldPosition.setEndIndex(0);
+        }
+
+        if (tryFastPath) {
+            String tempResult = fastFormat(number);
+            if (tempResult != null) {
+                result.append(tempResult);
+                return result;
+            }
+        }
+
+        // if fast-path could not work, we fallback to standard code.
         return format(number, result, fieldPosition.getFieldDelegate());
     }
 
@@ -869,6 +885,720 @@
         return delegate.getIterator(sb.toString());
     }
 
+    // ==== Begin fast-path formating logic for double =========================
+
+    /* Fast-path formatting will be used for format(double ...) methods iff a
+     * number of conditions are met (see checkAndSetFastPathStatus()):
+     * - Only if instance properties meet the right predefined conditions.
+     * - The abs value of the double to format is <= Integer.MAX_VALUE.
+     *
+     * The basic approach is to split the binary to decimal conversion of a
+     * double value into two phases:
+     * * The conversion of the integer portion of the double.
+     * * The conversion of the fractional portion of the double
+     *   (limited to two or three digits).
+     *
+     * The isolation and conversion of the integer portion of the double is
+     * straightforward. The conversion of the fraction is more subtle and relies
+     * on some rounding properties of double to the decimal precisions in
+     * question.  Using the terminology of BigDecimal, this fast-path algorithm
+     * is applied when a double value has a magnitude less than Integer.MAX_VALUE
+     * and rounding is to nearest even and the destination format has two or
+     * three digits of *scale* (digits after the decimal point).
+     *
+     * Under a rounding to nearest even policy, the returned result is a digit
+     * string of a number in the (in this case decimal) destination format
+     * closest to the exact numerical value of the (in this case binary) input
+     * value.  If two destination format numbers are equally distant, the one
+     * with the last digit even is returned.  To compute such a correctly rounded
+     * value, some information about digits beyond the smallest returned digit
+     * position needs to be consulted.
+     *
+     * In general, a guard digit, a round digit, and a sticky *bit* are needed
+     * beyond the returned digit position.  If the discarded portion of the input
+     * is sufficiently large, the returned digit string is incremented.  In round
+     * to nearest even, this threshold to increment occurs near the half-way
+     * point between digits.  The sticky bit records if there are any remaining
+     * trailing digits of the exact input value in the new format; the sticky bit
+     * is consulted only in close to half-way rounding cases.
+     *
+     * Given the computation of the digit and bit values, rounding is then
+     * reduced to a table lookup problem.  For decimal, the even/odd cases look
+     * like this:
+     *
+     * Last   Round   Sticky
+     * 6      5       0      => 6   // exactly halfway, return even digit.
+     * 6      5       1      => 7   // a little bit more than halfway, round up.
+     * 7      5       0      => 8   // exactly halfway, round up to even.
+     * 7      5       1      => 8   // a little bit more than halfway, round up.
+     * With analogous entries for other even and odd last-returned digits.
+     *
+     * However, decimal negative powers of 5 smaller than 0.5 are *not* exactly
+     * representable as binary fraction.  In particular, 0.005 (the round limit
+     * for a two-digit scale) and 0.0005 (the round limit for a three-digit
+     * scale) are not representable. Therefore, for input values near these cases
+     * the sticky bit is known to be set which reduces the rounding logic to:
+     *
+     * Last   Round   Sticky
+     * 6      5       1      => 7   // a little bit more than halfway, round up.
+     * 7      5       1      => 8   // a little bit more than halfway, round up.
+     *
+     * In other words, if the round digit is 5, the sticky bit is known to be
+     * set.  If the round digit is something other than 5, the sticky bit is not
+     * relevant.  Therefore, some of the logic about whether or not to increment
+     * the destination *decimal* value can occur based on tests of *binary*
+     * computations of the binary input number.
+     */
+
+    /**
+     * Check validity of using fast-path for this instance. If fast-path is valid
+     * for this instance, sets fast-path state as true and initializes fast-path
+     * utility fields as needed.
+     *
+     * This method is supposed to be called rarely, otherwise that will break the
+     * fast-path performance. That means avoiding frequent changes of the
+     * properties of the instance, since for most properties, each time a change
+     * happens, a call to this method is needed at the next format call.
+     *
+     * FAST-PATH RULES:
+     *  Similar to the default DecimalFormat instantiation case.
+     *  More precisely:
+     *  - HALF_EVEN rounding mode,
+     *  - isGroupingUsed() is true,
+     *  - groupingSize of 3,
+     *  - multiplier is 1,
+     *  - Decimal separator not mandatory,
+     *  - No use of exponential notation,
+     *  - minimumIntegerDigits is exactly 1 and maximumIntegerDigits at least 10
+     *  - For number of fractional digits, the exact values found in the default case:
+     *     Currency : min = max = 2.
+     *     Decimal  : min = 0. max = 3.
+     *
+     */
+    private void checkAndSetFastPathStatus() {
+
+        boolean fastPathWasOn = isFastPath;
+
+        if ((roundingMode == RoundingMode.HALF_EVEN) &&
+            (isGroupingUsed()) &&
+            (groupingSize == 3) &&
+            (multiplier == 1) &&
+            (!decimalSeparatorAlwaysShown) &&
+            (!useExponentialNotation)) {
+
+            // The fast-path algorithm is semi-hardcoded against
+            //  minimumIntegerDigits and maximumIntegerDigits.
+            isFastPath = ((minimumIntegerDigits == 1) &&
+                          (maximumIntegerDigits >= 10));
+
+            // The fast-path algorithm is hardcoded against
+            //  minimumFractionDigits and maximumFractionDigits.
+            if (isFastPath) {
+                if (isCurrencyFormat) {
+                    if ((minimumFractionDigits != 2) ||
+                        (maximumFractionDigits != 2))
+                        isFastPath = false;
+                } else if ((minimumFractionDigits != 0) ||
+                           (maximumFractionDigits != 3))
+                    isFastPath = false;
+            }
+        } else
+            isFastPath = false;
+
+        // Since some instance properties may have changed while still falling
+        // in the fast-path case, we need to reinitialize fastPathData anyway.
+        if (isFastPath) {
+            // We need to instantiate fastPathData if not already done.
+            if (fastPathData == null)
+                fastPathData = new FastPathData();
+
+            // Sets up the locale specific constants used when formatting.
+            // '0' is our default representation of zero.
+            fastPathData.zeroDelta = symbols.getZeroDigit() - '0';
+            fastPathData.groupingChar = symbols.getGroupingSeparator();
+
+            // Sets up fractional constants related to currency/decimal pattern.
+            fastPathData.fractionalMaxIntBound = (isCurrencyFormat) ? 99 : 999;
+            fastPathData.fractionalScaleFactor = (isCurrencyFormat) ? 100.0d : 1000.0d;
+
+            // Records the need for adding prefix or suffix
+            fastPathData.positiveAffixesRequired =
+                (positivePrefix.length() != 0) || (positiveSuffix.length() != 0);
+            fastPathData.negativeAffixesRequired =
+                (negativePrefix.length() != 0) || (negativeSuffix.length() != 0);
+
+            // Creates a cached char container for result, with max possible size.
+            int maxNbIntegralDigits = 10;
+            int maxNbGroups = 3;
+            int containerSize =
+                Math.max(positivePrefix.length(), negativePrefix.length()) +
+                maxNbIntegralDigits + maxNbGroups + 1 + maximumFractionDigits +
+                Math.max(positiveSuffix.length(), negativeSuffix.length());
+
+            fastPathData.fastPathContainer = new char[containerSize];
+
+            // Sets up prefix and suffix char arrays constants.
+            fastPathData.charsPositiveSuffix = positiveSuffix.toCharArray();
+            fastPathData.charsNegativeSuffix = negativeSuffix.toCharArray();
+            fastPathData.charsPositivePrefix = positivePrefix.toCharArray();
+            fastPathData.charsNegativePrefix = negativePrefix.toCharArray();
+
+            // Sets up fixed index positions for integral and fractional digits.
+            // Sets up decimal point in cached result container.
+            int longestPrefixLength =
+                Math.max(positivePrefix.length(), negativePrefix.length());
+            int decimalPointIndex =
+                maxNbIntegralDigits + maxNbGroups + longestPrefixLength;
+
+            fastPathData.integralLastIndex    = decimalPointIndex - 1;
+            fastPathData.fractionalFirstIndex = decimalPointIndex + 1;
+            fastPathData.fastPathContainer[decimalPointIndex] =
+                isCurrencyFormat ?
+                symbols.getMonetaryDecimalSeparator() :
+                symbols.getDecimalSeparator();
+
+        } else if (fastPathWasOn) {
+            // Previous state was fast-path and is no more.
+            // Resets cached array constants.
+            fastPathData.fastPathContainer = null;
+            fastPathData.charsPositiveSuffix = null;
+            fastPathData.charsNegativeSuffix = null;
+            fastPathData.charsPositivePrefix = null;
+            fastPathData.charsNegativePrefix = null;
+        }
+
+        fastPathCheckNeeded = false;
+    }
+
+    /**
+     * Returns true if rounding-up must be done on {@code scaledFractionalPartAsInt},
+     * false otherwise.
+     *
+     * This is a utility method that takes correct half-even rounding decision on
+     * passed fractional value at the scaled decimal point (2 digits for currency
+     * case and 3 for decimal case), when the approximated fractional part after
+     * scaled decimal point is exactly 0.5d.  This is done by means of exact
+     * calculations on the {@code fractionalPart} floating-point value.
+     *
+     * This method is supposed to be called by private {@code fastDoubleFormat}
+     * method only.
+     *
+     * The algorithms used for the exact calculations are :
+     *
+     * The <b><i>FastTwoSum</i></b> algorithm, from T.J.Dekker, described in the
+     * papers  "<i>A  Floating-Point   Technique  for  Extending  the  Available
+     * Precision</i>"  by Dekker, and  in "<i>Adaptive  Precision Floating-Point
+     * Arithmetic and Fast Robust Geometric Predicates</i>" from J.Shewchuk.
+     *
+     * A modified version of <b><i>Sum2S</i></b> cascaded summation described in
+     * "<i>Accurate Sum and Dot Product</i>" from Takeshi Ogita and All.  As
+     * Ogita says in this paper this is an equivalent of the Kahan-Babuska's
+     * summation algorithm because we order the terms by magnitude before summing
+     * them. For this reason we can use the <i>FastTwoSum</i> algorithm rather
+     * than the more expensive Knuth's <i>TwoSum</i>.
+     *
+     * We do this to avoid a more expensive exact "<i>TwoProduct</i>" algorithm,
+     * like those described in Shewchuk's paper above. See comments in the code
+     * below.
+     *
+     * @param  fractionalPart The  fractional value  on which  we  take rounding
+     * decision.
+     * @param scaledFractionalPartAsInt The integral part of the scaled
+     * fractional value.
+     *
+     * @return the decision that must be taken regarding half-even rounding.
+     */
+    private boolean exactRoundUp(double fractionalPart,
+                                 int scaledFractionalPartAsInt) {
+
+        /* exactRoundUp() method is called by fastDoubleFormat() only.
+         * The precondition expected to be verified by the passed parameters is :
+         * scaledFractionalPartAsInt ==
+         *     (int) (fractionalPart * fastPathData.fractionalScaleFactor).
+         * This is ensured by fastDoubleFormat() code.
+         */
+
+        /* We first calculate roundoff error made by fastDoubleFormat() on
+         * the scaled fractional part. We do this with exact calculation on the
+         * passed fractionalPart. Rounding decision will then be taken from roundoff.
+         */
+
+        /* ---- TwoProduct(fractionalPart, scale factor (i.e. 1000.0d or 100.0d)).
+         *
+         * The below is an optimized exact "TwoProduct" calculation of passed
+         * fractional part with scale factor, using Ogita's Sum2S cascaded
+         * summation adapted as Kahan-Babuska equivalent by using FastTwoSum
+         * (much faster) rather than Knuth's TwoSum.
+         *
+         * We can do this because we order the summation from smallest to
+         * greatest, so that FastTwoSum can be used without any additional error.
+         *
+         * The "TwoProduct" exact calculation needs 17 flops. We replace this by
+         * a cascaded summation of FastTwoSum calculations, each involving an
+         * exact multiply by a power of 2.
+         *
+         * Doing so saves overall 4 multiplications and 1 addition compared to
+         * using traditional "TwoProduct".
+         *
+         * The scale factor is either 100 (currency case) or 1000 (decimal case).
+         * - when 1000, we replace it by (1024 - 16 - 8) = 1000.
+         * - when 100,  we replace it by (128  - 32 + 4) =  100.
+         * Every multiplication by a power of 2 (1024, 128, 32, 16, 8, 4) is exact.
+         *
+         */
+        double approxMax;    // Will always be positive.
+        double approxMedium; // Will always be negative.
+        double approxMin;
+
+        double fastTwoSumApproximation = 0.0d;
+        double fastTwoSumRoundOff = 0.0d;
+        double bVirtual = 0.0d;
+
+        if (isCurrencyFormat) {
+            // Scale is 100 = 128 - 32 + 4.
+            // Multiply by 2**n is a shift. No roundoff. No error.
+            approxMax    = fractionalPart * 128.00d;
+            approxMedium = - (fractionalPart * 32.00d);
+            approxMin    = fractionalPart * 4.00d;
+        } else {
+            // Scale is 1000 = 1024 - 16 - 8.
+            // Multiply by 2**n is a shift. No roundoff. No error.
+            approxMax    = fractionalPart * 1024.00d;
+            approxMedium = - (fractionalPart * 16.00d);
+            approxMin    = - (fractionalPart * 8.00d);
+        }
+
+        // Shewchuk/Dekker's FastTwoSum(approxMedium, approxMin).
+        assert(-approxMedium >= Math.abs(approxMin));
+        fastTwoSumApproximation = approxMedium + approxMin;
+        bVirtual = fastTwoSumApproximation - approxMedium;
+        fastTwoSumRoundOff = approxMin - bVirtual;
+        double approxS1 = fastTwoSumApproximation;
+        double roundoffS1 = fastTwoSumRoundOff;
+
+        // Shewchuk/Dekker's FastTwoSum(approxMax, approxS1);
+        assert(approxMax >= Math.abs(approxS1));
+        fastTwoSumApproximation = approxMax + approxS1;
+        bVirtual = fastTwoSumApproximation - approxMax;
+        fastTwoSumRoundOff = approxS1 - bVirtual;
+        double roundoff1000 = fastTwoSumRoundOff;
+        double approx1000 = fastTwoSumApproximation;
+        double roundoffTotal = roundoffS1 + roundoff1000;
+
+        // Shewchuk/Dekker's FastTwoSum(approx1000, roundoffTotal);
+        assert(approx1000 >= Math.abs(roundoffTotal));
+        fastTwoSumApproximation = approx1000 + roundoffTotal;
+        bVirtual = fastTwoSumApproximation - approx1000;
+
+        // Now we have got the roundoff for the scaled fractional
+        double scaledFractionalRoundoff = roundoffTotal - bVirtual;
+
+        // ---- TwoProduct(fractionalPart, scale (i.e. 1000.0d or 100.0d)) end.
+
+        /* ---- Taking the rounding decision
+         *
+         * We take rounding decision based on roundoff and half-even rounding
+         * rule.
+         *
+         * The above TwoProduct gives us the exact roundoff on the approximated
+         * scaled fractional, and we know that this approximation is exactly
+         * 0.5d, since that has already been tested by the caller
+         * (fastDoubleFormat).
+         *
+         * Decision comes first from the sign of the calculated exact roundoff.
+         * - Since being exact roundoff, it cannot be positive with a scaled
+         *   fractional less than 0.5d, as well as negative with a scaled
+         *   fractional greater than 0.5d. That leaves us with following 3 cases.
+         * - positive, thus scaled fractional == 0.500....0fff ==> round-up.
+         * - negative, thus scaled fractional == 0.499....9fff ==> don't round-up.
+         * - is zero,  thus scaled fractioanl == 0.5 ==> half-even rounding applies :
+         *    we round-up only if the integral part of the scaled fractional is odd.
+         *
+         */
+        if (scaledFractionalRoundoff > 0.0) {
+            return true;
+        } else if (scaledFractionalRoundoff < 0.0) {
+            return false;
+        } else if ((scaledFractionalPartAsInt & 1) != 0) {
+            return true;
+        }
+
+        return false;
+
+        // ---- Taking the rounding decision end
+    }
+
+    /**
+     * Collects integral digits from passed {@code number}, while setting
+     * grouping chars as needed. Updates {@code firstUsedIndex} accordingly.
+     *
+     * Loops downward starting from {@code backwardIndex} position (inclusive).
+     *
+     * @param number  The int value from which we collect digits.
+     * @param digitsBuffer The char array container where digits and grouping chars
+     *  are stored.
+     * @param backwardIndex the position from which we start storing digits in
+     *  digitsBuffer.
+     *
+     */
+    private void collectIntegralDigits(int number,
+                                       char[] digitsBuffer,
+                                       int backwardIndex) {
+        int index = backwardIndex;
+        int q;
+        int r;
+        while (number > 999) {
+            // Generates 3 digits per iteration.
+            q = number / 1000;
+            r = number - (q << 10) + (q << 4) + (q << 3); // -1024 +16 +8 = 1000.
+            number = q;
+
+            digitsBuffer[index--] = DigitArrays.DigitOnes1000[r];
+            digitsBuffer[index--] = DigitArrays.DigitTens1000[r];
+            digitsBuffer[index--] = DigitArrays.DigitHundreds1000[r];
+            digitsBuffer[index--] = fastPathData.groupingChar;
+        }
+
+        // Collects last 3 or less digits.
+        digitsBuffer[index] = DigitArrays.DigitOnes1000[number];
+        if (number > 9) {
+            digitsBuffer[--index]  = DigitArrays.DigitTens1000[number];
+            if (number > 99)
+                digitsBuffer[--index]   = DigitArrays.DigitHundreds1000[number];
+        }
+
+        fastPathData.firstUsedIndex = index;
+    }
+
+    /**
+     * Collects the 2 (currency) or 3 (decimal) fractional digits from passed
+     * {@code number}, starting at {@code startIndex} position
+     * inclusive.  There is no punctuation to set here (no grouping chars).
+     * Updates {@code fastPathData.lastFreeIndex} accordingly.
+     *
+     *
+     * @param number  The int value from which we collect digits.
+     * @param digitsBuffer The char array container where digits are stored.
+     * @param startIndex the position from which we start storing digits in
+     *  digitsBuffer.
+     *
+     */
+    private void collectFractionalDigits(int number,
+                                         char[] digitsBuffer,
+                                         int startIndex) {
+        int index = startIndex;
+
+        char digitOnes = DigitArrays.DigitOnes1000[number];
+        char digitTens = DigitArrays.DigitTens1000[number];
+
+        if (isCurrencyFormat) {
+            // Currency case. Always collects fractional digits.
+            digitsBuffer[index++] = digitTens;
+            digitsBuffer[index++] = digitOnes;
+        } else if (number != 0) {
+            // Decimal case. Hundreds will always be collected
+            digitsBuffer[index++] = DigitArrays.DigitHundreds1000[number];
+
+            // Ending zeros won't be collected.
+            if (digitOnes != '0') {
+                digitsBuffer[index++] = digitTens;
+                digitsBuffer[index++] = digitOnes;
+            } else if (digitTens != '0')
+                digitsBuffer[index++] = digitTens;
+
+        } else
+            // This is decimal pattern and fractional part is zero.
+            // We must remove decimal point from result.
+            index--;
+
+        fastPathData.lastFreeIndex = index;
+    }
+
+    /**
+     * Internal utility.
+     * Adds the passed {@code prefix} and {@code suffix} to {@code container}.
+     *
+     * @param container  Char array container which to prepend/append the
+     *  prefix/suffix.
+     * @param prefix     Char sequence to prepend as a prefix.
+     * @param suffix     Char sequence to append as a suffix.
+     *
+     */
+    //    private void addAffixes(boolean isNegative, char[] container) {
+    private void addAffixes(char[] container, char[] prefix, char[] suffix) {
+
+        // We add affixes only if needed (affix length > 0).
+        int pl = prefix.length;
+        int sl = suffix.length;
+        if (pl != 0) prependPrefix(prefix, pl, container);
+        if (sl != 0) appendSuffix(suffix, sl, container);
+
+    }
+
+    /**
+     * Prepends the passed {@code prefix} chars to given result
+     * {@code container}.  Updates {@code fastPathData.firstUsedIndex}
+     * accordingly.
+     *
+     * @param prefix The prefix characters to prepend to result.
+     * @param len The number of chars to prepend.
+     * @param container Char array container which to prepend the prefix
+     */
+    private void prependPrefix(char[] prefix,
+                               int len,
+                               char[] container) {
+
+        fastPathData.firstUsedIndex -= len;
+        int startIndex = fastPathData.firstUsedIndex;
+
+        // If prefix to prepend is only 1 char long, just assigns this char.
+        // If prefix is less or equal 4, we use a dedicated algorithm that
+        //  has shown to run faster than System.arraycopy.
+        // If more than 4, we use System.arraycopy.
+        if (len == 1)
+            container[startIndex] = prefix[0];
+        else if (len <= 4) {
+            int dstLower = startIndex;
+            int dstUpper = dstLower + len - 1;
+            int srcUpper = len - 1;
+            container[dstLower] = prefix[0];
+            container[dstUpper] = prefix[srcUpper];
+
+            if (len > 2)
+                container[++dstLower] = prefix[1];
+            if (len == 4)
+                container[--dstUpper] = prefix[2];
+        } else
+            System.arraycopy(prefix, 0, container, startIndex, len);
+    }
+
+    /**
+     * Appends the passed {@code suffix} chars to given result
+     * {@code container}.  Updates {@code fastPathData.lastFreeIndex}
+     * accordingly.
+     *
+     * @param suffix The suffix characters to append to result.
+     * @param len The number of chars to append.
+     * @param container Char array container which to append the suffix
+     */
+    private void appendSuffix(char[] suffix,
+                              int len,
+                              char[] container) {
+
+        int startIndex = fastPathData.lastFreeIndex;
+
+        // If suffix to append is only 1 char long, just assigns this char.
+        // If suffix is less or equal 4, we use a dedicated algorithm that
+        //  has shown to run faster than System.arraycopy.
+        // If more than 4, we use System.arraycopy.
+        if (len == 1)
+            container[startIndex] = suffix[0];
+        else if (len <= 4) {
+            int dstLower = startIndex;
+            int dstUpper = dstLower + len - 1;
+            int srcUpper = len - 1;
+            container[dstLower] = suffix[0];
+            container[dstUpper] = suffix[srcUpper];
+
+            if (len > 2)
+                container[++dstLower] = suffix[1];
+            if (len == 4)
+                container[--dstUpper] = suffix[2];
+        } else
+            System.arraycopy(suffix, 0, container, startIndex, len);
+
+        fastPathData.lastFreeIndex += len;
+    }
+
+    /**
+     * Converts digit chars from {@code digitsBuffer} to current locale.
+     *
+     * Must be called before adding affixes since we refer to
+     * {@code fastPathData.firstUsedIndex} and {@code fastPathData.lastFreeIndex},
+     * and do not support affixes (for speed reason).
+     *
+     * We loop backward starting from last used index in {@code fastPathData}.
+     *
+     * @param digitsBuffer The char array container where the digits are stored.
+     */
+    private void localizeDigits(char[] digitsBuffer) {
+
+        // We will localize only the digits, using the groupingSize,
+        // and taking into account fractional part.
+
+        // First take into account fractional part.
+        int digitsCounter =
+            fastPathData.lastFreeIndex - fastPathData.fractionalFirstIndex;
+
+        // The case when there is no fractional digits.
+        if (digitsCounter < 0)
+            digitsCounter = groupingSize;
+
+        // Only the digits remains to localize.
+        for (int cursor = fastPathData.lastFreeIndex - 1;
+             cursor >= fastPathData.firstUsedIndex;
+             cursor--) {
+            if (digitsCounter != 0) {
+                // This is a digit char, we must localize it.
+                digitsBuffer[cursor] += fastPathData.zeroDelta;
+                digitsCounter--;
+            } else {
+                // Decimal separator or grouping char. Reinit counter only.
+                digitsCounter = groupingSize;
+            }
+        }
+    }
+
+    /**
+     * This is the main entry point for the fast-path format algorithm.
+     *
+     * At this point we are sure to be in the expected conditions to run it.
+     * This algorithm builds the formatted result and puts it in the dedicated
+     * {@code fastPathData.fastPathContainer}.
+     *
+     * @param d the double value to be formatted.
+     * @param negative Flag precising if {@code d} is negative.
+     */
+    private void fastDoubleFormat(double d,
+                                  boolean negative) {
+
+        char[] container = fastPathData.fastPathContainer;
+
+        /*
+         * The principle of the algorithm is to :
+         * - Break the passed double into its integral and fractional parts
+         *    converted into integers.
+         * - Then decide if rounding up must be applied or not by following
+         *    the half-even rounding rule, first using approximated scaled
+         *    fractional part.
+         * - For the difficult cases (approximated scaled fractional part
+         *    being exactly 0.5d), we refine the rounding decision by calling
+         *    exactRoundUp utility method that both calculates the exact roundoff
+         *    on the approximation and takes correct rounding decision.
+         * - We round-up the fractional part if needed, possibly propagating the
+         *    rounding to integral part if we meet a "all-nine" case for the
+         *    scaled fractional part.
+         * - We then collect digits from the resulting integral and fractional
+         *   parts, also setting the required grouping chars on the fly.
+         * - Then we localize the collected digits if needed, and
+         * - Finally prepend/append prefix/suffix if any is needed.
+         */
+
+        // Exact integral part of d.
+        int integralPartAsInt = (int) d;
+
+        // Exact fractional part of d (since we subtract it's integral part).
+        double exactFractionalPart = d - (double) integralPartAsInt;
+
+        // Approximated scaled fractional part of d (due to multiplication).
+        double scaledFractional =
+            exactFractionalPart * fastPathData.fractionalScaleFactor;
+
+        // Exact integral part of scaled fractional above.
+        int fractionalPartAsInt = (int) scaledFractional;
+
+        // Exact fractional part of scaled fractional above.
+        scaledFractional = scaledFractional - (double) fractionalPartAsInt;
+
+        // Only when scaledFractional is exactly 0.5d do we have to do exact
+        // calculations and take fine-grained rounding decision, since
+        // approximated results above may lead to incorrect decision.
+        // Otherwise comparing against 0.5d (strictly greater or less) is ok.
+        boolean roundItUp = false;
+        if (scaledFractional >= 0.5d) {
+            if (scaledFractional == 0.5d)
+                // Rounding need fine-grained decision.
+                roundItUp = exactRoundUp(exactFractionalPart, fractionalPartAsInt);
+            else
+                roundItUp = true;
+
+            if (roundItUp) {
+                // Rounds up both fractional part (and also integral if needed).
+                if (fractionalPartAsInt < fastPathData.fractionalMaxIntBound) {
+                    fractionalPartAsInt++;
+                } else {
+                    // Propagates rounding to integral part since "all nines" case.
+                    fractionalPartAsInt = 0;
+                    integralPartAsInt++;
+                }
+            }
+        }
+
+        // Collecting digits.
+        collectFractionalDigits(fractionalPartAsInt, container,
+                                fastPathData.fractionalFirstIndex);
+        collectIntegralDigits(integralPartAsInt, container,
+                              fastPathData.integralLastIndex);
+
+        // Localizing digits.
+        if (fastPathData.zeroDelta != 0)
+            localizeDigits(container);
+
+        // Adding prefix and suffix.
+        if (negative) {
+            if (fastPathData.negativeAffixesRequired)
+                addAffixes(container,
+                           fastPathData.charsNegativePrefix,
+                           fastPathData.charsNegativeSuffix);
+        } else if (fastPathData.positiveAffixesRequired)
+            addAffixes(container,
+                       fastPathData.charsPositivePrefix,
+                       fastPathData.charsPositiveSuffix);
+    }
+
+    /**
+     * A fast-path shortcut of format(double) to be called by NumberFormat, or by
+     * format(double, ...) public methods.
+     *
+     * If instance can be applied fast-path and passed double is not NaN or
+     * Infinity, is in the integer range, we call {@code fastDoubleFormat}
+     * after changing {@code d} to its positive value if necessary.
+     *
+     * Otherwise returns null by convention since fast-path can't be exercized.
+     *
+     * @param d The double value to be formatted
+     *
+     * @return the formatted result for {@code d} as a string.
+     */
+    String fastFormat(double d) {
+        // (Re-)Evaluates fast-path status if needed.
+        if (fastPathCheckNeeded)
+            checkAndSetFastPathStatus();
+
+        if (!isFastPath )
+            // DecimalFormat instance is not in a fast-path state.
+            return null;
+
+        if (!Double.isFinite(d))
+            // Should not use fast-path for Infinity and NaN.
+            return null;
+
+        // Extracts and records sign of double value, possibly changing it
+        // to a positive one, before calling fastDoubleFormat().
+        boolean negative = false;
+        if (d < 0.0d) {
+            negative = true;
+            d = -d;
+        } else if (d == 0.0d) {
+            negative = (Math.copySign(1.0d, d) == -1.0d);
+            d = +0.0d;
+        }
+
+        if (d > MAX_INT_AS_DOUBLE)
+            // Filters out values that are outside expected fast-path range
+            return null;
+        else
+            fastDoubleFormat(d, negative);
+
+        // Returns a new string from updated fastPathContainer.
+        return new String(fastPathData.fastPathContainer,
+                          fastPathData.firstUsedIndex,
+                          fastPathData.lastFreeIndex - fastPathData.firstUsedIndex);
+
+    }
+
+    // ======== End fast-path formating logic for double =========================
+
     /**
      * Complete the formatting of a finite number.  On entry, the digitList must
      * be filled in with the correct digits.
@@ -1168,8 +1898,7 @@
         if (isNegative) {
             append(result, negativeSuffix, delegate,
                    getNegativeSuffixFieldPositions(), Field.SIGN);
-        }
-        else {
+        } else {
             append(result, positiveSuffix, delegate,
                    getPositiveSuffixFieldPositions(), Field.SIGN);
         }
@@ -1557,8 +2286,7 @@
                         sawExponent = true;
                     }
                     break; // Whether we fail or succeed, we exit this loop
-                }
-                else {
+                } else {
                     break;
                 }
             }
@@ -1653,6 +2381,7 @@
             // don't allow multiple references
             symbols = (DecimalFormatSymbols) newSymbols.clone();
             expandAffixes();
+            fastPathCheckNeeded = true;
         } catch (Exception foo) {
             // should never happen
         }
@@ -1674,6 +2403,7 @@
         positivePrefix = newValue;
         posPrefixPattern = null;
         positivePrefixFieldPositions = null;
+        fastPathCheckNeeded = true;
     }
 
     /**
@@ -1688,8 +2418,7 @@
         if (positivePrefixFieldPositions == null) {
             if (posPrefixPattern != null) {
                 positivePrefixFieldPositions = expandAffix(posPrefixPattern);
-            }
-            else {
+            } else {
                 positivePrefixFieldPositions = EmptyFieldPositionArray;
             }
         }
@@ -1711,6 +2440,7 @@
     public void setNegativePrefix (String newValue) {
         negativePrefix = newValue;
         negPrefixPattern = null;
+        fastPathCheckNeeded = true;
     }
 
     /**
@@ -1725,8 +2455,7 @@
         if (negativePrefixFieldPositions == null) {
             if (negPrefixPattern != null) {
                 negativePrefixFieldPositions = expandAffix(negPrefixPattern);
-            }
-            else {
+            } else {
                 negativePrefixFieldPositions = EmptyFieldPositionArray;
             }
         }
@@ -1748,6 +2477,7 @@
     public void setPositiveSuffix (String newValue) {
         positiveSuffix = newValue;
         posSuffixPattern = null;
+        fastPathCheckNeeded = true;
     }
 
     /**
@@ -1762,8 +2492,7 @@
         if (positiveSuffixFieldPositions == null) {
             if (posSuffixPattern != null) {
                 positiveSuffixFieldPositions = expandAffix(posSuffixPattern);
-            }
-            else {
+            } else {
                 positiveSuffixFieldPositions = EmptyFieldPositionArray;
             }
         }
@@ -1785,6 +2514,7 @@
     public void setNegativeSuffix (String newValue) {
         negativeSuffix = newValue;
         negSuffixPattern = null;
+        fastPathCheckNeeded = true;
     }
 
     /**
@@ -1799,8 +2529,7 @@
         if (negativeSuffixFieldPositions == null) {
             if (negSuffixPattern != null) {
                 negativeSuffixFieldPositions = expandAffix(negSuffixPattern);
-            }
-            else {
+            } else {
                 negativeSuffixFieldPositions = EmptyFieldPositionArray;
             }
         }
@@ -1834,6 +2563,16 @@
         multiplier = newValue;
         bigDecimalMultiplier = null;
         bigIntegerMultiplier = null;
+        fastPathCheckNeeded = true;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void setGroupingUsed(boolean newValue) {
+        super.setGroupingUsed(newValue);
+        fastPathCheckNeeded = true;
     }
 
     /**
@@ -1860,6 +2599,7 @@
      */
     public void setGroupingSize (int newValue) {
         groupingSize = (byte)newValue;
+        fastPathCheckNeeded = true;
     }
 
     /**
@@ -1878,6 +2618,7 @@
      */
     public void setDecimalSeparatorAlwaysShown(boolean newValue) {
         decimalSeparatorAlwaysShown = newValue;
+        fastPathCheckNeeded = true;
     }
 
     /**
@@ -1908,6 +2649,20 @@
         DecimalFormat other = (DecimalFormat) super.clone();
         other.symbols = (DecimalFormatSymbols) symbols.clone();
         other.digitList = (DigitList) digitList.clone();
+
+        // Fast-path is almost stateless algorithm. The only logical state is the
+        // isFastPath flag. In addition fastPathCheckNeeded is a sentinel flag
+        // that forces recalculation of all fast-path fields when set to true.
+        //
+        // There is thus no need to clone all the fast-path fields.
+        // We just only need to set fastPathCheckNeeded to true when cloning,
+        // and init fastPathData to null as if it were a truly new instance.
+        // Every fast-path field will be recalculated (only once) at next usage of
+        // fast-path algorithm.
+        other.fastPathCheckNeeded = true;
+        other.isFastPath = false;
+        other.fastPathData = null;
+
         return other;
     }
 
@@ -1917,8 +2672,10 @@
     @Override
     public boolean equals(Object obj)
     {
-        if (obj == null) return false;
-        if (!super.equals(obj)) return false; // super does class check
+        if (obj == null)
+            return false;
+        if (!super.equals(obj))
+            return false; // super does class check
         DecimalFormat other = (DecimalFormat) obj;
         return ((posPrefixPattern == other.posPrefixPattern &&
                  positivePrefix.equals(other.positivePrefix))
@@ -2206,8 +2963,7 @@
                 || affix.indexOf(symbols.getPatternSeparator()) >= 0
                 || affix.indexOf(symbols.getMinusSign()) >= 0
                 || affix.indexOf(CURRENCY_SIGN) >= 0;
-        }
-        else {
+        } else {
             needQuote = affix.indexOf(PATTERN_ZERO_DIGIT) >= 0
                 || affix.indexOf(PATTERN_GROUPING_SEPARATOR) >= 0
                 || affix.indexOf(PATTERN_DECIMAL_SEPARATOR) >= 0
@@ -2694,6 +3450,7 @@
             super.setMinimumIntegerDigits((minimumIntegerDigits > DOUBLE_INTEGER_DIGITS) ?
                 DOUBLE_INTEGER_DIGITS : minimumIntegerDigits);
         }
+        fastPathCheckNeeded = true;
     }
 
     /**
@@ -2714,6 +3471,7 @@
             super.setMaximumIntegerDigits((maximumIntegerDigits > DOUBLE_INTEGER_DIGITS) ?
                 DOUBLE_INTEGER_DIGITS : maximumIntegerDigits);
         }
+        fastPathCheckNeeded = true;
     }
 
     /**
@@ -2734,6 +3492,7 @@
             super.setMinimumFractionDigits((minimumFractionDigits > DOUBLE_FRACTION_DIGITS) ?
                 DOUBLE_FRACTION_DIGITS : minimumFractionDigits);
         }
+        fastPathCheckNeeded = true;
     }
 
     /**
@@ -2754,6 +3513,7 @@
             super.setMaximumFractionDigits((maximumFractionDigits > DOUBLE_FRACTION_DIGITS) ?
                 DOUBLE_FRACTION_DIGITS : maximumFractionDigits);
         }
+        fastPathCheckNeeded = true;
     }
 
     /**
@@ -2843,6 +3603,7 @@
                 expandAffixes();
             }
         }
+        fastPathCheckNeeded = true;
     }
 
     /**
@@ -2873,6 +3634,7 @@
 
         this.roundingMode = roundingMode;
         digitList.setRoundingMode(roundingMode);
+        fastPathCheckNeeded = true;
     }
 
     /**
@@ -2924,9 +3686,18 @@
         stream.defaultReadObject();
         digitList = new DigitList();
 
+        // We force complete fast-path reinitialization when the instance is
+        // deserialized. See clone() comment on fastPathCheckNeeded.
+        fastPathCheckNeeded = true;
+        isFastPath = false;
+        fastPathData = null;
+
         if (serialVersionOnStream < 4) {
             setRoundingMode(RoundingMode.HALF_EVEN);
+        } else {
+            setRoundingMode(getRoundingMode());
         }
+
         // We only need to check the maximum counts because NumberFormat
         // .readObject has already ensured that the maximum is greater than the
         // minimum count.
@@ -3195,6 +3966,77 @@
      */
     private RoundingMode roundingMode = RoundingMode.HALF_EVEN;
 
+    // ------ DecimalFormat fields for fast-path for double algorithm  ------
+
+    /**
+     * Helper inner utility class for storing the data used in the fast-path
+     * algorithm. Almost all fields related to fast-path are encapsulated in
+     * this class.
+     *
+     * Any {@code DecimalFormat} instance has a {@code fastPathData}
+     * reference field that is null unless both the properties of the instance
+     * are such that the instance is in the "fast-path" state, and a format call
+     * has been done at least once while in this state.
+     *
+     * Almost all fields are related to the "fast-path" state only and don't
+     * change until one of the instance properties is changed.
+     *
+     * {@code firstUsedIndex} and {@code lastFreeIndex} are the only
+     * two fields that are used and modified while inside a call to
+     * {@code fastDoubleFormat}.
+     *
+     */
+    private static class FastPathData {
+        // --- Temporary fields used in fast-path, shared by several methods.
+
+        /** The first unused index at the end of the formatted result. */
+        int lastFreeIndex;
+
+        /** The first used index at the beginning of the formatted result */
+        int firstUsedIndex;
+
+        // --- State fields related to fast-path status. Changes due to a
+        //     property change only. Set by checkAndSetFastPathStatus() only.
+
+        /** Difference between locale zero and default zero representation. */
+        int  zeroDelta;
+
+        /** Locale char for grouping separator. */
+        char groupingChar;
+
+        /**  Fixed index position of last integral digit of formatted result */
+        int integralLastIndex;
+
+        /**  Fixed index position of first fractional digit of formatted result */
+        int fractionalFirstIndex;
+
+        /** Fractional constants depending on decimal|currency state */
+        double fractionalScaleFactor;
+        int fractionalMaxIntBound;
+
+
+        /** The char array buffer that will contain the formatted result */
+        char[] fastPathContainer;
+
+        /** Suffixes recorded as char array for efficiency. */
+        char[] charsPositivePrefix;
+        char[] charsNegativePrefix;
+        char[] charsPositiveSuffix;
+        char[] charsNegativeSuffix;
+        boolean positiveAffixesRequired = true;
+        boolean negativeAffixesRequired = true;
+    }
+
+    /** The format fast-path status of the instance. Logical state. */
+    private transient boolean isFastPath = false;
+
+    /** Flag stating need of check and reinit fast-path status on next format call. */
+    private transient boolean fastPathCheckNeeded = true;
+
+    /** DecimalFormat reference to its FastPathData */
+    private transient FastPathData fastPathData;
+
+
     //----------------------------------------------------------------------
 
     static final int currentSerialVersion = 4;
@@ -3228,6 +4070,54 @@
     // CONSTANTS
     //----------------------------------------------------------------------
 
+    // ------ Fast-Path for double Constants ------
+
+    /** Maximum valid integer value for applying fast-path algorithm */
+    private static final double MAX_INT_AS_DOUBLE = (double) Integer.MAX_VALUE;
+
+    /**
+     * The digit arrays used in the fast-path methods for collecting digits.
+     * Using 3 constants arrays of chars ensures a very fast collection of digits
+     */
+    private static class DigitArrays {
+        static final char[] DigitOnes1000 = new char[1000];
+        static final char[] DigitTens1000 = new char[1000];
+        static final char[] DigitHundreds1000 = new char[1000];
+
+        // initialize on demand holder class idiom for arrays of digits
+        static {
+            int tenIndex = 0;
+            int hundredIndex = 0;
+            char digitOne = '0';
+            char digitTen = '0';
+            char digitHundred = '0';
+            for (int i = 0;  i < 1000; i++ ) {
+
+                DigitOnes1000[i] = digitOne;
+                if (digitOne == '9')
+                    digitOne = '0';
+                else
+                    digitOne++;
+
+                DigitTens1000[i] = digitTen;
+                if (i == (tenIndex + 9)) {
+                    tenIndex += 10;
+                    if (digitTen == '9')
+                        digitTen = '0';
+                    else
+                        digitTen++;
+                }
+
+                DigitHundreds1000[i] = digitHundred;
+                if (i == (hundredIndex + 99)) {
+                    digitHundred++;
+                    hundredIndex += 100;
+                }
+            }
+        }
+    }
+    // ------ Fast-Path for double Constants end ------
+
     // Constants for characters used in programmatic (unlocalized) patterns.
     private static final char       PATTERN_ZERO_DIGIT         = '0';
     private static final char       PATTERN_GROUPING_SEPARATOR = ',';
--- a/jdk/src/share/classes/java/text/DigitList.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/share/classes/java/text/DigitList.java	Thu Oct 11 16:59:50 2012 -0700
@@ -62,7 +62,7 @@
  * derived by placing all the digits of the list to the right of the
  * decimal point, by 10^exponent.
  *
- * @see  Locale
+ * @see  java.util.Locale
  * @see  Format
  * @see  NumberFormat
  * @see  DecimalFormat
--- a/jdk/src/share/classes/java/text/Format.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/share/classes/java/text/Format.java	Thu Oct 11 16:59:50 2012 -0700
@@ -370,7 +370,7 @@
      * Delegates should NOT assume that the <code>Format</code> will notify
      * the delegate of fields in any particular order.
      *
-     * @see FieldPosition.Delegate
+     * @see FieldPosition#getFieldDelegate
      * @see CharacterIteratorFieldDelegate
      */
     interface FieldDelegate {
--- a/jdk/src/share/classes/java/text/NumberFormat.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/share/classes/java/text/NumberFormat.java	Thu Oct 11 16:59:50 2012 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1996, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 2012, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -286,10 +286,21 @@
      * @see java.text.Format#format
      */
     public final String format(double number) {
+        // Use fast-path for double result if that works
+        String result = fastFormat(number);
+        if (result != null)
+            return result;
+
         return format(number, new StringBuffer(),
                       DontCareFieldPosition.INSTANCE).toString();
     }
 
+    /*
+     * fastFormat() is supposed to be implemented in concrete subclasses only.
+     * Default implem always returns null.
+     */
+    String fastFormat(double number) { return null; }
+
    /**
      * Specialization of format.
      * @exception        ArithmeticException if rounding is needed with rounding
--- a/jdk/src/share/classes/java/text/RBCollationTables.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/share/classes/java/text/RBCollationTables.java	Thu Oct 11 16:59:50 2012 -0700
@@ -192,13 +192,12 @@
       *
       * @see CollationElementIterator#getMaxExpansion
       */
-    int getMaxExpansion(int order)
-    {
+    int getMaxExpansion(int order) {
         int result = 1;
 
         if (expandTable != null) {
             // Right now this does a linear search through the entire
-            // expandsion table.  If a collator had a large number of expansions,
+            // expansion table.  If a collator had a large number of expansions,
             // this could cause a performance problem, but in practise that
             // rarely happens
             for (int i = 0; i < expandTable.size(); i++) {
@@ -215,20 +214,19 @@
     }
 
     /**
-     *  Get the entry of hash table of the expanding string in the collation
-     *  table.
-     *  @param idx the index of the expanding string value list
+     * Get the entry of hash table of the expanding string in the collation
+     * table.
+     * @param idx the index of the expanding string value list
      */
-    final int[] getExpandValueList(int order) {
-        return expandTable.elementAt(order - EXPANDCHARINDEX);
+    final int[] getExpandValueList(int idx) {
+        return expandTable.elementAt(idx - EXPANDCHARINDEX);
     }
 
     /**
-     *  Get the comarison order of a character from the collation table.
-     *  @return the comparison order of a character.
+     * Get the comarison order of a character from the collation table.
+     * @return the comparison order of a character.
      */
-    int getUnicodeOrder(int ch)
-    {
+    int getUnicodeOrder(int ch) {
         return mapping.elementAt(ch);
     }
 
--- a/jdk/src/share/classes/java/text/RBTableBuilder.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/share/classes/java/text/RBTableBuilder.java	Thu Oct 11 16:59:50 2012 -0700
@@ -71,7 +71,7 @@
      * This is the main function that actually builds the tables and
      * stores them back in the RBCollationTables object.  It is called
      * ONLY by the RBCollationTables constructor.
-     * @see java.util.RuleBasedCollator#RuleBasedCollator
+     * @see RuleBasedCollator#RuleBasedCollator
      * @exception ParseException If the rules format is incorrect.
      */
 
--- a/jdk/src/share/classes/java/text/SimpleDateFormat.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/share/classes/java/text/SimpleDateFormat.java	Thu Oct 11 16:59:50 2012 -0700
@@ -1787,7 +1787,7 @@
      * timeFields. Returns -start (for ParsePosition) if failed.
      * @param text the time text to be parsed.
      * @param start where to start parsing.
-     * @param ch the pattern character for the date field text to be parsed.
+     * @param patternCharIndex the index of the pattern character.
      * @param count the count of a pattern character.
      * @param obeyCount if true, then the next field directly abuts this one,
      * and we should use the count to know when to stop parsing.
--- a/jdk/src/share/classes/java/util/Calendar.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/share/classes/java/util/Calendar.java	Thu Oct 11 16:59:50 2012 -0700
@@ -1788,7 +1788,6 @@
      *
      * @return a bit mask of selected fields
      * @see #isExternallySet(int)
-     * @see #setInternallySetState(int)
      */
     final int selectFields() {
         // This implementation has been taken from the GregorianCalendar class.
--- a/jdk/src/share/classes/java/util/Currency.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/share/classes/java/util/Currency.java	Thu Oct 11 16:59:50 2012 -0700
@@ -665,7 +665,7 @@
      *
      * @param pattern regex pattern for the properties
      * @param ctry country code
-     * @param data currency data.  This is a comma separated string that
+     * @param curdata currency data.  This is a comma separated string that
      *    consists of "three-letter alphabet code", "three-digit numeric code",
      *    and "one-digit (0,1,2, or 3) default fraction digit".
      *    For example, "JPZ,392,0".
--- a/jdk/src/share/classes/java/util/Formatter.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/share/classes/java/util/Formatter.java	Thu Oct 11 16:59:50 2012 -0700
@@ -918,7 +918,7 @@
  *     <p> If the {@code '0'} flag is given then the output will be padded
  *     with leading zeros to the field width following any indication of sign.
  *
- *     <p> If {@code '('}, {@code '+'}, '&nbsp&nbsp;', or {@code ','} flags
+ *     <p> If {@code '('}, {@code '+'}, '&nbsp;&nbsp;', or {@code ','} flags
  *     are given then a {@link FormatFlagsConversionMismatchException} will be
  *     thrown.
  *
--- a/jdk/src/share/classes/java/util/JapaneseImperialCalendar.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/share/classes/java/util/JapaneseImperialCalendar.java	Thu Oct 11 16:59:50 2012 -0700
@@ -1932,7 +1932,7 @@
      * Computes the fixed date under either the Gregorian or the
      * Julian calendar, using the given year and the specified calendar fields.
      *
-     * @param cal the CalendarSystem to be used for the date calculation
+     * @param era era index
      * @param year the normalized year number, with 0 indicating the
      * year 1 BCE, -1 indicating 2 BCE, etc.
      * @param fieldMask the calendar fields to be used for the date calculation
@@ -2141,7 +2141,7 @@
      * Returns the length of the specified month in the specified
      * Gregorian year. The year number must be normalized.
      *
-     * @see #isLeapYear(int)
+     * @see GregorianCalendar#isLeapYear(int)
      */
     private int monthLength(int month, int gregorianYear) {
         return CalendarUtils.isGregorianLeapYear(gregorianYear) ?
@@ -2152,7 +2152,7 @@
      * Returns the length of the specified month in the year provided
      * by internalGet(YEAR).
      *
-     * @see #isLeapYear(int)
+     * @see GregorianCalendar#isLeapYear(int)
      */
     private int monthLength(int month) {
         assert jdate.isNormalized();
--- a/jdk/src/share/classes/java/util/JumboEnumSet.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/share/classes/java/util/JumboEnumSet.java	Thu Oct 11 16:59:50 2012 -0700
@@ -345,7 +345,7 @@
      * the same size, and every member of the given set is contained in
      * this set.
      *
-     * @param e object to be compared for equality with this set
+     * @param o object to be compared for equality with this set
      * @return <tt>true</tt> if the specified object is equal to this set
      */
     public boolean equals(Object o) {
--- a/jdk/src/share/classes/java/util/Locale.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/share/classes/java/util/Locale.java	Thu Oct 11 16:59:50 2012 -0700
@@ -55,6 +55,7 @@
 import sun.util.locale.InternalLocaleBuilder;
 import sun.util.locale.LanguageTag;
 import sun.util.locale.LocaleExtensions;
+import sun.util.locale.LocaleMatcher;
 import sun.util.locale.LocaleObjectCache;
 import sun.util.locale.LocaleSyntaxException;
 import sun.util.locale.LocaleUtils;
@@ -71,10 +72,11 @@
  * according to the customs and conventions of the user's native country,
  * region, or culture.
  *
- * <p> The <code>Locale</code> class implements identifiers
- * interchangeable with BCP 47 (IETF BCP 47, "Tags for Identifying
- * Languages"), with support for the LDML (UTS#35, "Unicode Locale
- * Data Markup Language") BCP 47-compatible extensions for locale data
+ * <p> The {@code Locale} class implements IETF BCP 47 which is composed of
+ * <a href="http://tools.ietf.org/html/rfc4647">RFC 4647 "Matching of Language
+ * Tags"</a> and <a href="http://tools.ietf.org/html/rfc5646">RFC 5646 "Tags
+ * for Identifying Languages"</a> with support for the LDML (UTS#35, "Unicode
+ * Locale Data Markup Language") BCP 47-compatible extensions for locale data
  * exchange.
  *
  * <p> A <code>Locale</code> object logically consists of the fields
@@ -267,6 +269,77 @@
  * </pre>
  * </blockquote>
  *
+ * <h4><a name="LocaleMatching">Locale Matching</a></h4>
+ *
+ * <p>If an application or a system is internationalized and provides localized
+ * resources for multiple locales, it sometimes needs to find one or more
+ * locales (or language tags) which meet each user's specific preferences. Note
+ * that a term "language tag" is used interchangeably with "locale" in this
+ * locale matching documentation.
+ *
+ * <p>In order to do matching a user's preferred locales to a set of language
+ * tags, <a href="http://tools.ietf.org/html/rfc4647">RFC 4647 Matching of
+ * Language Tags</a> defines two mechanisms: filtering and lookup.
+ * <em>Filtering</em> is used to get all matching locales, whereas
+ * <em>lookup</em> is to choose the best matching locale.
+ * Matching is done case-insensitively. These matching mechanisms are described
+ * in the following sections.
+ *
+ * <p>A user's preference is called a <em>Language Priority List</em> and is
+ * expressed as a list of language ranges. There are syntactically two types of
+ * language ranges: basic and extended. See
+ * {@link Locale.LanguageRange Locale.LanguageRange} for details.
+ *
+ * <h5>Filtering</h5>
+ *
+ * <p>The filtering operation returns all matching language tags. It is defined
+ * in RFC 4647 as follows:
+ * "In filtering, each language range represents the least specific language
+ * tag (that is, the language tag with fewest number of subtags) that is an
+ * acceptable match. All of the language tags in the matching set of tags will
+ * have an equal or greater number of subtags than the language range. Every
+ * non-wildcard subtag in the language range will appear in every one of the
+ * matching language tags."
+ *
+ * <p>There are two types of filtering: filtering for basic language ranges
+ * (called "basic filtering") and filtering for extended language ranges
+ * (called "extended filtering"). They may return different results by what
+ * kind of language ranges are included in the given Language Priority List.
+ * {@link Locale.FilteringMode} is a parameter to specify how filtering should
+ * be done.
+ *
+ * <h5>Lookup</h5>
+ *
+ * <p>The lookup operation returns the best matching language tags. It is
+ * defined in RFC 4647 as follows:
+ * "By contrast with filtering, each language range represents the most
+ * specific tag that is an acceptable match.  The first matching tag found,
+ * according to the user's priority, is considered the closest match and is the
+ * item returned."
+ *
+ * <p>For example, if a Language Priority List consists of two language ranges,
+ * {@code "zh-Hant-TW"} and {@code "en-US"}, in prioritized order, lookup
+ * method progressively searches the language tags below in order to find the
+ * best matching language tag.
+ * <blockquote>
+ * <pre>
+ *    1. zh-Hant-TW
+ *    2. zh-Hant
+ *    3. zh
+ *    4. en-US
+ *    5. en
+ * </pre>
+ * </blockquote>
+ * If there is a language tag which matches completely to a language range
+ * above, the language tag is returned.
+ *
+ * <p>{@code "*"} is the special language range, and it is ignored in lookup.
+ *
+ * <p>If multiple language tags match as a result of the subtag {@code '*'}
+ * included in a language range, the first matching language tag returned by
+ * an {@link Iterator} over a {@link Collection} of language tags is treated as
+ * the best matching one.
+ *
  * <h4>Use of Locale</h4>
  *
  * <p>Once you've created a <code>Locale</code> you can query it for information
@@ -1419,7 +1492,7 @@
      *    // returns "ja-JP-u-ca-japanese-x-lvariant-JP"
      *    Locale.forLanguageTag("th-TH-x-lvariant-TH").toLanguageTag();
      *    // returns "th-TH-u-nu-thai-x-lvariant-TH"
-     * <pre></ul>
+     * </pre></ul>
      *
      * <p>This implements the 'Language-Tag' production of BCP47, and
      * so supports grandfathered (regular and irregular) as well as
@@ -2070,7 +2143,7 @@
      * @param in the <code>ObjectInputStream</code> to read
      * @throws IOException
      * @throws ClassNotFoundException
-     * @throws IllformdLocaleException
+     * @throws IllformedLocaleException
      * @since 1.7
      */
     private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
@@ -2574,4 +2647,611 @@
             return Locale.getInstance(baseloc, extensions);
         }
     }
+
+    /**
+     * This enum provides constants to select a filtering mode for locale
+     * matching. Refer to <a href="http://tools.ietf.org/html/rfc4647">RFC 4647
+     * Matching of Language Tags</a> for details.
+     *
+     * <p>As an example, think of two Language Priority Lists each of which
+     * includes only one language range and a set of following language tags:
+     *
+     * <pre>
+     *    de (German)
+     *    de-DE (German, Germany)
+     *    de-Deva (German, in Devanagari script)
+     *    de-Deva-DE (German, in Devanagari script, Germany)
+     *    de-DE-1996 (German, Germany, orthography of 1996)
+     *    de-Latn-DE (German, in Latin script, Germany)
+     *    de-Latn-DE-1996 (German, in Latin script, Germany, orthography of 1996)
+     * </pre>
+     *
+     * The filtering method will behave as follows:
+     *
+     * <table cellpadding=2>
+     * <tr>
+     * <th>Filtering Mode</th>
+     * <th>Language Priority List: {@code "de-DE"}</th>
+     * <th>Language Priority List: {@code "de-*-DE"}</th>
+     * </tr>
+     * <tr>
+     * <td valign=top>
+     * {@link FilteringMode#AUTOSELECT_FILTERING AUTOSELECT_FILTERING}
+     * </td>
+     * <td valign=top>
+     * Performs <em>basic</em> filtering and returns {@code "de-DE"} and
+     * {@code "de-DE-1996"}.
+     * </td>
+     * <td valign=top>
+     * Performs <em>extended</em> filtering and returns {@code "de-DE"},
+     * {@code "de-Deva-DE"}, {@code "de-DE-1996"}, {@code "de-Latn-DE"}, and
+     * {@code "de-Latn-DE-1996"}.
+     * </td>
+     * </tr>
+     * <tr>
+     * <td valign=top>
+     * {@link FilteringMode#EXTENDED_FILTERING EXTENDED_FILTERING}
+     * </td>
+     * <td valign=top>
+     * Performs <em>extended</em> filtering and returns {@code "de-DE"},
+     * {@code "de-Deva-DE"}, {@code "de-DE-1996"}, {@code "de-Latn-DE"}, and
+     * {@code "de-Latn-DE-1996"}.
+     * </td>
+     * <td valign=top>Same as above.</td>
+     * </tr>
+     * <tr>
+     * <td valign=top>
+     * {@link FilteringMode#IGNORE_EXTENDED_RANGES IGNORE_EXTENDED_RANGES}
+     * </td>
+     * <td valign=top>
+     * Performs <em>basic</em> filtering and returns {@code "de-DE"} and
+     * {@code "de-DE-1996"}.
+     * </td>
+     * <td valign=top>
+     * Performs <em>basic</em> filtering and returns {@code null} because
+     * nothing matches.
+     * </td>
+     * </tr>
+     * <tr>
+     * <td valign=top>
+     * {@link FilteringMode#MAP_EXTENDED_RANGES MAP_EXTENDED_RANGES}
+     * </td>
+     * <td valign=top>Same as above.</td>
+     * <td valign=top>
+     * Performs <em>basic</em> filtering and returns {@code "de-DE"} and
+     * {@code "de-DE-1996"} because {@code "de-*-DE"} is mapped to
+     * {@code "de-DE"}.
+     * </td>
+     * </tr>
+     * <tr>
+     * <td valign=top>
+     * {@link FilteringMode#REJECT_EXTENDED_RANGES REJECT_EXTENDED_RANGES}
+     * </td>
+     * <td valign=top>Same as above.</td>
+     * <td valign=top>
+     * Throws {@link IllegalArgumentException} because {@code "de-*-DE"} is
+     * not a valid basic language range.
+     * </td>
+     * </tr>
+     * </table>
+     *
+     * @see #filter(List, Collection, FilteringMode)
+     * @see #filterTags(List, Collection, FilteringMode)
+     *
+     * @since 1.8
+     */
+    public static enum FilteringMode {
+        /**
+         * Specifies automatic filtering mode based on the given Language
+         * Priority List consisting of language ranges. If all of the ranges
+         * are basic, basic filtering is selected. Otherwise, extended
+         * filtering is selected.
+         */
+        AUTOSELECT_FILTERING,
+
+        /**
+         * Specifies extended filtering.
+         */
+        EXTENDED_FILTERING,
+
+        /**
+         * Specifies basic filtering: Note that any extended language ranges
+         * included in the given Language Priority List are ignored.
+         */
+        IGNORE_EXTENDED_RANGES,
+
+        /**
+         * Specifies basic filtering: If any extended language ranges are
+         * included in the given Language Priority List, they are mapped to the
+         * basic language range. Specifically, a language range starting with a
+         * subtag {@code "*"} is treated as a language range {@code "*"}. For
+         * example, {@code "*-US"} is treated as {@code "*"}. If {@code "*"} is
+         * not the first subtag, {@code "*"} and extra {@code "-"} are removed.
+         * For example, {@code "ja-*-JP"} is mapped to {@code "ja-JP"}.
+         */
+        MAP_EXTENDED_RANGES,
+
+        /**
+         * Specifies basic filtering: If any extended language ranges are
+         * included in the given Language Priority List, the list is rejected
+         * and the filtering method throws {@link IllegalArgumentException}.
+         */
+        REJECT_EXTENDED_RANGES
+    };
+
+    /**
+     * This class expresses a <em>Language Range</em> defined in
+     * <a href="http://tools.ietf.org/html/rfc4647">RFC 4647 Matching of
+     * Language Tags</a>. A language range is an identifier which is used to
+     * select language tag(s) meeting specific requirements by using the
+     * mechanisms described in <a href="Locale.html#LocaleMatching">Locale
+     * Matching</a>. A list which represents a user's preferences and consists
+     * of language ranges is called a <em>Language Priority List</em>.
+     *
+     * <p>There are two types of language ranges: basic and extended. In RFC
+     * 4647, the syntax of language ranges is expressed in
+     * <a href="http://tools.ietf.org/html/rfc4234">ABNF</a> as follows:
+     * <blockquote>
+     * <pre>
+     *     basic-language-range    = (1*8ALPHA *("-" 1*8alphanum)) / "*"
+     *     extended-language-range = (1*8ALPHA / "*")
+     *                               *("-" (1*8alphanum / "*"))
+     *     alphanum                = ALPHA / DIGIT
+     * </pre>
+     * </blockquote>
+     * For example, {@code "en"} (English), {@code "ja-JP"} (Japanese, Japan),
+     * {@code "*"} (special language range which matches any language tag) are
+     * basic language ranges, whereas {@code "*-CH"} (any languages,
+     * Switzerland), {@code "es-*"} (Spanish, any regions), and
+     * {@code "zh-Hant-*"} (Traditional Chinese, any regions) are extended
+     * language ranges.
+     *
+     * @see #filter
+     * @see #filterTags
+     * @see #lookup
+     * @see #lookupTag
+     *
+     * @since 1.8
+     */
+    public static final class LanguageRange {
+
+       /**
+        * A constant holding the maximum value of weight, 1.0, which indicates
+        * that the language range is a good fit for the user.
+        */
+        public static final double MAX_WEIGHT = 1.0;
+
+       /**
+        * A constant holding the minimum value of weight, 0.0, which indicates
+        * that the language range is not a good fit for the user.
+        */
+        public static final double MIN_WEIGHT = 0.0;
+
+        private final String range;
+        private final double weight;
+
+        private volatile int hash = 0;
+
+        /**
+         * Constructs a {@code LanguageRange} using the given {@code range}.
+         * Note that no validation is done against the IANA Language Subtag
+         * Registry at time of construction.
+         *
+         * <p>This is equivalent to {@code LanguageRange(range, MAX_WEIGHT)}.
+         *
+         * @param range a language range
+         * @throws NullPointerException if the given {@code range} is
+         *     {@code null}
+         */
+        public LanguageRange(String range) {
+            this(range, MAX_WEIGHT);
+        }
+
+        /**
+         * Constructs a {@code LanguageRange} using the given {@code range} and
+         * {@code weight}. Note that no validation is done against the IANA
+         * Language Subtag Registry at time of construction.
+         *
+         * @param range  a language range
+         * @param weight a weight value between {@code MIN_WEIGHT} and
+         *     {@code MAX_WEIGHT}
+         * @throws NullPointerException if the given {@code range} is
+         *     {@code null}
+         * @throws IllegalArgumentException if the given {@code weight} is less
+         *     than {@code MIN_WEIGHT} or greater than {@code MAX_WEIGHT}
+         */
+        public LanguageRange(String range, double weight) {
+            if (range == null) {
+                throw new NullPointerException();
+            }
+            if (weight < MIN_WEIGHT || weight > MAX_WEIGHT) {
+                throw new IllegalArgumentException("weight=" + weight);
+            }
+
+            range = range.toLowerCase();
+
+            // Do syntax check.
+            boolean isIllFormed = false;
+            String[] subtags = range.split("-");
+            if (isSubtagIllFormed(subtags[0], true)
+                || range.endsWith("-")) {
+                isIllFormed = true;
+            } else {
+                for (int i = 1; i < subtags.length; i++) {
+                    if (isSubtagIllFormed(subtags[i], false)) {
+                        isIllFormed = true;
+                    }
+                    break;
+                }
+            }
+            if (isIllFormed) {
+                throw new IllegalArgumentException("range=" + range);
+            }
+
+            this.range = range;
+            this.weight = weight;
+        }
+
+        private static boolean isSubtagIllFormed(String subtag,
+                                                 boolean isFirstSubtag) {
+            if (subtag.equals("") || subtag.length() > 8) {
+                return true;
+            } else if (subtag.equals("*")) {
+                return false;
+            }
+            char[] charArray = subtag.toCharArray();
+            if (isFirstSubtag) { // ALPHA
+                for (char c : charArray) {
+                    if (c < 'a' || c > 'z') {
+                        return true;
+                    }
+                }
+            } else { // ALPHA / DIGIT
+                for (char c : charArray) {
+                    if (c < '0' || (c > '9' && c < 'a') || c > 'z') {
+                        return true;
+                    }
+                }
+            }
+            return false;
+        }
+
+        /**
+         * Returns the language range of this {@code LanguageRange}.
+         *
+         * @return the language range.
+         */
+        public String getRange() {
+            return range;
+        }
+
+        /**
+         * Returns the weight of this {@code LanguageRange}.
+         *
+         * @return the weight value.
+         */
+        public double getWeight() {
+            return weight;
+        }
+
+        /**
+         * Parses the given {@code ranges} to generate a Language Priority List.
+         *
+         * <p>This method performs a syntactic check for each language range in
+         * the given {@code ranges} but doesn't do validation using the IANA
+         * Language Subtag Registry.
+         *
+         * <p>The {@code ranges} to be given can take one of the following
+         * forms:
+         *
+         * <pre>
+         *   "Accept-Language: ja,en;q=0.4"  (weighted list with Accept-Language prefix)
+         *   "ja,en;q=0.4"                   (weighted list)
+         *   "ja,en"                         (prioritized list)
+         * </pre>
+         *
+         * In a weighted list, each language range is given a weight value.
+         * The weight value is identical to the "quality value" in
+         * <a href="http://tools.ietf.org/html/rfc2616">RFC 2616</a>, and it
+         * expresses how much the user prefers  the language. A weight value is
+         * specified after a corresponding language range followed by
+         * {@code ";q="}, and the default weight value is {@code MAX_WEIGHT}
+         * when it is omitted.
+         *
+         * <p>Unlike a weighted list, language ranges in a prioritized list
+         * are sorted in the descending order based on its priority. The first
+         * language range has the highest priority and meets the user's
+         * preference most.
+         *
+         * <p>In either case, language ranges are sorted in descending order in
+         * the Language Priority List based on priority or weight. If a
+         * language range appears in the given {@code ranges} more than once,
+         * only the first one is included on the Language Priority List.
+         *
+         * <p>The returned list consists of language ranges from the given
+         * {@code ranges} and their equivalents found in the IANA Language
+         * Subtag Registry. For example, if the given {@code ranges} is
+         * {@code "Accept-Language: iw,en-us;q=0.7,en;q=0.3"}, the elements in
+         * the list to be returned are:
+         *
+         * <pre>
+         *  <b>Range</b>                                   <b>Weight</b>
+         *    "iw" (older tag for Hebrew)             1.0
+         *    "he" (new preferred code for Hebrew)    1.0
+         *    "en-us" (English, United States)        0.7
+         *    "en" (English)                          0.3
+         * </pre>
+         *
+         * Two language ranges, {@code "iw"} and {@code "he"}, have the same
+         * highest priority in the list. By adding {@code "he"} to the user's
+         * Language Priority List, locale-matching method can find Hebrew as a
+         * matching locale (or language tag) even if the application or system
+         * offers only {@code "he"} as a supported locale (or language tag).
+         *
+         * @param ranges a list of comma-separated language ranges or a list of
+         *     language ranges in the form of the "Accept-Language" header
+         *     defined in <a href="http://tools.ietf.org/html/rfc2616">RFC
+         *     2616</a>
+         * @return a Language Priority List consisting of language ranges
+         *     included in the given {@code ranges} and their equivalent
+         *     language ranges if available. The list is modifiable.
+         * @throws NullPointerException if {@code ranges} is null
+         * @throws IllegalArgumentException if a language range or a weight
+         *     found in the given {@code ranges} is ill-formed
+         */
+        public static List<LanguageRange> parse(String ranges) {
+            return LocaleMatcher.parse(ranges);
+        }
+
+        /**
+         * Parses the given {@code ranges} to generate a Language Priority
+         * List, and then customizes the list using the given {@code map}.
+         * This method is equivalent to
+         * {@code mapEquivalents(parse(ranges), map)}.
+         *
+         * @param ranges a list of comma-separated language ranges or a list
+         *     of language ranges in the form of the "Accept-Language" header
+         *     defined in <a href="http://tools.ietf.org/html/rfc2616">RFC
+         *     2616</a>
+         * @param map a map containing information to customize language ranges
+         * @return a Language Priority List with customization. The list is
+         * @throws NullPointerException if {@code ranges} is null
+         * @throws IllegalArgumentException if a language range or a weight
+         *     found in the given {@code ranges} is ill-formed
+         * @see #parse(String)
+         * @see #mapEquivalents
+         */
+        public static List<LanguageRange> parse(String ranges,
+                                                Map<String, List<String>> map) {
+            return mapEquivalents(parse(ranges), map);
+        }
+
+        /**
+         * Generates a new customized Language Priority List using the given
+         * {@code priorityList} and {@code map}. If the given {@code map} is
+         * empty, this method returns a copy of the given {@code priorityList}.
+         *
+         * <p>In the map, a key represents a language range whereas a value is
+         * a list of equivalents of it. {@code '*'} cannot be used in the map.
+         * Each equivalent language range has the same weight value as its
+         * original language range.
+         *
+         * <pre>
+         *  An example of map:
+         *    <b>Key</b>                            <b>Value</b>
+         *      "zh" (Chinese)                 "zh",
+         *                                     "zh-Hans"(Simplified Chinese)
+         *      "zh-HK" (Chinese, Hong Kong)   "zh-HK"
+         *      "zh-TW" (Chinese, Taiwan)      "zh-TW"
+         * </pre>
+         *
+         * The customization is performed after modification using the IANA
+         * Language Subtag Registry.
+         *
+         * <p>For example, if a user's Language Priority List consists of five
+         * language ranges ({@code "zh"}, {@code "zh-CN"}, {@code "en"},
+         * {@code "zh-TW"}, and {@code "zh-HK"}), the newly generated Language
+         * Priority List which is customized using the above map example will
+         * consists of {@code "zh"}, {@code "zh-Hans"}, {@code "zh-CN"},
+         * {@code "zh-Hans-CN"}, {@code "en"}, {@code "zh-TW"}, and
+         * {@code "zh-HK"}.
+         *
+         * <p>{@code "zh-HK"} and {@code "zh-TW"} aren't converted to
+         * {@code "zh-Hans-HK"} nor {@code "zh-Hans-TW"} even if they are
+         * included in the Language Priority List. In this example, mapping
+         * is used to clearly distinguish Simplified Chinese and Traditional
+         * Chinese.
+         *
+         * <p>If the {@code "zh"}-to-{@code "zh"} mapping isn't included in the
+         * map, a simple replacement will be performed and the customized list
+         * won't include {@code "zh"} and {@code "zh-CN"}.
+         *
+         * @param priorityList user's Language Priority List
+         * @param map a map containing information to customize language ranges
+         * @return a new Language Priority List with customization. The list is
+         *     modifiable.
+         * @throws NullPointerException if {@code priorityList} is {@code null}
+         * @see #parse(String, Map)
+         */
+        public static List<LanguageRange> mapEquivalents(
+                                              List<LanguageRange>priorityList,
+                                              Map<String, List<String>> map) {
+            return LocaleMatcher.mapEquivalents(priorityList, map);
+        }
+
+        /**
+         * Returns a hash code value for the object.
+         *
+         * @return  a hash code value for this object.
+         */
+        @Override
+        public int hashCode() {
+            if (hash == 0) {
+                int result = 17;
+                result = 37*result + range.hashCode();
+                long bitsWeight = Double.doubleToLongBits(weight);
+                result = 37*result + (int)(bitsWeight ^ (bitsWeight >>> 32));
+                hash = result;
+            }
+            return hash;
+        }
+
+        /**
+         * Compares this object to the specified object. The result is true if
+         * and only if the argument is not {@code null} and is a
+         * {@code LanguageRange} object that contains the same {@code range}
+         * and {@code weight} values as this object.
+         *
+         * @param obj the object to compare with
+         * @return  {@code true} if this object's {@code range} and
+         *     {@code weight} are the same as the {@code obj}'s; {@code false}
+         *     otherwise.
+         */
+        @Override
+        public boolean equals(Object obj) {
+            if (this == obj) {
+                return true;
+            }
+            if (!(obj instanceof LanguageRange)) {
+                return false;
+            }
+            LanguageRange other = (LanguageRange)obj;
+            return hash == other.hash
+                   && range.equals(other.range)
+                   && weight == other.weight;
+        }
+    }
+
+    /**
+     * Returns a list of matching {@code Locale} instances using the filtering
+     * mechanism defined in RFC 4647.
+     *
+     * @param priorityList user's Language Priority List in which each language
+     *     tag is sorted in descending order based on priority or weight
+     * @param locales {@code Locale} instances used for matching
+     * @param mode filtering mode
+     * @return a list of {@code Locale} instances for matching language tags
+     *     sorted in descending order based on priority or weight, or an empty
+     *     list if nothing matches. The list is modifiable.
+     * @throws NullPointerException if {@code priorityList} or {@code locales}
+     *     is {@code null}
+     * @throws IllegalArgumentException if one or more extended language ranges
+     *     are included in the given list when
+     *     {@link FilteringMode#REJECT_EXTENDED_RANGES} is specified
+     *
+     * @since 1.8
+     */
+    public static List<Locale> filter(List<LanguageRange> priorityList,
+                                      Collection<Locale> locales,
+                                      FilteringMode mode) {
+        return LocaleMatcher.filter(priorityList, locales, mode);
+    }
+
+    /**
+     * Returns a list of matching {@code Locale} instances using the filtering
+     * mechanism defined in RFC 4647. This is equivalent to
+     * {@link #filter(List, Collection, FilteringMode)} when {@code mode} is
+     * {@link FilteringMode#AUTOSELECT_FILTERING}.
+     *
+     * @param priorityList user's Language Priority List in which each language
+     *     tag is sorted in descending order based on priority or weight
+     * @param locales {@code Locale} instances used for matching
+     * @return a list of {@code Locale} instances for matching language tags
+     *     sorted in descending order based on priority or weight, or an empty
+     *     list if nothing matches. The list is modifiable.
+     * @throws NullPointerException if {@code priorityList} or {@code locales}
+     *     is {@code null}
+     *
+     * @since 1.8
+     */
+    public static List<Locale> filter(List<LanguageRange> priorityList,
+                                      Collection<Locale> locales) {
+        return filter(priorityList, locales, FilteringMode.AUTOSELECT_FILTERING);
+    }
+
+    /**
+     * Returns a list of matching languages tags using the basic filtering
+     * mechanism defined in RFC 4647.
+     *
+     * @param priorityList user's Language Priority List in which each language
+     *     tag is sorted in descending order based on priority or weight
+     * @param tags language tags
+     * @param mode filtering mode
+     * @return a list of matching language tags sorted in descending order
+     *     based on priority or weight, or an empty list if nothing matches.
+     *     The list is modifiable.
+     * @throws NullPointerException if {@code priorityList} or {@code tags} is
+     *     {@code null}
+     * @throws IllegalArgumentException if one or more extended language ranges
+     *     are included in the given list when
+     *     {@link FilteringMode#REJECT_EXTENDED_RANGES} is specified
+     *
+     * @since 1.8
+     */
+    public static List<String> filterTags(List<LanguageRange> priorityList,
+                                          Collection<String> tags,
+                                          FilteringMode mode) {
+        return LocaleMatcher.filterTags(priorityList, tags, mode);
+    }
+
+    /**
+     * Returns a list of matching languages tags using the basic filtering
+     * mechanism defined in RFC 4647. This is equivalent to
+     * {@link #filterTags(List, Collection, FilteringMode)} when {@code mode}
+     * is {@link FilteringMode#AUTOSELECT_FILTERING}.
+     *
+     * @param priorityList user's Language Priority List in which each language
+     *     tag is sorted in descending order based on priority or weight
+     * @param tags language tags
+     * @return a list of matching language tags sorted in descending order
+     *     based on priority or weight, or an empty list if nothing matches.
+     *     The list is modifiable.
+     * @throws NullPointerException if {@code priorityList} or {@code tags} is
+     *     {@code null}
+     *
+     * @since 1.8
+     */
+    public static List<String> filterTags(List<LanguageRange> priorityList,
+                                          Collection<String> tags) {
+        return filterTags(priorityList, tags, FilteringMode.AUTOSELECT_FILTERING);
+    }
+
+    /**
+     * Returns a {@code Locale} instance for the best-matching language
+     * tag using the lookup mechanism defined in RFC 4647.
+     *
+     * @param priorityList user's Language Priority List in which each language
+     *     tag is sorted in descending order based on priority or weight
+     * @param locales {@code Locale} instances used for matching
+     * @return the best matching <code>Locale</code> instance chosen based on
+     *     priority or weight, or {@code null} if nothing matches.
+     * @throws NullPointerException if {@code priorityList} or {@code tags} is
+     *     {@code null}
+     *
+     * @since 1.8
+     */
+    public static Locale lookup(List<LanguageRange> priorityList,
+                                Collection<Locale> locales) {
+        return LocaleMatcher.lookup(priorityList, locales);
+    }
+
+    /**
+     * Returns the best-matching language tag using the lookup mechanism
+     * defined in RFC 4647.
+     *
+     * @param priorityList user's Language Priority List in which each language
+     *     tag is sorted in descending order based on priority or weight
+     * @param tags language tangs used for matching
+     * @return the best matching language tag chosen based on priority or
+     *     weight, or {@code null} if nothing matches.
+     * @throws NullPointerException if {@code priorityList} or {@code tags} is
+     *     {@code null}
+     *
+     * @since 1.8
+     */
+    public static String lookupTag(List<LanguageRange> priorityList,
+                                   Collection<String> tags) {
+        return LocaleMatcher.lookupTag(priorityList, tags);
+    }
+
 }
--- a/jdk/src/share/classes/java/util/Properties.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/share/classes/java/util/Properties.java	Thu Oct 11 16:59:50 2012 -0700
@@ -34,7 +34,10 @@
 import java.io.Writer;
 import java.io.OutputStreamWriter;
 import java.io.BufferedWriter;
-import java.lang.reflect.*;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
+
+import sun.util.spi.XmlPropertiesProvider;
 
 /**
  * The {@code Properties} class represents a persistent set of
@@ -866,7 +869,7 @@
     {
         if (in == null)
             throw new NullPointerException();
-        XMLUtils.load(this, in);
+        XmlSupport.load(this, in);
         in.close();
     }
 
@@ -934,7 +937,7 @@
     {
         if (os == null)
             throw new NullPointerException();
-        XMLUtils.save(this, os, comment, encoding);
+        XmlSupport.save(this, os, comment, encoding);
     }
 
     /**
@@ -1113,59 +1116,82 @@
         '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'
     };
 
+    /**
+     * Supporting class for loading/storing properties in XML format.
+     *
+     * <p> The {@code load} and {@code store} methods defined here delegate to a
+     * system-wide {@code XmlPropertiesProvider}. On first invocation of either
+     * method then the system-wide provider is located as follows: </p>
+     *
+     * <ol>
+     *   <li> If the system property {@code sun.util.spi.XmlPropertiesProvider}
+     *   is defined then it is taken to be the full-qualified name of a concrete
+     *   provider class. The class is loaded with the system class loader as the
+     *   initiating loader. If it cannot be loaded or instantiated using a zero
+     *   argument constructor then an unspecified error is thrown. </li>
+     *
+     *   <li> If the system property is not defined then the service-provider
+     *   loading facility defined by the {@link ServiceLoader} class is used to
+     *   locate a provider with the system class loader as the initiating
+     *   loader and {@code sun.util.spi.XmlPropertiesProvider} as the service
+     *   type. If this process fails then an unspecified error is thrown. If
+     *   there is more than one service provider installed then it is
+     *   not specified as to which provider will be used. </li>
+     *
+     *   <li> If the provider is not found by the above means then a system
+     *   default provider will be instantiated and used. </li>
+     * </ol>
+     */
+    private static class XmlSupport {
 
-    private static class XMLUtils {
-        private static Method load = null;
-        private static Method save = null;
-        static {
+        private static XmlPropertiesProvider loadProviderFromProperty(ClassLoader cl) {
+            String cn = System.getProperty("sun.util.spi.XmlPropertiesProvider");
+            if (cn == null)
+                return null;
             try {
-                // reference sun.util.xml.Utils reflectively
-                // to allow the Properties class be compiled in
-                // the absence of XML
-                Class<?> c = Class.forName("sun.util.xml.XMLUtils", true, null);
-                load = c.getMethod("load", Properties.class, InputStream.class);
-                save = c.getMethod("save", Properties.class, OutputStream.class,
-                                   String.class, String.class);
-            } catch (ClassNotFoundException cnf) {
-                throw new AssertionError(cnf);
-            } catch (NoSuchMethodException e) {
-                throw new AssertionError(e);
+                Class<?> c = Class.forName(cn, true, cl);
+                return (XmlPropertiesProvider)c.newInstance();
+            } catch (ClassNotFoundException |
+                     IllegalAccessException |
+                     InstantiationException x) {
+                throw new ServiceConfigurationError(null, x);
             }
         }
 
-        static void invoke(Method m, Object... args) throws IOException {
-            try {
-                m.invoke(null, args);
-            } catch (IllegalAccessException e) {
-                throw new AssertionError(e);
-            } catch (InvocationTargetException e) {
-                Throwable t = e.getCause();
-                if (t instanceof RuntimeException)
-                    throw (RuntimeException)t;
+        private static XmlPropertiesProvider loadProviderAsService(ClassLoader cl) {
+            Iterator<XmlPropertiesProvider> iterator =
+                 ServiceLoader.load(XmlPropertiesProvider.class, cl).iterator();
+            return iterator.hasNext() ? iterator.next() : null;
+        }
 
-                if (t instanceof IOException) {
-                    throw (IOException)t;
-                } else {
-                    throw new AssertionError(t);
-                }
-            }
+        private static XmlPropertiesProvider loadProvider() {
+            return AccessController.doPrivileged(
+                new PrivilegedAction<XmlPropertiesProvider>() {
+                    public XmlPropertiesProvider run() {
+                        ClassLoader cl = ClassLoader.getSystemClassLoader();
+                        XmlPropertiesProvider provider = loadProviderFromProperty(cl);
+                        if (provider != null)
+                            return provider;
+                        provider = loadProviderAsService(cl);
+                        if (provider != null)
+                            return provider;
+                        throw new InternalError("No fallback");
+                }});
         }
 
+        private static final XmlPropertiesProvider PROVIDER = loadProvider();
+
         static void load(Properties props, InputStream in)
             throws IOException, InvalidPropertiesFormatException
         {
-            if (load == null)
-                throw new InternalError("sun.util.xml.XMLUtils not found");
-            invoke(load, props, in);
+            PROVIDER.load(props, in);
         }
 
         static void save(Properties props, OutputStream os, String comment,
                          String encoding)
             throws IOException
         {
-            if (save == null)
-                throw new InternalError("sun.util.xml.XMLUtils not found");
-            invoke(save, props, os, comment, encoding);
+            PROVIDER.store(props, os, comment, encoding);
         }
     }
 }
--- a/jdk/src/share/classes/java/util/PropertyPermission.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/share/classes/java/util/PropertyPermission.java	Thu Oct 11 16:59:50 2012 -0700
@@ -130,18 +130,15 @@
      * @param mask the actions mask to use.
      *
      */
-
-    private void init(int mask)
-    {
-
+    private void init(int mask) {
         if ((mask & ALL) != mask)
-                throw new IllegalArgumentException("invalid actions mask");
+            throw new IllegalArgumentException("invalid actions mask");
 
         if (mask == NONE)
-                throw new IllegalArgumentException("invalid actions mask");
+            throw new IllegalArgumentException("invalid actions mask");
 
         if (getName() == null)
-                throw new NullPointerException("name can't be null");
+            throw new NullPointerException("name can't be null");
 
         this.mask = mask;
     }
@@ -160,9 +157,7 @@
      * @throws IllegalArgumentException if <code>name</code> is empty or if
      * <code>actions</code> is invalid.
      */
-
-    public PropertyPermission(String name, String actions)
-    {
+    public PropertyPermission(String name, String actions) {
         super(name,actions);
         init(getMask(actions));
     }
@@ -196,7 +191,6 @@
         return ((this.mask & that.mask) == that.mask) && super.implies(that);
     }
 
-
     /**
      * Checks two PropertyPermission objects for equality. Checks that <i>obj</i> is
      * a PropertyPermission, and has the same name and actions as this object.
@@ -226,16 +220,14 @@
      *
      * @return a hash code value for this object.
      */
-
     public int hashCode() {
         return this.getName().hashCode();
     }
 
-
     /**
      * Converts an actions String to an actions mask.
      *
-     * @param action the action string.
+     * @param actions the action string.
      * @return the actions mask.
      */
     private static int getMask(String actions) {
@@ -332,8 +324,7 @@
      *
      * @return the canonical string representation of the actions.
      */
-    static String getActions(int mask)
-    {
+    static String getActions(int mask) {
         StringBuilder sb = new StringBuilder();
         boolean comma = false;
 
@@ -359,8 +350,7 @@
      *
      * @return the canonical string representation of the actions.
      */
-    public String getActions()
-    {
+    public String getActions() {
         if (actions == null)
             actions = getActions(this.mask);
 
@@ -373,7 +363,6 @@
      *
      * @return the actions mask.
      */
-
     int getMask() {
         return mask;
     }
@@ -386,7 +375,6 @@
      * @return a new PermissionCollection object suitable for storing
      * PropertyPermissions.
      */
-
     public PermissionCollection newPermissionCollection() {
         return new PropertyPermissionCollection();
     }
@@ -436,7 +424,7 @@
  * @serial include
  */
 final class PropertyPermissionCollection extends PermissionCollection
-implements Serializable
+    implements Serializable
 {
 
     /**
@@ -454,10 +442,8 @@
     private boolean all_allowed;
 
     /**
-     * Create an empty PropertyPermissions object.
-     *
+     * Create an empty PropertyPermissionCollection object.
      */
-
     public PropertyPermissionCollection() {
         perms = new HashMap<>(32);     // Capacity for default policy
         all_allowed = false;
@@ -475,9 +461,7 @@
      * @exception SecurityException - if this PropertyPermissionCollection
      *                                object has been marked readonly
      */
-
-    public void add(Permission permission)
-    {
+    public void add(Permission permission) {
         if (! (permission instanceof PropertyPermission))
             throw new IllegalArgumentException("invalid permission: "+
                                                permission);
@@ -514,14 +498,12 @@
      * Check and see if this set of permissions implies the permissions
      * expressed in "permission".
      *
-     * @param p the Permission object to compare
+     * @param permission the Permission object to compare
      *
      * @return true if "permission" is a proper subset of a permission in
      * the set, false if not.
      */
-
-    public boolean implies(Permission permission)
-    {
+    public boolean implies(Permission permission) {
         if (! (permission instanceof PropertyPermission))
                 return false;
 
@@ -655,8 +637,9 @@
      * Reads in a Hashtable of PropertyPermissions and saves them in the
      * perms field. Reads in all_allowed.
      */
-    private void readObject(ObjectInputStream in) throws IOException,
-    ClassNotFoundException {
+    private void readObject(ObjectInputStream in)
+        throws IOException, ClassNotFoundException
+    {
         // Don't call defaultReadObject()
 
         // Read in serialized fields
--- a/jdk/src/share/classes/java/util/RegularEnumSet.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/share/classes/java/util/RegularEnumSet.java	Thu Oct 11 16:59:50 2012 -0700
@@ -289,7 +289,7 @@
      * the same size, and every member of the given set is contained in
      * this set.
      *
-     * @param e object to be compared for equality with this set
+     * @param o object to be compared for equality with this set
      * @return <tt>true</tt> if the specified object is equal to this set
      */
     public boolean equals(Object o) {
--- a/jdk/src/share/classes/java/util/Scanner.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/share/classes/java/util/Scanner.java	Thu Oct 11 16:59:50 2012 -0700
@@ -568,9 +568,8 @@
      * Constructs a <code>Scanner</code> that returns values scanned
      * from the specified source delimited by the specified pattern.
      *
-     * @param  source A character source implementing the Readable interface
+     * @param source A character source implementing the Readable interface
      * @param pattern A delimiting pattern
-     * @return A scanner with the specified source and pattern
      */
     private Scanner(Readable source, Pattern pattern) {
         assert source != null : "source should not be null";
--- a/jdk/src/share/classes/java/util/ServiceLoader.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/share/classes/java/util/ServiceLoader.java	Thu Oct 11 16:59:50 2012 -0700
@@ -213,7 +213,7 @@
     }
 
     private ServiceLoader(Class<S> svc, ClassLoader cl) {
-        service = svc;
+        service = Objects.requireNonNull(svc, "Service interface cannot be null");
         loader = cl;
         reload();
     }
--- a/jdk/src/share/classes/java/util/TimeZone.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/share/classes/java/util/TimeZone.java	Thu Oct 11 16:59:50 2012 -0700
@@ -221,7 +221,7 @@
      * @param date the milliseconds (since January 1, 1970,
      * 00:00:00.000 GMT) at which the time zone offset and daylight
      * saving amount are found
-     * @param offset an array of int where the raw GMT offset
+     * @param offsets an array of int where the raw GMT offset
      * (offset[0]) and daylight saving amount (offset[1]) are stored,
      * or null if those values are not needed. The method assumes that
      * the length of the given array is two or larger.
--- a/jdk/src/share/classes/java/util/logging/Logging.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/share/classes/java/util/logging/Logging.java	Thu Oct 11 16:59:50 2012 -0700
@@ -41,8 +41,8 @@
  * @since 1.5
  *
  * @see javax.management
- * @see java.util.Logger
- * @see java.util.LogManager
+ * @see Logger
+ * @see LogManager
  */
 class Logging implements LoggingMXBean {
 
--- a/jdk/src/share/classes/java/util/prefs/XmlSupport.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/share/classes/java/util/prefs/XmlSupport.java	Thu Oct 11 16:59:50 2012 -0700
@@ -92,7 +92,7 @@
      * @throws BackingStoreException if preference data cannot be read from
      *         backing store.
      * @throws IllegalStateException if this node (or an ancestor) has been
-     *         removed with the {@link #removeNode()} method.
+     *         removed with the {@link Preferences#removeNode()} method.
      */
     static void export(OutputStream os, final Preferences p, boolean subTree)
         throws IOException, BackingStoreException {
--- a/jdk/src/share/classes/javax/crypto/CryptoAllPermission.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/share/classes/javax/crypto/CryptoAllPermission.java	Thu Oct 11 16:59:50 2012 -0700
@@ -136,8 +136,7 @@
      * @exception SecurityException - if this CryptoAllPermissionCollection
      * object has been marked readonly
      */
-    public void add(Permission permission)
-    {
+    public void add(Permission permission) {
         if (isReadOnly())
             throw new SecurityException("attempt to add a Permission to " +
                                         "a readonly PermissionCollection");
@@ -152,13 +151,12 @@
      * Check and see if this set of permissions implies the permissions
      * expressed in "permission".
      *
-     * @param p the Permission object to compare
+     * @param permission the Permission object to compare
      *
      * @return true if the given permission is implied by this
      * CryptoAllPermissionCollection.
      */
-    public boolean implies(Permission permission)
-    {
+    public boolean implies(Permission permission) {
         if (!(permission instanceof CryptoPermission)) {
             return false;
         }
--- a/jdk/src/share/classes/javax/crypto/CryptoPermission.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/share/classes/javax/crypto/CryptoPermission.java	Thu Oct 11 16:59:50 2012 -0700
@@ -471,8 +471,8 @@
  * @author Sharon Liu
  */
 final class CryptoPermissionCollection extends PermissionCollection
-implements Serializable {
-
+    implements Serializable
+{
     private static final long serialVersionUID = -511215555898802763L;
 
     private Vector<Permission> permissions;
@@ -493,8 +493,7 @@
      * @exception SecurityException - if this CryptoPermissionCollection
      * object has been marked <i>readOnly</i>.
      */
-    public void add(Permission permission)
-    {
+    public void add(Permission permission) {
         if (isReadOnly())
             throw new SecurityException("attempt to add a Permission " +
                                         "to a readonly PermissionCollection");
@@ -506,10 +505,10 @@
     }
 
     /**
-      * Check and see if this CryptoPermission object implies
-      * the given Permission object.
+     * Check and see if this CryptoPermission object implies
+     * the given Permission object.
      *
-     * @param p the Permission object to compare
+     * @param permission the Permission object to compare
      *
      * @return true if the given permission  is implied by this
      * CryptoPermissionCollection, false if not.
@@ -538,8 +537,7 @@
      * @return an enumeration of all the CryptoPermission objects.
      */
 
-    public Enumeration<Permission> elements()
-    {
+    public Enumeration<Permission> elements() {
         return permissions.elements();
     }
 }
--- a/jdk/src/share/classes/javax/crypto/CryptoPolicyParser.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/share/classes/javax/crypto/CryptoPolicyParser.java	Thu Oct 11 16:59:50 2012 -0700
@@ -54,7 +54,7 @@
  * @author Sharon Liu
  *
  * @see java.security.Permissions
- * @see java.security.spec.AlgrithomParameterSpec
+ * @see java.security.spec.AlgorithmParameterSpec
  * @see javax.crypto.CryptoPermission
  * @see javax.crypto.CryptoAllPermission
  * @see javax.crypto.CryptoPermissions
--- a/jdk/src/share/classes/javax/crypto/NullCipherSpi.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/share/classes/javax/crypto/NullCipherSpi.java	Thu Oct 11 16:59:50 2012 -0700
@@ -33,7 +33,7 @@
  * tranform the plaintext.
  *
  * @author  Li Gong
- * @see Nullcipher
+ * @see NullCipher
  *
  * @since 1.4
  */
--- a/jdk/src/share/classes/javax/management/loading/MLet.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/share/classes/javax/management/loading/MLet.java	Thu Oct 11 16:59:50 2012 -0700
@@ -798,7 +798,7 @@
       * Allows the m-let to perform any operations it needs before being unregistered
       * by the MBean server.
       *
-      * @exception java.langException This exception should be caught
+      * @exception java.lang.Exception This exception should be caught
       * by the MBean server and re-thrown as an
       * MBeanRegistrationException.
       */
--- a/jdk/src/share/classes/javax/management/modelmbean/ModelMBeanAttributeInfo.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/share/classes/javax/management/modelmbean/ModelMBeanAttributeInfo.java	Thu Oct 11 16:59:50 2012 -0700
@@ -189,7 +189,7 @@
          *          May be null if the property is write-only.
          * @param setter The method used for writing the attribute value.
          *          May be null if the attribute is read-only.
-         * @exception IntrospectionException There is a consistency
+         * @exception javax.management.IntrospectionException There is a consistency
          * problem in the definition of this attribute.
          *
          */
@@ -233,7 +233,7 @@
          * it is null, then a default descriptor will be created.  If
          * the descriptor does not contain the field "displayName" this field is added
          * in the descriptor with its default value.
-         * @exception IntrospectionException There is a consistency
+         * @exception javax.management.IntrospectionException There is a consistency
          * problem in the definition of this attribute.
          * @exception RuntimeOperationsException Wraps an
          * IllegalArgumentException. The descriptor is invalid, or descriptor
--- a/jdk/src/share/classes/javax/management/openmbean/CompositeDataInvocationHandler.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/share/classes/javax/management/openmbean/CompositeDataInvocationHandler.java	Thu Oct 11 16:59:50 2012 -0700
@@ -124,11 +124,6 @@
        <p>Construct a handler backed by the given {@code
        CompositeData}.</p>
 
-       @param mbsc the {@code MBeanServerConnection} related to this
-       {@code CompositeData}.  This is only relevant if a method in
-       the interface for which this is an invocation handler returns
-       a type that is an MXBean interface.  Otherwise, it can be null.
-
        @param compositeData the {@code CompositeData} that will supply
        information to getters.
 
--- a/jdk/src/share/classes/javax/naming/spi/NamingManager.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/share/classes/javax/naming/spi/NamingManager.java	Thu Oct 11 16:59:50 2012 -0700
@@ -416,7 +416,7 @@
      *                  specified.
      *                  See the <code>getObjectInstance</code> method for
      *                  details.
-     * @param ctx       The context relative to which <code>name</code> is
+     * @param nameCtx   The context relative to which <code>name</code> is
      *                  specified, or null for the default initial context.
      *                  See the <code>getObjectInstance</code> method for
      *                  details.
--- a/jdk/src/share/classes/javax/security/auth/kerberos/DelegationPermission.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/share/classes/javax/security/auth/kerberos/DelegationPermission.java	Thu Oct 11 16:59:50 2012 -0700
@@ -178,7 +178,6 @@
      *
      * @return a hash code value for this object.
      */
-
     public int hashCode() {
         return getName().hashCode();
     }
@@ -278,12 +277,11 @@
      * Check and see if this collection of permissions implies the permissions
      * expressed in "permission".
      *
-     * @param p the Permission object to compare
+     * @param permission the Permission object to compare
      *
      * @return true if "permission" is a proper subset of a permission in
      * the collection, false if not.
      */
-
     public boolean implies(Permission permission) {
         if (! (permission instanceof DelegationPermission))
                 return false;
@@ -310,7 +308,6 @@
      * @exception SecurityException - if this PermissionCollection object
      *                                has been marked readonly
      */
-
     public void add(Permission permission) {
         if (! (permission instanceof DelegationPermission))
             throw new IllegalArgumentException("invalid permission: "+
@@ -329,7 +326,6 @@
      *
      * @return an enumeration of all the DelegationPermission objects.
      */
-
     public Enumeration<Permission> elements() {
         // Convert Iterator into Enumeration
         synchronized (this) {
@@ -376,8 +372,9 @@
      * Reads in a Vector of DelegationPermissions and saves them in the perms field.
      */
     @SuppressWarnings("unchecked")
-    private void readObject(ObjectInputStream in) throws IOException,
-    ClassNotFoundException {
+    private void readObject(ObjectInputStream in)
+        throws IOException, ClassNotFoundException
+    {
         // Don't call defaultReadObject()
 
         // Read in serialized fields
--- a/jdk/src/share/classes/javax/security/auth/kerberos/ServicePermission.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/share/classes/javax/security/auth/kerberos/ServicePermission.java	Thu Oct 11 16:59:50 2012 -0700
@@ -259,7 +259,6 @@
      * Always returns present actions in the following order:
      * initiate, accept.
      */
-
     public String getActions() {
         if (actions == null)
             actions = getActions(this.mask);
@@ -280,7 +279,6 @@
      * @return a new PermissionCollection object suitable for storing
      * ServicePermissions.
      */
-
     public PermissionCollection newPermissionCollection() {
         return new KrbServicePermissionCollection();
     }
@@ -290,7 +288,6 @@
      *
      * @return the actions mask.
      */
-
     int getMask() {
         return mask;
     }
@@ -301,7 +298,6 @@
      * @param action the action string
      * @return the action mask
      */
-
     private static int getMask(String action) {
 
         if (action == null) {
@@ -468,12 +464,11 @@
      * Check and see if this collection of permissions implies the permissions
      * expressed in "permission".
      *
-     * @param p the Permission object to compare
+     * @param permission the Permission object to compare
      *
      * @return true if "permission" is a proper subset of a permission in
      * the collection, false if not.
      */
-
     public boolean implies(Permission permission) {
         if (! (permission instanceof ServicePermission))
                 return false;
@@ -517,7 +512,6 @@
      * @exception SecurityException - if this PermissionCollection object
      *                                has been marked readonly
      */
-
     public void add(Permission permission) {
         if (! (permission instanceof ServicePermission))
             throw new IllegalArgumentException("invalid permission: "+
@@ -584,8 +578,9 @@
      * Reads in a Vector of ServicePermissions and saves them in the perms field.
      */
     @SuppressWarnings("unchecked")
-    private void readObject(ObjectInputStream in) throws IOException,
-    ClassNotFoundException {
+    private void readObject(ObjectInputStream in)
+        throws IOException, ClassNotFoundException
+    {
         // Don't call defaultReadObject()
 
         // Read in serialized fields
--- a/jdk/src/share/classes/javax/sql/ConnectionPoolDataSource.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/share/classes/javax/sql/ConnectionPoolDataSource.java	Thu Oct 11 16:59:50 2012 -0700
@@ -48,7 +48,7 @@
    *         connection to the database that this
    *         <code>ConnectionPoolDataSource</code> object represents
    * @exception SQLException if a database access error occurs
-   * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
+   * @exception java.sql.SQLFeatureNotSupportedException if the JDBC driver does not support
    * this method
    * @since 1.4
    */
@@ -64,7 +64,7 @@
    *         connection to the database that this
    *         <code>ConnectionPoolDataSource</code> object represents
    * @exception SQLException if a database access error occurs
-   * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
+   * @exception java.sql.SQLFeatureNotSupportedException if the JDBC driver does not support
    * this method
    * @since 1.4
    */
--- a/jdk/src/share/classes/javax/sql/PooledConnection.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/share/classes/javax/sql/PooledConnection.java	Thu Oct 11 16:59:50 2012 -0700
@@ -102,7 +102,7 @@
    * @return  a <code>Connection</code> object that is a handle to
    *          this <code>PooledConnection</code> object
    * @exception SQLException if a database access error occurs
-   * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
+   * @exception java.sql.SQLFeatureNotSupportedException if the JDBC driver does not support
    * this method
    * @since 1.4
    */
@@ -117,7 +117,7 @@
    * information.
    *
    * @exception SQLException if a database access error occurs
-   * @exception SQLFeatureNotSupportedException if the JDBC driver does not support
+   * @exception java.sql.SQLFeatureNotSupportedException if the JDBC driver does not support
    * this method
    * @since 1.4
    */
--- a/jdk/src/share/classes/javax/sql/rowset/spi/SyncProvider.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/share/classes/javax/sql/rowset/spi/SyncProvider.java	Thu Oct 11 16:59:50 2012 -0700
@@ -293,7 +293,7 @@
      *           SyncProvider.DATASOURCE_TABLE_LOCK,
      *           SyncProvider.DATASOURCE_DB_LOCK
      * </pre>
-     * @throws SyncProviderExceptiom if an error occurs determining the data
+     * @throws SyncProviderException if an error occurs determining the data
      *        source locking level.
      * @see #setDataSourceLock
 
--- a/jdk/src/share/classes/javax/swing/ToolTipManager.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/share/classes/javax/swing/ToolTipManager.java	Thu Oct 11 16:59:50 2012 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -217,6 +217,25 @@
         return exitTimer.getInitialDelay();
     }
 
+    // Returns GraphicsConfiguration instance that toFind belongs to or null
+    // if drawing point is set to a point beyond visible screen area (e.g.
+    // Point(20000, 20000))
+    private GraphicsConfiguration getDrawingGC(Point toFind) {
+        GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment();
+        GraphicsDevice devices[] = env.getScreenDevices();
+        for (GraphicsDevice device : devices) {
+            GraphicsConfiguration configs[] = device.getConfigurations();
+            for (GraphicsConfiguration config : configs) {
+                Rectangle rect = config.getBounds();
+                if (rect.contains(toFind)) {
+                    return config;
+                }
+            }
+        }
+
+        return null;
+    }
+
     void showTipWindow() {
         if(insideComponent == null || !insideComponent.isShowing())
             return;
@@ -231,9 +250,25 @@
         if (enabled) {
             Dimension size;
             Point screenLocation = insideComponent.getLocationOnScreen();
-            Point location = new Point();
-            GraphicsConfiguration gc;
-            gc = insideComponent.getGraphicsConfiguration();
+            Point location;
+
+            Point toFind;
+            if (preferredLocation != null) {
+                toFind = new Point(screenLocation.x + preferredLocation.x,
+                        screenLocation.y + preferredLocation.y);
+            } else {
+                toFind = mouseEvent.getLocationOnScreen();
+            }
+
+            GraphicsConfiguration gc = getDrawingGC(toFind);
+            if (gc == null) {
+                toFind = mouseEvent.getLocationOnScreen();
+                gc = getDrawingGC(toFind);
+                if (gc == null) {
+                    gc = insideComponent.getGraphicsConfiguration();
+                }
+            }
+
             Rectangle sBounds = gc.getBounds();
             Insets screenInsets = Toolkit.getDefaultToolkit()
                                              .getScreenInsets(gc);
@@ -253,14 +288,13 @@
             size = tip.getPreferredSize();
 
             if(preferredLocation != null) {
-                location.x = screenLocation.x + preferredLocation.x;
-                location.y = screenLocation.y + preferredLocation.y;
+                location = toFind;
         if (!leftToRight) {
             location.x -= size.width;
         }
             } else {
-                location.x = screenLocation.x + mouseEvent.getX();
-                location.y = screenLocation.y + mouseEvent.getY() + 20;
+                location = new Point(screenLocation.x + mouseEvent.getX(),
+                        screenLocation.y + mouseEvent.getY() + 20);
         if (!leftToRight) {
             if(location.x - size.width>=0) {
                 location.x -= size.width;
--- a/jdk/src/share/classes/javax/swing/colorchooser/DefaultSwatchChooserPanel.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/share/classes/javax/swing/colorchooser/DefaultSwatchChooserPanel.java	Thu Oct 11 16:59:50 2012 -0700
@@ -57,6 +57,8 @@
     RecentSwatchPanel recentSwatchPanel;
     MouseListener mainSwatchListener;
     MouseListener recentSwatchListener;
+    private KeyListener mainSwatchKeyListener;
+    private KeyListener recentSwatchKeyListener;
 
     public DefaultSwatchChooserPanel() {
         super();
@@ -151,10 +153,14 @@
         recentSwatchPanel.putClientProperty(AccessibleContext.ACCESSIBLE_NAME_PROPERTY,
                                             recentStr);
 
+        mainSwatchKeyListener = new MainSwatchKeyListener();
         mainSwatchListener = new MainSwatchListener();
         swatchPanel.addMouseListener(mainSwatchListener);
+        swatchPanel.addKeyListener(mainSwatchKeyListener);
         recentSwatchListener = new RecentSwatchListener();
+        recentSwatchKeyListener = new RecentSwatchKeyListener();
         recentSwatchPanel.addMouseListener(recentSwatchListener);
+        recentSwatchPanel.addKeyListener(recentSwatchKeyListener);
 
         JPanel mainHolder = new JPanel(new BorderLayout());
         Border border = new CompoundBorder( new LineBorder(Color.black),
@@ -196,11 +202,17 @@
     public void uninstallChooserPanel(JColorChooser enclosingChooser) {
         super.uninstallChooserPanel(enclosingChooser);
         swatchPanel.removeMouseListener(mainSwatchListener);
+        swatchPanel.removeKeyListener(mainSwatchKeyListener);
         recentSwatchPanel.removeMouseListener(recentSwatchListener);
+        recentSwatchPanel.removeKeyListener(recentSwatchKeyListener);
+
         swatchPanel = null;
         recentSwatchPanel = null;
         mainSwatchListener = null;
+        mainSwatchKeyListener = null;
         recentSwatchListener = null;
+        recentSwatchKeyListener = null;
+
         removeAll();  // strip out all the sub-components
     }
 
@@ -209,11 +221,32 @@
     }
 
 
+    private class RecentSwatchKeyListener extends KeyAdapter {
+        public void keyPressed(KeyEvent e) {
+            if (KeyEvent.VK_SPACE == e.getKeyCode()) {
+                Color color = recentSwatchPanel.getSelectedColor();
+                setSelectedColor(color);
+            }
+        }
+    }
+
+    private class MainSwatchKeyListener extends KeyAdapter {
+        public void keyPressed(KeyEvent e) {
+            if (KeyEvent.VK_SPACE == e.getKeyCode()) {
+                Color color = swatchPanel.getSelectedColor();
+                setSelectedColor(color);
+                recentSwatchPanel.setMostRecentColor(color);
+            }
+        }
+    }
+
     class RecentSwatchListener extends MouseAdapter implements Serializable {
         public void mousePressed(MouseEvent e) {
             if (isEnabled()) {
                 Color color = recentSwatchPanel.getColorForLocation(e.getX(), e.getY());
+                recentSwatchPanel.setSelectedColorFromLocation(e.getX(), e.getY());
                 setSelectedColor(color);
+                recentSwatchPanel.requestFocusInWindow();
             }
         }
     }
@@ -223,7 +256,9 @@
             if (isEnabled()) {
                 Color color = swatchPanel.getColorForLocation(e.getX(), e.getY());
                 setSelectedColor(color);
+                swatchPanel.setSelectedColorFromLocation(e.getX(), e.getY());
                 recentSwatchPanel.setMostRecentColor(color);
+                swatchPanel.requestFocusInWindow();
             }
         }
     }
@@ -239,18 +274,81 @@
     protected Dimension numSwatches;
     protected Dimension gap;
 
+    private int selRow;
+    private int selCol;
+
     public SwatchPanel() {
         initValues();
         initColors();
         setToolTipText(""); // register for events
         setOpaque(true);
         setBackground(Color.white);
-        setRequestFocusEnabled(false);
+        setFocusable(true);
         setInheritsPopupMenu(true);
+
+        addFocusListener(new FocusAdapter() {
+            public void focusGained(FocusEvent e) {
+                repaint();
+            }
+
+            public void focusLost(FocusEvent e) {
+                repaint();
+            }
+        });
+
+        addKeyListener(new KeyAdapter() {
+            public void keyPressed(KeyEvent e) {
+                int typed = e.getKeyCode();
+                switch (typed) {
+                    case KeyEvent.VK_UP:
+                        if (selRow > 0) {
+                            selRow--;
+                            repaint();
+                        }
+                        break;
+                    case KeyEvent.VK_DOWN:
+                        if (selRow < numSwatches.height - 1) {
+                            selRow++;
+                            repaint();
+                        }
+                        break;
+                    case KeyEvent.VK_LEFT:
+                        if (selCol > 0 && SwatchPanel.this.getComponentOrientation().isLeftToRight()) {
+                            selCol--;
+                            repaint();
+                        } else if (selCol < numSwatches.width - 1
+                                && !SwatchPanel.this.getComponentOrientation().isLeftToRight()) {
+                            selCol++;
+                            repaint();
+                        }
+                        break;
+                    case KeyEvent.VK_RIGHT:
+                        if (selCol < numSwatches.width - 1
+                                && SwatchPanel.this.getComponentOrientation().isLeftToRight()) {
+                            selCol++;
+                            repaint();
+                        } else if (selCol > 0 && !SwatchPanel.this.getComponentOrientation().isLeftToRight()) {
+                            selCol--;
+                            repaint();
+                        }
+                        break;
+                    case KeyEvent.VK_HOME:
+                        selCol = 0;
+                        selRow = 0;
+                        repaint();
+                        break;
+                    case KeyEvent.VK_END:
+                        selCol = numSwatches.width - 1;
+                        selRow = numSwatches.height - 1;
+                        repaint();
+                        break;
+                }
+            }
+        });
     }
 
-    public boolean isFocusTraversable() {
-        return false;
+    public Color getSelectedColor() {
+        return getColorForCell(selCol, selRow);
     }
 
     protected void initValues() {
@@ -263,11 +361,10 @@
          for (int row = 0; row < numSwatches.height; row++) {
             int y = row * (swatchSize.height + gap.height);
             for (int column = 0; column < numSwatches.width; column++) {
-
-              g.setColor( getColorForCell(column, row) );
+                Color c = getColorForCell(column, row);
+                g.setColor(c);
                 int x;
-                if ((!this.getComponentOrientation().isLeftToRight()) &&
-                    (this instanceof RecentSwatchPanel)) {
+                if (!this.getComponentOrientation().isLeftToRight()) {
                     x = (numSwatches.width - column - 1) * (swatchSize.width + gap.width);
                 } else {
                     x = column * (swatchSize.width + gap.width);
@@ -276,6 +373,20 @@
                 g.setColor(Color.black);
                 g.drawLine( x+swatchSize.width-1, y, x+swatchSize.width-1, y+swatchSize.height-1);
                 g.drawLine( x, y+swatchSize.height-1, x+swatchSize.width-1, y+swatchSize.height-1);
+
+                if (selRow == row && selCol == column && this.isFocusOwner()) {
+                    Color c2 = new Color(c.getRed() < 125 ? 255 : 0,
+                            c.getGreen() < 125 ? 255 : 0,
+                            c.getBlue() < 125 ? 255 : 0);
+                    g.setColor(c2);
+
+                    g.drawLine(x, y, x + swatchSize.width - 1, y);
+                    g.drawLine(x, y, x, y + swatchSize.height - 1);
+                    g.drawLine(x + swatchSize.width - 1, y, x + swatchSize.width - 1, y + swatchSize.height - 1);
+                    g.drawLine(x, y + swatchSize.height - 1, x + swatchSize.width - 1, y + swatchSize.height - 1);
+                    g.drawLine(x, y, x + swatchSize.width - 1, y + swatchSize.height - 1);
+                    g.drawLine(x, y + swatchSize.height - 1, x + swatchSize.width - 1, y);
+                }
             }
          }
     }
@@ -296,10 +407,19 @@
         return color.getRed()+", "+ color.getGreen() + ", " + color.getBlue();
     }
 
+    public void setSelectedColorFromLocation(int x, int y) {
+        if (!this.getComponentOrientation().isLeftToRight()) {
+            selCol = numSwatches.width - x / (swatchSize.width + gap.width) - 1;
+        } else {
+            selCol = x / (swatchSize.width + gap.width);
+        }
+        selRow = y / (swatchSize.height + gap.height);
+        repaint();
+    }
+
     public Color getColorForLocation( int x, int y ) {
         int column;
-        if ((!this.getComponentOrientation().isLeftToRight()) &&
-            (this instanceof RecentSwatchPanel)) {
+        if (!this.getComponentOrientation().isLeftToRight()) {
             column = numSwatches.width - x / (swatchSize.width + gap.width) - 1;
         } else {
             column = x / (swatchSize.width + gap.width);
--- a/jdk/src/share/classes/sun/net/www/http/HttpClient.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/share/classes/sun/net/www/http/HttpClient.java	Thu Oct 11 16:59:50 2012 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1994, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1994, 2012, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -36,6 +36,7 @@
 import sun.net.www.ParseUtil;
 import sun.net.www.protocol.http.HttpURLConnection;
 import sun.util.logging.PlatformLogger;
+import static sun.net.www.protocol.http.HttpURLConnection.TunnelState.*;
 
 /**
  * @author Herb Jellinek
@@ -244,16 +245,17 @@
      */
     public static HttpClient New(URL url)
     throws IOException {
-        return HttpClient.New(url, Proxy.NO_PROXY, -1, true);
+        return HttpClient.New(url, Proxy.NO_PROXY, -1, true, null);
     }
 
     public static HttpClient New(URL url, boolean useCache)
         throws IOException {
-        return HttpClient.New(url, Proxy.NO_PROXY, -1, useCache);
+        return HttpClient.New(url, Proxy.NO_PROXY, -1, useCache, null);
     }
 
-    public static HttpClient New(URL url, Proxy p, int to, boolean useCache)
-        throws IOException {
+    public static HttpClient New(URL url, Proxy p, int to, boolean useCache,
+        HttpURLConnection httpuc) throws IOException
+    {
         if (p == null) {
             p = Proxy.NO_PROXY;
         }
@@ -261,6 +263,13 @@
         /* see if one's already around */
         if (useCache) {
             ret = kac.get(url, null);
+            if (ret != null && httpuc != null &&
+                httpuc.streaming() &&
+                httpuc.getRequestMethod() == "POST") {
+                if (!ret.available())
+                    ret = null;
+            }
+
             if (ret != null) {
                 if ((ret.proxy != null && ret.proxy.equals(p)) ||
                     (ret.proxy == null && p == null)) {
@@ -268,6 +277,8 @@
                         ret.cachedHttpClient = true;
                         assert ret.inCache;
                         ret.inCache = false;
+                        if (httpuc != null && ret.needsTunneling())
+                            httpuc.setTunnelState(TUNNELING);
                         PlatformLogger logger = HttpURLConnection.getHttpLogger();
                         if (logger.isLoggable(PlatformLogger.FINEST)) {
                             logger.finest("KeepAlive stream retrieved from the cache, " + ret);
@@ -302,20 +313,25 @@
         return ret;
     }
 
-    public static HttpClient New(URL url, Proxy p, int to) throws IOException {
-        return New(url, p, to, true);
+    public static HttpClient New(URL url, Proxy p, int to,
+        HttpURLConnection httpuc) throws IOException
+    {
+        return New(url, p, to, true, httpuc);
     }
 
     public static HttpClient New(URL url, String proxyHost, int proxyPort,
                                  boolean useCache)
         throws IOException {
-        return New(url, newHttpProxy(proxyHost, proxyPort, "http"), -1, useCache);
+        return New(url, newHttpProxy(proxyHost, proxyPort, "http"),
+            -1, useCache, null);
     }
 
     public static HttpClient New(URL url, String proxyHost, int proxyPort,
-                                 boolean useCache, int to)
+                                 boolean useCache, int to,
+                                 HttpURLConnection httpuc)
         throws IOException {
-        return New(url, newHttpProxy(proxyHost, proxyPort, "http"), to, useCache);
+        return New(url, newHttpProxy(proxyHost, proxyPort, "http"),
+            to, useCache, httpuc);
     }
 
     /* return it to the cache as still usable, if:
@@ -344,6 +360,34 @@
         }
     }
 
+    protected synchronized boolean available() throws IOException {
+        boolean available = true;
+        int old = serverSocket.getSoTimeout();
+        serverSocket.setSoTimeout(1);
+        BufferedInputStream tmpbuf =
+            new BufferedInputStream(serverSocket.getInputStream());
+
+        PlatformLogger logger = HttpURLConnection.getHttpLogger();
+        try {
+            int r = tmpbuf.read();
+            if (r == -1) {
+                if (logger.isLoggable(PlatformLogger.FINEST)) {
+                    logger.finest("HttpClient.available(): " +
+                        "read returned -1: not available");
+                }
+                available = false;
+            }
+        } catch (SocketTimeoutException e) {
+            if (logger.isLoggable(PlatformLogger.FINEST)) {
+                logger.finest("HttpClient.available(): " +
+                    "SocketTimeout: its available");
+            }
+        } finally {
+            serverSocket.setSoTimeout(old);
+        }
+        return available;
+    }
+
     protected synchronized void putInKeepAliveCache() {
         if (inCache) {
             assert false : "Duplicate put to keep alive cache";
--- a/jdk/src/share/classes/sun/net/www/protocol/http/HttpURLConnection.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/share/classes/sun/net/www/protocol/http/HttpURLConnection.java	Thu Oct 11 16:59:50 2012 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2012, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -351,7 +351,7 @@
     private HttpClient reuseClient = null;
 
     /* Tunnel states */
-    enum TunnelState {
+    public enum TunnelState {
         /* No tunnel */
         NONE,
 
@@ -662,7 +662,7 @@
      */
     protected void setNewClient (URL url, boolean useCache)
         throws IOException {
-        http = HttpClient.New(url, null, -1, useCache, connectTimeout);
+        http = HttpClient.New(url, null, -1, useCache, connectTimeout, this);
         http.setReadTimeout(readTimeout);
     }
 
@@ -703,7 +703,8 @@
                                            String proxyHost, int proxyPort,
                                            boolean useCache)
         throws IOException {
-        http = HttpClient.New (url, proxyHost, proxyPort, useCache, connectTimeout);
+        http = HttpClient.New (url, proxyHost, proxyPort, useCache,
+            connectTimeout, this);
         http.setReadTimeout(readTimeout);
     }
 
@@ -994,14 +995,14 @@
     // subclass HttpsClient will overwrite & return an instance of HttpsClient
     protected HttpClient getNewHttpClient(URL url, Proxy p, int connectTimeout)
         throws IOException {
-        return HttpClient.New(url, p, connectTimeout);
+        return HttpClient.New(url, p, connectTimeout, this);
     }
 
     // subclass HttpsClient will overwrite & return an instance of HttpsClient
     protected HttpClient getNewHttpClient(URL url, Proxy p,
                                           int connectTimeout, boolean useCache)
         throws IOException {
-        return HttpClient.New(url, p, connectTimeout, useCache);
+        return HttpClient.New(url, p, connectTimeout, useCache, this);
     }
 
     private void expect100Continue() throws IOException {
@@ -1144,7 +1145,7 @@
         }
     }
 
-    private boolean streaming () {
+    public boolean streaming () {
         return (fixedContentLength != -1) || (fixedContentLengthLong != -1) ||
                (chunkLength != -1);
     }
@@ -1739,7 +1740,7 @@
      *
      * @param  the state
      */
-    void setTunnelState(TunnelState tunnelState) {
+    public void setTunnelState(TunnelState tunnelState) {
         this.tunnelState = tunnelState;
     }
 
--- a/jdk/src/share/classes/sun/nio/ch/DatagramChannelImpl.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/share/classes/sun/nio/ch/DatagramChannelImpl.java	Thu Oct 11 16:59:50 2012 -0700
@@ -1059,6 +1059,28 @@
         return translateReadyOps(ops, 0, sk);
     }
 
+    // package-private
+    int poll(int events, long timeout) throws IOException {
+        assert Thread.holdsLock(blockingLock()) && !isBlocking();
+
+        synchronized (readLock) {
+            int n = 0;
+            try {
+                begin();
+                synchronized (stateLock) {
+                    if (!isOpen())
+                        return 0;
+                    readerThread = NativeThread.current();
+                }
+                n = Net.poll(fd, events, timeout);
+            } finally {
+                readerThread = 0;
+                end(n > 0);
+            }
+            return n;
+        }
+    }
+
     /**
      * Translates an interest operation set into a native poll event set
      */
--- a/jdk/src/share/classes/sun/nio/ch/DatagramSocketAdaptor.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/share/classes/sun/nio/ch/DatagramSocketAdaptor.java	Thu Oct 11 16:59:50 2012 -0700
@@ -176,40 +176,31 @@
             return dc.receive(bb);
         }
 
-        // Implement timeout with a selector
-        SelectionKey sk = null;
-        Selector sel = null;
         dc.configureBlocking(false);
         try {
             int n;
             SocketAddress sender;
             if ((sender = dc.receive(bb)) != null)
                 return sender;
-            sel = Util.getTemporarySelector(dc);
-            sk = dc.register(sel, SelectionKey.OP_READ);
             long to = timeout;
             for (;;) {
                 if (!dc.isOpen())
                      throw new ClosedChannelException();
                 long st = System.currentTimeMillis();
-                int ns = sel.select(to);
-                if (ns > 0 && sk.isReadable()) {
+                int result = dc.poll(PollArrayWrapper.POLLIN, to);
+                if (result > 0 &&
+                        ((result & PollArrayWrapper.POLLIN) != 0)) {
                     if ((sender = dc.receive(bb)) != null)
                         return sender;
                 }
-                sel.selectedKeys().remove(sk);
                 to -= System.currentTimeMillis() - st;
                 if (to <= 0)
                     throw new SocketTimeoutException();
 
             }
         } finally {
-            if (sk != null)
-                sk.cancel();
             if (dc.isOpen())
                 dc.configureBlocking(true);
-            if (sel != null)
-                Util.releaseTemporarySelector(sel);
         }
     }
 
--- a/jdk/src/share/classes/sun/nio/ch/Net.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/share/classes/sun/nio/ch/Net.java	Thu Oct 11 16:59:50 2012 -0700
@@ -409,6 +409,9 @@
                                              int level, int opt, int arg)
         throws IOException;
 
+    static native int poll(FileDescriptor fd, int events, long timeout)
+        throws IOException;
+
     // -- Multicast support --
 
 
--- a/jdk/src/share/classes/sun/nio/ch/ServerSocketAdaptor.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/share/classes/sun/nio/ch/ServerSocketAdaptor.java	Thu Oct 11 16:59:50 2012 -0700
@@ -102,37 +102,26 @@
                     return sc.socket();
                 }
 
-                // Implement timeout with a selector
-                SelectionKey sk = null;
-                Selector sel = null;
                 ssc.configureBlocking(false);
                 try {
                     SocketChannel sc;
                     if ((sc = ssc.accept()) != null)
                         return sc.socket();
-                    sel = Util.getTemporarySelector(ssc);
-                    sk = ssc.register(sel, SelectionKey.OP_ACCEPT);
                     long to = timeout;
                     for (;;) {
                         if (!ssc.isOpen())
                             throw new ClosedChannelException();
                         long st = System.currentTimeMillis();
-                        int ns = sel.select(to);
-                        if (ns > 0 &&
-                            sk.isAcceptable() && ((sc = ssc.accept()) != null))
+                        int result = ssc.poll(PollArrayWrapper.POLLIN, to);
+                        if (result > 0 && ((sc = ssc.accept()) != null))
                             return sc.socket();
-                        sel.selectedKeys().remove(sk);
                         to -= System.currentTimeMillis() - st;
                         if (to <= 0)
                             throw new SocketTimeoutException();
                     }
                 } finally {
-                    if (sk != null)
-                        sk.cancel();
                     if (ssc.isOpen())
                         ssc.configureBlocking(true);
-                    if (sel != null)
-                        Util.releaseTemporarySelector(sel);
                 }
 
             } catch (Exception x) {
--- a/jdk/src/share/classes/sun/nio/ch/ServerSocketChannelImpl.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/share/classes/sun/nio/ch/ServerSocketChannelImpl.java	Thu Oct 11 16:59:50 2012 -0700
@@ -324,6 +324,28 @@
         return translateReadyOps(ops, 0, sk);
     }
 
+    // package-private
+    int poll(int events, long timeout) throws IOException {
+        assert Thread.holdsLock(blockingLock()) && !isBlocking();
+
+        synchronized (lock) {
+            int n = 0;
+            try {
+                begin();
+                synchronized (stateLock) {
+                    if (!isOpen())
+                        return 0;
+                    thread = NativeThread.current();
+                }
+                n = Net.poll(fd, events, timeout);
+            } finally {
+                thread = 0;
+                end(n > 0);
+            }
+            return n;
+        }
+    }
+
     /**
      * Translates an interest operation set into a native poll event set
      */
--- a/jdk/src/share/classes/sun/nio/ch/SocketAdaptor.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/share/classes/sun/nio/ch/SocketAdaptor.java	Thu Oct 11 16:59:50 2012 -0700
@@ -97,25 +97,19 @@
                     return;
                 }
 
-                // Implement timeout with a selector
-                SelectionKey sk = null;
-                Selector sel = null;
                 sc.configureBlocking(false);
                 try {
                     if (sc.connect(remote))
                         return;
-                    sel = Util.getTemporarySelector(sc);
-                    sk = sc.register(sel, SelectionKey.OP_CONNECT);
                     long to = timeout;
                     for (;;) {
                         if (!sc.isOpen())
                             throw new ClosedChannelException();
                         long st = System.currentTimeMillis();
-                        int ns = sel.select(to);
-                        if (ns > 0 &&
-                            sk.isConnectable() && sc.finishConnect())
+
+                        int result = sc.poll(PollArrayWrapper.POLLCONN, to);
+                        if (result > 0 && sc.finishConnect())
                             break;
-                        sel.selectedKeys().remove(sk);
                         to -= System.currentTimeMillis() - st;
                         if (to <= 0) {
                             try {
@@ -125,12 +119,8 @@
                         }
                     }
                 } finally {
-                    if (sk != null)
-                        sk.cancel();
                     if (sc.isOpen())
                         sc.configureBlocking(true);
-                    if (sel != null)
-                        Util.releaseTemporarySelector(sel);
                 }
 
             } catch (Exception x) {
@@ -199,39 +189,29 @@
                     throw new IllegalBlockingModeException();
                 if (timeout == 0)
                     return sc.read(bb);
+                sc.configureBlocking(false);
 
-                // Implement timeout with a selector
-                SelectionKey sk = null;
-                Selector sel = null;
-                sc.configureBlocking(false);
                 try {
                     int n;
                     if ((n = sc.read(bb)) != 0)
                         return n;
-                    sel = Util.getTemporarySelector(sc);
-                    sk = sc.register(sel, SelectionKey.OP_READ);
                     long to = timeout;
                     for (;;) {
                         if (!sc.isOpen())
                             throw new ClosedChannelException();
                         long st = System.currentTimeMillis();
-                        int ns = sel.select(to);
-                        if (ns > 0 && sk.isReadable()) {
+                        int result = sc.poll(PollArrayWrapper.POLLIN, to);
+                        if (result > 0) {
                             if ((n = sc.read(bb)) != 0)
                                 return n;
                         }
-                        sel.selectedKeys().remove(sk);
                         to -= System.currentTimeMillis() - st;
                         if (to <= 0)
                             throw new SocketTimeoutException();
                     }
                 } finally {
-                    if (sk != null)
-                        sk.cancel();
                     if (sc.isOpen())
                         sc.configureBlocking(true);
-                    if (sel != null)
-                        Util.releaseTemporarySelector(sel);
                 }
 
             }
--- a/jdk/src/share/classes/sun/nio/ch/SocketChannelImpl.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/share/classes/sun/nio/ch/SocketChannelImpl.java	Thu Oct 11 16:59:50 2012 -0700
@@ -914,6 +914,28 @@
         return translateReadyOps(ops, 0, sk);
     }
 
+    // package-private
+    int poll(int events, long timeout) throws IOException {
+        assert Thread.holdsLock(blockingLock()) && !isBlocking();
+
+        synchronized (readLock) {
+            int n = 0;
+            try {
+                begin();
+                synchronized (stateLock) {
+                    if (!isOpen())
+                        return 0;
+                    readerThread = NativeThread.current();
+                }
+                n = Net.poll(fd, events, timeout);
+            } finally {
+                readerCleanup();
+                end(n > 0);
+            }
+            return n;
+        }
+    }
+
     /**
      * Translates an interest operation set into a native poll event set
      */
--- a/jdk/src/share/classes/sun/nio/ch/Util.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/share/classes/sun/nio/ch/Util.java	Thu Oct 11 16:59:50 2012 -0700
@@ -218,66 +218,6 @@
         ((DirectBuffer)buf).cleaner().clean();
     }
 
-    private static class SelectorWrapper {
-        private Selector sel;
-        private SelectorWrapper (Selector sel) {
-            this.sel = sel;
-            Cleaner.create(this, new Closer(sel));
-        }
-        private static class Closer implements Runnable {
-            private Selector sel;
-            private Closer (Selector sel) {
-                this.sel = sel;
-            }
-            public void run () {
-                try {
-                    sel.close();
-                } catch (Throwable th) {
-                    throw new Error(th);
-                }
-            }
-        }
-        public Selector get() { return sel;}
-    }
-
-    // Per-thread cached selector
-    private static ThreadLocal<SoftReference<SelectorWrapper>> localSelector
-        = new ThreadLocal<SoftReference<SelectorWrapper>>();
-    // Hold a reference to the selWrapper object to prevent it from
-    // being cleaned when the temporary selector wrapped is on lease.
-    private static ThreadLocal<SelectorWrapper> localSelectorWrapper
-        = new ThreadLocal<SelectorWrapper>();
-
-    // When finished, invoker must ensure that selector is empty
-    // by cancelling any related keys and explicitly releasing
-    // the selector by invoking releaseTemporarySelector()
-    static Selector getTemporarySelector(SelectableChannel sc)
-        throws IOException
-    {
-        SoftReference<SelectorWrapper> ref = localSelector.get();
-        SelectorWrapper selWrapper = null;
-        Selector sel = null;
-        if (ref == null
-            || ((selWrapper = ref.get()) == null)
-            || ((sel = selWrapper.get()) == null)
-            || (sel.provider() != sc.provider())) {
-            sel = sc.provider().openSelector();
-            selWrapper = new SelectorWrapper(sel);
-            localSelector.set(new SoftReference<SelectorWrapper>(selWrapper));
-        }
-        localSelectorWrapper.set(selWrapper);
-        return sel;
-    }
-
-    static void releaseTemporarySelector(Selector sel)
-        throws IOException
-    {
-        // Selector should be empty
-        sel.selectNow();                // Flush cancelled keys
-        assert sel.keys().isEmpty() : "Temporary selector not empty";
-        localSelectorWrapper.set(null);
-    }
-
 
     // -- Random stuff --
 
--- a/jdk/src/share/classes/sun/security/pkcs11/P11Cipher.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/share/classes/sun/security/pkcs11/P11Cipher.java	Thu Oct 11 16:59:50 2012 -0700
@@ -193,9 +193,9 @@
             } else { // DES, DESede, Blowfish
                 blockSize = 8;
             }
-            this.blockMode =
-                (algoParts.length > 1 ? parseMode(algoParts[1]) : MODE_ECB);
         }
+        this.blockMode =
+            (algoParts.length > 1 ? parseMode(algoParts[1]) : MODE_ECB);
         String defPadding = (blockSize == 0 ? "NoPadding" : "PKCS5Padding");
         String paddingStr =
                 (algoParts.length > 2 ? algoParts[2] : defPadding);
--- a/jdk/src/share/classes/sun/security/provider/DSAKeyPairGenerator.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/share/classes/sun/security/provider/DSAKeyPairGenerator.java	Thu Oct 11 16:59:50 2012 -0700
@@ -82,7 +82,9 @@
     }
 
     public void initialize(int modlen, SecureRandom random) {
-        initialize(modlen, false, random);
+        // generate new parameters when no precomputed ones available.
+        initialize(modlen, true, random);
+        this.forceNewParameters = false;
     }
 
     /**
--- a/jdk/src/share/classes/sun/security/provider/DSAParameterGenerator.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/share/classes/sun/security/provider/DSAParameterGenerator.java	Thu Oct 11 16:59:50 2012 -0700
@@ -116,12 +116,13 @@
             throw new InvalidAlgorithmParameterException("Invalid parameter");
         }
         DSAGenParameterSpec dsaGenParams = (DSAGenParameterSpec) genParamSpec;
-        if (dsaGenParams.getPrimePLength() > 2048) {
+        int primePLen = dsaGenParams.getPrimePLength();
+        if (primePLen > 2048) {
             throw new InvalidParameterException
-                ("Prime size should be 512 - 1024, or 2048");
+                ("No support for prime size " + primePLen);
         }
         // directly initialize using the already validated values
-        this.valueL = dsaGenParams.getPrimePLength();
+        this.valueL = primePLen;
         this.valueN = dsaGenParams.getSubprimeQLength();
         this.seedLen = dsaGenParams.getSeedLength();
         this.random = random;
--- a/jdk/src/share/classes/sun/security/provider/ParameterCache.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/share/classes/sun/security/provider/ParameterCache.java	Thu Oct 11 16:59:50 2012 -0700
@@ -146,9 +146,14 @@
                    InvalidAlgorithmParameterException {
         AlgorithmParameterGenerator gen =
                 AlgorithmParameterGenerator.getInstance("DSA");
-        DSAGenParameterSpec genParams =
-            new DSAGenParameterSpec(primeLen, subprimeLen);
-        gen.init(genParams, random);
+        // Use init(int size, SecureRandom random) for legacy DSA key sizes
+        if (primeLen < 1024) {
+            gen.init(primeLen, random);
+        } else {
+            DSAGenParameterSpec genParams =
+                new DSAGenParameterSpec(primeLen, subprimeLen);
+            gen.init(genParams, random);
+        }
         AlgorithmParameters params = gen.generateParameters();
         DSAParameterSpec spec = params.getParameterSpec(DSAParameterSpec.class);
         return spec;
@@ -159,8 +164,9 @@
         dsaCache = new ConcurrentHashMap<Integer,DSAParameterSpec>();
 
         /*
-         * We support precomputed parameter for 512, 768 and 1024 bit
-         * moduli. In this file we provide both the seed and counter
+         * We support precomputed parameter for legacy 512, 768 bit moduli,
+         * and (L, N) combinations of (1024, 160), (2048, 224), (2048, 256).
+         * In this file we provide both the seed and counter
          * value of the generation process for each of these seeds,
          * for validation purposes. We also include the test vectors
          * from the DSA specification, FIPS 186, and the FIPS 186
--- a/jdk/src/share/classes/sun/security/ssl/HandshakeMessage.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/share/classes/sun/security/ssl/HandshakeMessage.java	Thu Oct 11 16:59:50 2012 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1996, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 2012, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -132,7 +132,7 @@
      */
     final void write(HandshakeOutStream s) throws IOException {
         int len = messageLength();
-        if (len > (1 << 24)) {
+        if (len >= Record.OVERFLOW_OF_INT24) {
             throw new SSLException("Handshake message too big"
                 + ", type = " + messageType() + ", len = " + len);
         }
--- a/jdk/src/share/classes/sun/security/ssl/HandshakeOutStream.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/share/classes/sun/security/ssl/HandshakeOutStream.java	Thu Oct 11 16:59:50 2012 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1996, 2009, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 2012, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -153,10 +153,12 @@
      */
 
     void putInt8(int i) throws IOException {
+        checkOverflow(i, Record.OVERFLOW_OF_INT08);
         r.write(i);
     }
 
     void putInt16(int i) throws IOException {
+        checkOverflow(i, Record.OVERFLOW_OF_INT16);
         if (r.availableDataBytes() < 2) {
             flush();
         }
@@ -165,6 +167,7 @@
     }
 
     void putInt24(int i) throws IOException {
+        checkOverflow(i, Record.OVERFLOW_OF_INT24);
         if (r.availableDataBytes() < 3) {
             flush();
         }
@@ -191,6 +194,8 @@
         if (b == null) {
             putInt8(0);
             return;
+        } else {
+            checkOverflow(b.length, Record.OVERFLOW_OF_INT08);
         }
         putInt8(b.length);
         write(b, 0, b.length);
@@ -200,6 +205,8 @@
         if (b == null) {
             putInt16(0);
             return;
+        } else {
+            checkOverflow(b.length, Record.OVERFLOW_OF_INT16);
         }
         putInt16(b.length);
         write(b, 0, b.length);
@@ -209,8 +216,19 @@
         if (b == null) {
             putInt24(0);
             return;
+        } else {
+            checkOverflow(b.length, Record.OVERFLOW_OF_INT24);
         }
         putInt24(b.length);
         write(b, 0, b.length);
     }
+
+    private void checkOverflow(int length, int overflow) {
+        if (length >= overflow) {
+            // internal_error alert will be triggered
+            throw new RuntimeException(
+                    "Field length overflow, the field length (" +
+                    length + ") should be less than " + overflow);
+        }
+    }
 }
--- a/jdk/src/share/classes/sun/security/ssl/Record.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/share/classes/sun/security/ssl/Record.java	Thu Oct 11 16:59:50 2012 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1996, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 2012, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -110,4 +110,10 @@
                                     + maxPadding        // padding
                                     + trailerSize;      // MAC
 
+    /*
+     * The overflow values of integers of 8, 16 and 24 bits.
+     */
+    static final int OVERFLOW_OF_INT08 = (1 << 8);
+    static final int OVERFLOW_OF_INT16 = (1 << 16);
+    static final int OVERFLOW_OF_INT24 = (1 << 24);
 }
--- a/jdk/src/share/classes/sun/text/SupplementaryCharacterData.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/share/classes/sun/text/SupplementaryCharacterData.java	Thu Oct 11 16:59:50 2012 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -32,6 +32,11 @@
 public final class SupplementaryCharacterData implements Cloneable {
 
     /**
+     * A token used as a character-category value to identify ignore characters
+     */
+    private static final byte IGNORE = -1;
+
+    /**
      * An array for supplementary characters and values.
      * Lower one byte is used to keep a byte-value.
      * Upper three bytes are used to keep the first supplementary character
@@ -78,7 +83,8 @@
             } else if (index > (end-1)) {
                 i = k;
             } else {
-                return dataTable[k] & 0xFF;
+                int v = dataTable[k] & 0xFF;
+                return (v == 0xFF) ? IGNORE : v;
             }
         }
     }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/share/classes/sun/util/locale/LocaleEquivalentMaps.java	Thu Oct 11 16:59:50 2012 -0700
@@ -0,0 +1,204 @@
+/*
+ * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package sun.util.locale;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Locale equivalent map for BCP47 Locale matching
+ */
+final class LocaleEquivalentMaps {
+
+    static final Map<String, String> singleEquivMap;
+    static final Map<String, String[]> multiEquivsMap;
+    static final Map<String, String> regionVariantEquivMap;
+
+    static {
+        singleEquivMap = new HashMap<>();
+        multiEquivsMap = new HashMap<>();
+        regionVariantEquivMap = new HashMap<>();
+
+        // This is an auto-generated file and should not be manually edited.
+        //   LSR Revision: 2012-09-04
+        singleEquivMap.put("ami", "i-ami");
+        singleEquivMap.put("art-lojban", "jbo");
+        singleEquivMap.put("ase", "sgn-us");
+        singleEquivMap.put("ayx", "nun");
+        singleEquivMap.put("bfi", "sgn-gb");
+        singleEquivMap.put("bjd", "drl");
+        singleEquivMap.put("bnn", "i-bnn");
+        singleEquivMap.put("bzs", "sgn-br");
+        singleEquivMap.put("cjr", "mom");
+        singleEquivMap.put("cka", "cmr");
+        singleEquivMap.put("cmk", "xch");
+        singleEquivMap.put("cmn-hans", "zh-cmn-hans");
+        singleEquivMap.put("cmn-hant", "zh-cmn-hant");
+        singleEquivMap.put("cmr", "cka");
+        singleEquivMap.put("csn", "sgn-co");
+        singleEquivMap.put("dev", "gav");
+        singleEquivMap.put("drh", "khk");
+        singleEquivMap.put("drl", "bjd");
+        singleEquivMap.put("dse", "sgn-nl");
+        singleEquivMap.put("dsl", "sgn-dk");
+        singleEquivMap.put("fsl", "sgn-fr");
+        singleEquivMap.put("gan", "zh-gan");
+        singleEquivMap.put("gav", "dev");
+        singleEquivMap.put("gsg", "sgn-de");
+        singleEquivMap.put("gss", "sgn-gr");
+        singleEquivMap.put("he", "iw");
+        singleEquivMap.put("hle", "sca");
+        singleEquivMap.put("hrr", "jal");
+        singleEquivMap.put("hsn", "zh-xiang");
+        singleEquivMap.put("i-ami", "ami");
+        singleEquivMap.put("i-bnn", "bnn");
+        singleEquivMap.put("i-klingon", "tlh");
+        singleEquivMap.put("i-lux", "lb");
+        singleEquivMap.put("i-navajo", "nv");
+        singleEquivMap.put("i-pwn", "pwn");
+        singleEquivMap.put("i-tao", "tao");
+        singleEquivMap.put("i-tay", "tay");
+        singleEquivMap.put("i-tsu", "tsu");
+        singleEquivMap.put("ibi", "opa");
+        singleEquivMap.put("id", "in");
+        singleEquivMap.put("in", "id");
+        singleEquivMap.put("ise", "sgn-it");
+        singleEquivMap.put("isg", "sgn-ie");
+        singleEquivMap.put("iw", "he");
+        singleEquivMap.put("jal", "hrr");
+        singleEquivMap.put("jbo", "art-lojban");
+        singleEquivMap.put("ji", "yi");
+        singleEquivMap.put("jsl", "sgn-jp");
+        singleEquivMap.put("jv", "jw");
+        singleEquivMap.put("jw", "jv");
+        singleEquivMap.put("kgh", "kml");
+        singleEquivMap.put("khk", "drh");
+        singleEquivMap.put("kml", "kgh");
+        singleEquivMap.put("lb", "i-lux");
+        singleEquivMap.put("lcq", "ppr");
+        singleEquivMap.put("lrr", "yma");
+        singleEquivMap.put("mfs", "sgn-mx");
+        singleEquivMap.put("mo", "ro");
+        singleEquivMap.put("mom", "cjr");
+        singleEquivMap.put("nan", "zh-min-nan");
+        singleEquivMap.put("nb", "no-bok");
+        singleEquivMap.put("ncs", "sgn-ni");
+        singleEquivMap.put("nn", "no-nyn");
+        singleEquivMap.put("no-bok", "nb");
+        singleEquivMap.put("no-nyn", "nn");
+        singleEquivMap.put("nsl", "sgn-no");
+        singleEquivMap.put("nun", "ayx");
+        singleEquivMap.put("nv", "i-navajo");
+        singleEquivMap.put("opa", "ibi");
+        singleEquivMap.put("ppr", "lcq");
+        singleEquivMap.put("psr", "sgn-pt");
+        singleEquivMap.put("pwn", "i-pwn");
+        singleEquivMap.put("ras", "tie");
+        singleEquivMap.put("ro", "mo");
+        singleEquivMap.put("sca", "hle");
+        singleEquivMap.put("sfb", "sgn-be-fr");
+        singleEquivMap.put("sfs", "sgn-za");
+        singleEquivMap.put("sgg", "sgn-ch-de");
+        singleEquivMap.put("sgn-be-fr", "sfb");
+        singleEquivMap.put("sgn-be-nl", "vgt");
+        singleEquivMap.put("sgn-br", "bzs");
+        singleEquivMap.put("sgn-ch-de", "sgg");
+        singleEquivMap.put("sgn-co", "csn");
+        singleEquivMap.put("sgn-de", "gsg");
+        singleEquivMap.put("sgn-dk", "dsl");
+        singleEquivMap.put("sgn-es", "ssp");
+        singleEquivMap.put("sgn-fr", "fsl");
+        singleEquivMap.put("sgn-gb", "bfi");
+        singleEquivMap.put("sgn-gr", "gss");
+        singleEquivMap.put("sgn-ie", "isg");
+        singleEquivMap.put("sgn-it", "ise");
+        singleEquivMap.put("sgn-jp", "jsl");
+        singleEquivMap.put("sgn-mx", "mfs");
+        singleEquivMap.put("sgn-ni", "ncs");
+        singleEquivMap.put("sgn-nl", "dse");
+        singleEquivMap.put("sgn-no", "nsl");
+        singleEquivMap.put("sgn-pt", "psr");
+        singleEquivMap.put("sgn-se", "swl");
+        singleEquivMap.put("sgn-us", "ase");
+        singleEquivMap.put("sgn-za", "sfs");
+        singleEquivMap.put("ssp", "sgn-es");
+        singleEquivMap.put("swl", "sgn-se");
+        singleEquivMap.put("tao", "i-tao");
+        singleEquivMap.put("tay", "i-tay");
+        singleEquivMap.put("tie", "ras");
+        singleEquivMap.put("tkk", "twm");
+        singleEquivMap.put("tlh", "i-klingon");
+        singleEquivMap.put("tlw", "weo");
+        singleEquivMap.put("tsu", "i-tsu");
+        singleEquivMap.put("twm", "tkk");
+        singleEquivMap.put("vgt", "sgn-be-nl");
+        singleEquivMap.put("weo", "tlw");
+        singleEquivMap.put("wuu", "zh-wuu");
+        singleEquivMap.put("xch", "cmk");
+        singleEquivMap.put("yi", "ji");
+        singleEquivMap.put("yma", "lrr");
+        singleEquivMap.put("yue", "zh-yue");
+        singleEquivMap.put("zh-cmn-hans", "cmn-hans");
+        singleEquivMap.put("zh-cmn-hant", "cmn-hant");
+        singleEquivMap.put("zh-gan", "gan");
+        singleEquivMap.put("zh-min-nan", "nan");
+        singleEquivMap.put("zh-wuu", "wuu");
+        singleEquivMap.put("zh-xiang", "hsn");
+        singleEquivMap.put("zh-yue", "yue");
+
+        multiEquivsMap.put("ccq", new String[] {"rki", "ybd"});
+        multiEquivsMap.put("cmn", new String[] {"zh-guoyu", "zh-cmn"});
+        multiEquivsMap.put("drw", new String[] {"prs", "tnf"});
+        multiEquivsMap.put("hak", new String[] {"i-hak", "zh-hakka"});
+        multiEquivsMap.put("i-hak", new String[] {"hak", "zh-hakka"});
+        multiEquivsMap.put("mry", new String[] {"mst", "myt"});
+        multiEquivsMap.put("mst", new String[] {"mry", "myt"});
+        multiEquivsMap.put("myt", new String[] {"mry", "mst"});
+        multiEquivsMap.put("prs", new String[] {"drw", "tnf"});
+        multiEquivsMap.put("rki", new String[] {"ccq", "ybd"});
+        multiEquivsMap.put("tnf", new String[] {"prs", "drw"});
+        multiEquivsMap.put("ybd", new String[] {"rki", "ccq"});
+        multiEquivsMap.put("zh-cmn", new String[] {"cmn", "zh-guoyu"});
+        multiEquivsMap.put("zh-guoyu", new String[] {"cmn", "zh-cmn"});
+        multiEquivsMap.put("zh-hakka", new String[] {"hak", "i-hak"});
+
+        regionVariantEquivMap.put("-alalc97", "-heploc");
+        regionVariantEquivMap.put("-bu", "-mm");
+        regionVariantEquivMap.put("-cd", "-zr");
+        regionVariantEquivMap.put("-dd", "-de");
+        regionVariantEquivMap.put("-de", "-dd");
+        regionVariantEquivMap.put("-fr", "-fx");
+        regionVariantEquivMap.put("-fx", "-fr");
+        regionVariantEquivMap.put("-heploc", "-alalc97");
+        regionVariantEquivMap.put("-mm", "-bu");
+        regionVariantEquivMap.put("-tl", "-tp");
+        regionVariantEquivMap.put("-tp", "-tl");
+        regionVariantEquivMap.put("-yd", "-ye");
+        regionVariantEquivMap.put("-ye", "-yd");
+        regionVariantEquivMap.put("-zr", "-cd");
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/share/classes/sun/util/locale/LocaleMatcher.java	Thu Oct 11 16:59:50 2012 -0700
@@ -0,0 +1,455 @@
+/*
+ * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package sun.util.locale;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Locale;
+import java.util.Locale.*;
+import static java.util.Locale.FilteringMode.*;
+import static java.util.Locale.LanguageRange.*;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Implementation for BCP47 Locale matching
+ *
+ */
+public final class LocaleMatcher {
+
+    public static List<Locale> filter(List<LanguageRange> priorityList,
+                                      Collection<Locale> locales,
+                                      FilteringMode mode) {
+        if (priorityList.isEmpty() || locales.isEmpty()) {
+            return new ArrayList<>(); // need to return a empty mutable List
+        }
+
+        // Create a list of language tags to be matched.
+        List<String> tags = new ArrayList<>();
+        for (Locale locale : locales) {
+            tags.add(locale.toLanguageTag());
+        }
+
+        // Filter language tags.
+        List<String> filteredTags = filterTags(priorityList, tags, mode);
+
+        // Create a list of matching locales.
+        List<Locale> filteredLocales = new ArrayList<>(filteredTags.size());
+        for (String tag : filteredTags) {
+              filteredLocales.add(Locale.forLanguageTag(tag));
+        }
+
+        return filteredLocales;
+    }
+
+    public static List<String> filterTags(List<LanguageRange> priorityList,
+                                          Collection<String> tags,
+                                          FilteringMode mode) {
+        if (priorityList.isEmpty() || tags.isEmpty()) {
+            return new ArrayList<>(); // need to return a empty mutable List
+        }
+
+        ArrayList<LanguageRange> list;
+        if (mode == EXTENDED_FILTERING) {
+            return filterExtended(priorityList, tags);
+        } else {
+            list = new ArrayList<>();
+            for (LanguageRange lr : priorityList) {
+                String range = lr.getRange();
+                if (range.startsWith("*-")
+                    || range.indexOf("-*") != -1) { // Extended range
+                    if (mode == AUTOSELECT_FILTERING) {
+                        return filterExtended(priorityList, tags);
+                    } else if (mode == MAP_EXTENDED_RANGES) {
+                        if (range.charAt(0) == '*') {
+                            range = "*";
+                        } else {
+                            range = range.replaceAll("-[*]", "");
+                        }
+                        list.add(new LanguageRange(range, lr.getWeight()));
+                    } else if (mode == REJECT_EXTENDED_RANGES) {
+                        throw new IllegalArgumentException("An extended range \""
+                                      + range
+                                      + "\" found in REJECT_EXTENDED_RANGES mode.");
+                    }
+                } else { // Basic range
+                    list.add(lr);
+                }
+            }
+
+            return filterBasic(list, tags);
+        }
+    }
+
+    private static List<String> filterBasic(List<LanguageRange> priorityList,
+                                            Collection<String> tags) {
+        List<String> list = new ArrayList<>();
+        for (LanguageRange lr : priorityList) {
+            String range = lr.getRange();
+            if (range.equals("*")) {
+                return new ArrayList<String>(tags);
+            } else {
+                for (String tag : tags) {
+                    tag = tag.toLowerCase();
+                    if (tag.startsWith(range)) {
+                        int len = range.length();
+                        if ((tag.length() == len || tag.charAt(len) == '-')
+                            && !list.contains(tag)) {
+                            list.add(tag);
+                        }
+                    }
+                }
+            }
+        }
+
+        return list;
+    }
+
+    private static List<String> filterExtended(List<LanguageRange> priorityList,
+                                               Collection<String> tags) {
+        List<String> list = new ArrayList<>();
+        for (LanguageRange lr : priorityList) {
+            String range = lr.getRange();
+            if (range.equals("*")) {
+                return new ArrayList<String>(tags);
+            }
+            String[] rangeSubtags = range.split("-");
+            for (String tag : tags) {
+                tag = tag.toLowerCase();
+                String[] tagSubtags = tag.split("-");
+                if (!rangeSubtags[0].equals(tagSubtags[0])
+                    && !rangeSubtags[0].equals("*")) {
+                    continue;
+                }
+
+                int rangeIndex = 1;
+                int tagIndex = 1;
+
+                while (rangeIndex < rangeSubtags.length
+                       && tagIndex < tagSubtags.length) {
+                   if (rangeSubtags[rangeIndex].equals("*")) {
+                       rangeIndex++;
+                   } else if (rangeSubtags[rangeIndex].equals(tagSubtags[tagIndex])) {
+                       rangeIndex++;
+                       tagIndex++;
+                   } else if (tagSubtags[tagIndex].length() == 1
+                              && !tagSubtags[tagIndex].equals("*")) {
+                       break;
+                   } else {
+                       tagIndex++;
+                   }
+               }
+
+               if (rangeSubtags.length == rangeIndex && !list.contains(tag)) {
+                   list.add(tag);
+               }
+            }
+        }
+
+        return list;
+    }
+
+    public static Locale lookup(List<LanguageRange> priorityList,
+                                Collection<Locale> locales) {
+        if (priorityList.isEmpty() || locales.isEmpty()) {
+            return null;
+        }
+
+        // Create a list of language tags to be matched.
+        List<String> tags = new ArrayList<>();
+        for (Locale locale : locales) {
+            tags.add(locale.toLanguageTag());
+        }
+
+        // Look up a language tags.
+        String lookedUpTag = lookupTag(priorityList, tags);
+
+        if (lookedUpTag == null) {
+            return null;
+        } else {
+            return Locale.forLanguageTag(lookedUpTag);
+        }
+    }
+
+    public static String lookupTag(List<LanguageRange> priorityList,
+                                   Collection<String> tags) {
+        if (priorityList.isEmpty() || tags.isEmpty()) {
+            return null;
+        }
+
+        for (LanguageRange lr : priorityList) {
+            String range = lr.getRange();
+
+            // Special language range ("*") is ignored in lookup.
+            if (range.equals("*")) {
+                continue;
+            }
+
+            String rangeForRegex = range.replaceAll("\\x2A", "\\\\p{Alnum}*");
+            while (rangeForRegex.length() > 0) {
+                for (String tag : tags) {
+                    tag = tag.toLowerCase();
+                    if (tag.matches(rangeForRegex)) {
+                        return tag;
+                    }
+                }
+
+                // Truncate from the end....
+                int index = rangeForRegex.lastIndexOf('-');
+                if (index >= 0) {
+                    rangeForRegex = rangeForRegex.substring(0, index);
+
+                    // if range ends with an extension key, truncate it.
+                    if (rangeForRegex.lastIndexOf('-') == rangeForRegex.length()-2) {
+                        rangeForRegex =
+                            rangeForRegex.substring(0, rangeForRegex.length()-2);
+                    }
+                } else {
+                    rangeForRegex = "";
+                }
+            }
+        }
+
+        return null;
+    }
+
+    public static List<LanguageRange> parse(String ranges) {
+        ranges = ranges.replaceAll(" ", "").toLowerCase();
+        if (ranges.startsWith("accept-language:")) {
+            ranges = ranges.substring(16); // delete unnecessary prefix
+        }
+
+        String[] langRanges = ranges.split(",");
+        List<LanguageRange> list = new ArrayList<>(langRanges.length);
+        List<String> tempList = new ArrayList<>();
+        int numOfRanges = 0;
+
+        for (String range : langRanges) {
+            int index;
+            String r;
+            double w;
+
+            if ((index = range.indexOf(";q=")) == -1) {
+                r = range;
+                w = MAX_WEIGHT;
+            } else {
+                r = range.substring(0, index);
+                index += 3;
+                try {
+                    w = Double.parseDouble(range.substring(index));
+                }
+                catch (Exception e) {
+                    throw new IllegalArgumentException("weight=\""
+                                  + range.substring(index)
+                                  + "\" for language range \"" + r + "\"");
+                }
+
+                if (w < MIN_WEIGHT || w > MAX_WEIGHT) {
+                    throw new IllegalArgumentException("weight=" + w
+                                  + " for language range \"" + r
+                                  + "\". It must be between " + MIN_WEIGHT
+                                  + " and " + MAX_WEIGHT + ".");
+                }
+            }
+
+            if (!tempList.contains(r)) {
+                LanguageRange lr = new LanguageRange(r, w);
+                index = numOfRanges;
+                for (int j = 0; j < numOfRanges; j++) {
+                    if (list.get(j).getWeight() < w) {
+                        index = j;
+                        break;
+                    }
+                }
+                list.add(index, lr);
+                numOfRanges++;
+                tempList.add(r);
+
+                // Check if the range has an equivalent using IANA LSR data.
+                // If yes, add it to the User's Language Priority List as well.
+
+                // aa-XX -> aa-YY
+                String equivalent;
+                if ((equivalent = getEquivalentForRegionAndVariant(r)) != null
+                    && !tempList.contains(equivalent)) {
+                    list.add(index+1, new LanguageRange(equivalent, w));
+                    numOfRanges++;
+                    tempList.add(equivalent);
+                }
+
+                String[] equivalents;
+                if ((equivalents = getEquivalentsForLanguage(r)) != null) {
+                    for (String equiv: equivalents) {
+                        // aa-XX -> bb-XX(, cc-XX)
+                        if (!tempList.contains(equiv)) {
+                            list.add(index+1, new LanguageRange(equiv, w));
+                            numOfRanges++;
+                            tempList.add(equiv);
+                        }
+
+                        // bb-XX -> bb-YY(, cc-YY)
+                        equivalent = getEquivalentForRegionAndVariant(equiv);
+                        if (equivalent != null
+                            && !tempList.contains(equivalent)) {
+                            list.add(index+1, new LanguageRange(equivalent, w));
+                            numOfRanges++;
+                            tempList.add(equivalent);
+                        }
+                    }
+                }
+            }
+        }
+
+        return list;
+    }
+
+    private static String[] getEquivalentsForLanguage(String range) {
+        String r = range;
+
+        while (r.length() > 0) {
+            if (LocaleEquivalentMaps.singleEquivMap.containsKey(r)) {
+                String equiv = LocaleEquivalentMaps.singleEquivMap.get(r);
+                // Return immediately for performance if the first matching
+                // subtag is found.
+                return new String[] {range.replaceFirst(r, equiv)};
+            } else if (LocaleEquivalentMaps.multiEquivsMap.containsKey(r)) {
+                String[] equivs = LocaleEquivalentMaps.multiEquivsMap.get(r);
+                for (int i = 0; i < equivs.length; i++) {
+                    equivs[i] = range.replaceFirst(r, equivs[i]);
+                }
+                return equivs;
+            }
+
+            // Truncate the last subtag simply.
+            int index = r.lastIndexOf('-');
+            if (index == -1) {
+                break;
+            }
+            r = r.substring(0, index);
+        }
+
+        return null;
+    }
+
+    private static String getEquivalentForRegionAndVariant(String range) {
+        int extensionKeyIndex = getExtentionKeyIndex(range);
+
+        for (String subtag : LocaleEquivalentMaps.regionVariantEquivMap.keySet()) {
+            int index;
+            if ((index = range.indexOf(subtag)) != -1) {
+                // Check if the matching text is a valid region or variant.
+                if (extensionKeyIndex != Integer.MIN_VALUE
+                    && index > extensionKeyIndex) {
+                    continue;
+                }
+
+                int len = index + subtag.length();
+                if (range.length() == len || range.charAt(len) == '-') {
+                    return range.replaceFirst(subtag, LocaleEquivalentMaps.regionVariantEquivMap.get(subtag));
+                }
+            }
+        }
+
+        return null;
+    }
+
+    private static int getExtentionKeyIndex(String s) {
+        char[] c = s.toCharArray();
+        int index = Integer.MIN_VALUE;
+        for (int i = 1; i < c.length; i++) {
+            if (c[i] == '-') {
+                if (i - index == 2) {
+                    return index;
+                } else {
+                    index = i;
+                }
+            }
+        }
+        return Integer.MIN_VALUE;
+    }
+
+    public static List<LanguageRange> mapEquivalents(
+                                          List<LanguageRange>priorityList,
+                                          Map<String, List<String>> map) {
+        if (priorityList.isEmpty()) {
+            return new ArrayList<>(); // need to return a empty mutable List
+        }
+        if (map == null || map.isEmpty()) {
+            return new ArrayList<LanguageRange>(priorityList);
+        }
+
+        // Create a map, key=originalKey.toLowerCaes(), value=originalKey
+        Map<String, String> keyMap = new HashMap<>();
+        for (String key : map.keySet()) {
+            keyMap.put(key.toLowerCase(), key);
+        }
+
+        List<LanguageRange> list = new ArrayList<>();
+        for (LanguageRange lr : priorityList) {
+            String range = lr.getRange();
+            String r = range;
+            boolean hasEquivalent = false;
+
+            while (r.length() > 0) {
+                if (keyMap.containsKey(r)) {
+                    hasEquivalent = true;
+                    List<String> equivalents = map.get(keyMap.get(r));
+                    if (equivalents != null) {
+                        int len = r.length();
+                        for (String equivalent : equivalents) {
+                            list.add(new LanguageRange(equivalent.toLowerCase()
+                                     + range.substring(len),
+                                     lr.getWeight()));
+                        }
+                    }
+                    // Return immediately if the first matching subtag is found.
+                    break;
+                }
+
+                // Truncate the last subtag simply.
+                int index = r.lastIndexOf('-');
+                if (index == -1) {
+                    break;
+                }
+                r = r.substring(0, index);
+            }
+
+            if (!hasEquivalent) {
+                list.add(lr);
+            }
+        }
+
+        return list;
+    }
+
+    private LocaleMatcher() {}
+
+}
--- a/jdk/src/share/classes/sun/util/locale/provider/CalendarDataProviderImpl.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/share/classes/sun/util/locale/provider/CalendarDataProviderImpl.java	Thu Oct 11 16:59:50 2012 -0700
@@ -137,7 +137,7 @@
 
     @Override
     public boolean isSupportedLocale(Locale locale) {
-        if (locale == Locale.ROOT) {
+        if (Locale.ROOT.equals(locale)) {
             return true;
         }
         String calendarType = null;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/share/classes/sun/util/locale/provider/FallbackLocaleProviderAdapter.java	Thu Oct 11 16:59:50 2012 -0700
@@ -0,0 +1,42 @@
+/*
+ * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package sun.util.locale.provider;
+
+/**
+ * FallbackProviderAdapter implementation.
+ *
+ * @author Naoto Sato
+ */
+public class FallbackLocaleProviderAdapter extends JRELocaleProviderAdapter {
+
+    /**
+     * Returns the type of this LocaleProviderAdapter
+     */
+    @Override
+    public LocaleProviderAdapter.Type getAdapterType() {
+        return Type.FALLBACK;
+    }
+}
--- a/jdk/src/share/classes/sun/util/locale/provider/JRELocaleProviderAdapter.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/share/classes/sun/util/locale/provider/JRELocaleProviderAdapter.java	Thu Oct 11 16:59:50 2012 -0700
@@ -71,7 +71,7 @@
      */
     @Override
     public LocaleProviderAdapter.Type getAdapterType() {
-        return LocaleProviderAdapter.Type.JRE;
+        return Type.JRE;
     }
 
     /**
@@ -125,7 +125,7 @@
     public BreakIteratorProvider getBreakIteratorProvider() {
         if (breakIteratorProvider == null) {
             BreakIteratorProvider provider = new BreakIteratorProviderImpl(getAdapterType(),
-                                                            getLanguateTagSet("FormatData"));
+                                                            getLanguageTagSet("FormatData"));
             synchronized (this) {
                 if (breakIteratorProvider == null) {
                     breakIteratorProvider = provider;
@@ -139,7 +139,7 @@
     public CollatorProvider getCollatorProvider() {
         if (collatorProvider == null) {
             CollatorProvider provider = new CollatorProviderImpl(getAdapterType(),
-                                                getLanguateTagSet("CollationData"));
+                                                getLanguageTagSet("CollationData"));
             synchronized (this) {
                 if (collatorProvider == null) {
                     collatorProvider = provider;
@@ -153,7 +153,7 @@
     public DateFormatProvider getDateFormatProvider() {
         if (dateFormatProvider == null) {
             DateFormatProvider provider = new DateFormatProviderImpl(getAdapterType(),
-                                                    getLanguateTagSet("FormatData"));
+                                                    getLanguageTagSet("FormatData"));
             synchronized (this) {
                 if (dateFormatProvider == null) {
                     dateFormatProvider = provider;
@@ -167,7 +167,7 @@
     public DateFormatSymbolsProvider getDateFormatSymbolsProvider() {
         if (dateFormatSymbolsProvider == null) {
             DateFormatSymbolsProvider provider = new DateFormatSymbolsProviderImpl(getAdapterType(),
-                                                                getLanguateTagSet("FormatData"));
+                                                                getLanguageTagSet("FormatData"));
             synchronized (this) {
                 if (dateFormatSymbolsProvider == null) {
                     dateFormatSymbolsProvider = provider;
@@ -180,7 +180,7 @@
     @Override
     public DecimalFormatSymbolsProvider getDecimalFormatSymbolsProvider() {
         if (decimalFormatSymbolsProvider == null) {
-            DecimalFormatSymbolsProvider provider = new DecimalFormatSymbolsProviderImpl(getAdapterType(), getLanguateTagSet("FormatData"));
+            DecimalFormatSymbolsProvider provider = new DecimalFormatSymbolsProviderImpl(getAdapterType(), getLanguageTagSet("FormatData"));
             synchronized (this) {
                 if (decimalFormatSymbolsProvider == null) {
                     decimalFormatSymbolsProvider = provider;
@@ -194,7 +194,7 @@
     public NumberFormatProvider getNumberFormatProvider() {
         if (numberFormatProvider == null) {
             NumberFormatProvider provider = new NumberFormatProviderImpl(getAdapterType(),
-                                                        getLanguateTagSet("FormatData"));
+                                                        getLanguageTagSet("FormatData"));
             synchronized (this) {
                 if (numberFormatProvider == null) {
                     numberFormatProvider = provider;
@@ -211,7 +211,7 @@
     public CurrencyNameProvider getCurrencyNameProvider() {
         if (currencyNameProvider == null) {
             CurrencyNameProvider provider = new CurrencyNameProviderImpl(getAdapterType(),
-                                            getLanguateTagSet("CurrencyNames"));
+                                            getLanguageTagSet("CurrencyNames"));
             synchronized (this) {
                 if (currencyNameProvider == null) {
                     currencyNameProvider = provider;
@@ -225,7 +225,7 @@
     public LocaleNameProvider getLocaleNameProvider() {
         if (localeNameProvider == null) {
             LocaleNameProvider provider = new LocaleNameProviderImpl(getAdapterType(),
-                                                    getLanguateTagSet("LocaleNames"));
+                                                    getLanguageTagSet("LocaleNames"));
             synchronized (this) {
                 if (localeNameProvider == null) {
                     localeNameProvider = provider;
@@ -239,7 +239,7 @@
     public TimeZoneNameProvider getTimeZoneNameProvider() {
         if (timeZoneNameProvider == null) {
             TimeZoneNameProvider provider = new TimeZoneNameProviderImpl(getAdapterType(),
-                                                    getLanguateTagSet("TimeZoneNames"));
+                                                    getLanguageTagSet("TimeZoneNames"));
             synchronized (this) {
                 if (timeZoneNameProvider == null) {
                     timeZoneNameProvider = provider;
@@ -253,8 +253,8 @@
     public CalendarDataProvider getCalendarDataProvider() {
         if (calendarDataProvider == null) {
             Set<String> set = new HashSet<>();
-            set.addAll(getLanguateTagSet("FormatData"));
-            set.addAll(getLanguateTagSet("CalendarData"));
+            set.addAll(getLanguageTagSet("FormatData"));
+            set.addAll(getLanguageTagSet("CalendarData"));
             CalendarDataProvider provider = new CalendarDataProviderImpl(getAdapterType(),
                                                                          set);
             synchronized (this) {
@@ -302,7 +302,7 @@
         return AvailableJRELocales.localeList.clone();
     }
 
-    public Set<String> getLanguateTagSet(String category) {
+    public Set<String> getLanguageTagSet(String category) {
         Set<String> tagset = langtagSets.get(category);
         if (tagset == null) {
             tagset = createLanguageTagSet(category);
@@ -328,6 +328,10 @@
             }
             tagset.add(token);
         }
+
+        // ensure en-US is there (mandated by the spec, e.g. Collator.getAvailableLocales())
+        tagset.add("en-US");
+
         return tagset;
     }
 
--- a/jdk/src/share/classes/sun/util/locale/provider/LocaleProviderAdapter.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/share/classes/sun/util/locale/provider/LocaleProviderAdapter.java	Thu Oct 11 16:59:50 2012 -0700
@@ -59,7 +59,8 @@
         JRE("sun.util.resources", "sun.text.resources"),
         CLDR("sun.util.resources.cldr", "sun.text.resources.cldr"),
         SPI,
-        HOST;
+        HOST,
+        FALLBACK("sun.util.resources", "sun.text.resources");
 
         private final String UTIL_RESOURCES_PACKAGE;
         private final String TEXT_RESOURCES_PACKAGE;
@@ -111,41 +112,49 @@
      */
     private static LocaleProviderAdapter hostLocaleProviderAdapter = null;
 
+    /**
+     * FALLBACK Locale Data Adapter instance. It's basically the same with JRE, but only kicks
+     * in for the root locale.
+     */
+    private static LocaleProviderAdapter fallbackLocaleProviderAdapter = null;
+
     static {
         String order = AccessController.doPrivileged(
                            new sun.security.action.GetPropertyAction("java.locale.providers"));
-                    // Override adapterPreference with the properties one
-                    if (order != null && order.length() != 0) {
-                        String[] types = order.split(",");
-                        List<Type> typeList = new ArrayList<>();
-                        for (String type : types) {
-                            try {
-                            Type aType = Type.valueOf(type.trim().toUpperCase(Locale.ROOT));
+        // Override adapterPreference with the properties one
+        if (order != null && order.length() != 0) {
+            String[] types = order.split(",");
+            List<Type> typeList = new ArrayList<>();
+            for (String type : types) {
+                try {
+                    Type aType = Type.valueOf(type.trim().toUpperCase(Locale.ROOT));
 
-                                // load adapter if necessary
-                                switch (aType) {
-                                case CLDR:
-                        cldrLocaleProviderAdapter = new CLDRLocaleProviderAdapter();
-                                    break;
-                                case HOST:
-                        hostLocaleProviderAdapter = new HostLocaleProviderAdapter();
-                                    break;
-                                }
-                                typeList.add(aType);
-                } catch (// could be caused by the user specifying wrong
-                                     // provider name or format in the system property
-                                     IllegalArgumentException |
-                                     UnsupportedOperationException e) {
-                                LocaleServiceProviderPool.config(LocaleProviderAdapter.class, e.toString());
-                            }
-                        }
+                    // load adapter if necessary
+                    switch (aType) {
+                        case CLDR:
+                            cldrLocaleProviderAdapter = new CLDRLocaleProviderAdapter();
+                            break;
+                        case HOST:
+                            hostLocaleProviderAdapter = new HostLocaleProviderAdapter();
+                            break;
+                    }
+                    typeList.add(aType);
+                } catch (IllegalArgumentException | UnsupportedOperationException e) {
+                    // could be caused by the user specifying wrong
+                    // provider name or format in the system property
+                    LocaleServiceProviderPool.config(LocaleProviderAdapter.class, e.toString());
+                }
+            }
 
-                        if (!typeList.contains(Type.JRE)) {
-                            // Append JRE as the last resort.
-                            typeList.add(Type.JRE);
-                        }
-                        adapterPreference = typeList.toArray(new Type[0]);
-                    }
+            if (!typeList.isEmpty()) {
+                if (!typeList.contains(Type.JRE)) {
+                    // Append FALLBACK as the last resort.
+                    fallbackLocaleProviderAdapter = new FallbackLocaleProviderAdapter();
+                    typeList.add(Type.FALLBACK);
+                }
+                adapterPreference = typeList.toArray(new Type[0]);
+            }
+        }
     }
 
 
@@ -162,6 +171,8 @@
             return spiLocaleProviderAdapter;
         case HOST:
             return hostLocaleProviderAdapter;
+        case FALLBACK:
+            return fallbackLocaleProviderAdapter;
         default:
             throw new InternalError("unknown locale data adapter type");
         }
@@ -173,7 +184,7 @@
 
     public static LocaleProviderAdapter getResourceBundleBased() {
         for (Type type : getAdapterPreference()) {
-            if (type == Type.JRE || type == Type.CLDR) {
+            if (type == Type.JRE || type == Type.CLDR || type == Type.FALLBACK) {
                 return forType(type);
             }
         }
@@ -218,8 +229,8 @@
             }
         }
 
-        // returns the adapter for JRE as the last resort
-        return jreLocaleProviderAdapter;
+        // returns the adapter for FALLBACK as the last resort
+        return fallbackLocaleProviderAdapter;
     }
 
     private static LocaleProviderAdapter findAdapter(Class<? extends LocaleServiceProvider> providerClass,
@@ -238,18 +249,24 @@
 
     /**
      * A utility method for implementing the default LocaleServiceProvider.isSupportedLocale
-     * for the JRE and CLDR adapters.
+     * for the JRE, CLDR, and FALLBACK adapters.
      */
     static boolean isSupportedLocale(Locale locale, LocaleProviderAdapter.Type type, Set<String> langtags) {
-        assert type == Type.JRE || type == Type.CLDR;
-        if (locale == Locale.ROOT) {
+        assert type == Type.JRE || type == Type.CLDR || type == Type.FALLBACK;
+        if (Locale.ROOT.equals(locale)) {
             return true;
         }
+
+        if (type == Type.FALLBACK) {
+            // no other locales except ROOT are supported for FALLBACK
+            return false;
+        }
+
         locale = locale.stripExtensions();
         if (langtags.contains(locale.toLanguageTag())) {
             return true;
         }
-        if (type == LocaleProviderAdapter.Type.JRE) {
+        if (type == Type.JRE) {
             String oldname = locale.toString().replace('_', '-');
             return langtags.contains(oldname);
         }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/share/classes/sun/util/spi/XmlPropertiesProvider.java	Thu Oct 11 16:59:50 2012 -0700
@@ -0,0 +1,86 @@
+/*
+ * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package sun.util.spi;
+
+import java.util.Properties;
+import java.util.InvalidPropertiesFormatException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.IOException;
+
+/**
+ * Service-provider class for loading and storing {@link Properites} in XML
+ * format.
+ *
+ * @see Properties#loadFromXML
+ * @see Properties#storeToXML
+ */
+
+public abstract class XmlPropertiesProvider {
+
+    /**
+     * Initializes a new instance of this class.
+     */
+    protected XmlPropertiesProvider() {
+        // do nothing for now
+    }
+
+    /**
+     * Loads all of the properties represented by the XML document on the
+     * specified input stream into a properties table.
+     *
+     * @param props the properties table to populate
+     * @param in the input stream from which to read the XML document
+     * @throws IOException if reading from the specified input stream fails
+     * @throws InvalidPropertiesFormatException Data on input stream does not
+     *         constitute a valid XML document with the mandated document type.
+     *
+     * @see Properties#loadFromXML
+     */
+    public abstract void load(Properties props, InputStream in)
+        throws IOException, InvalidPropertiesFormatException;
+
+    /**
+     * Emits an XML document representing all of the properties in a given
+     * table.
+     *
+     * @param props the properies to store
+     * @param out the output stream on which to emit the XML document.
+     * @param comment  a description of the property list, can be @{code null}
+     * @param encoding the name of a supported character encoding
+     *
+     * @throws IOException if writing to the specified output stream fails
+     * @throws NullPointerException if {@code out} is null.
+     * @throws ClassCastException  if this {@code Properties} object
+     *         contains any keys or values that are not
+     *         {@code Strings}.
+     *
+     * @see Properties#storeToXML
+     */
+    public abstract void store(Properties props, OutputStream out,
+                               String comment, String encoding)
+        throws IOException;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/share/classes/sun/util/xml/META-INF/services/sun.util.spi.XmlPropertiesProvider	Thu Oct 11 16:59:50 2012 -0700
@@ -0,0 +1,1 @@
+sun.util.xml.PlatformXmlPropertiesProvider
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/share/classes/sun/util/xml/PlatformXmlPropertiesProvider.java	Thu Oct 11 16:59:50 2012 -0700
@@ -0,0 +1,207 @@
+/*
+ * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package sun.util.xml;
+
+import java.io.*;
+import java.util.*;
+import org.xml.sax.*;
+import org.w3c.dom.*;
+import javax.xml.parsers.*;
+import javax.xml.transform.*;
+import javax.xml.transform.dom.*;
+import javax.xml.transform.stream.*;
+
+import sun.util.spi.XmlPropertiesProvider;
+
+/**
+ * A {@code XmlPropertiesProvider} implementation that uses the JAXP API
+ * for parsing.
+ *
+ * @author  Michael McCloskey
+ * @since   1.3
+ */
+public class PlatformXmlPropertiesProvider extends XmlPropertiesProvider {
+
+    // XML loading and saving methods for Properties
+
+    // The required DTD URI for exported properties
+    private static final String PROPS_DTD_URI =
+    "http://java.sun.com/dtd/properties.dtd";
+
+    private static final String PROPS_DTD =
+    "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
+    "<!-- DTD for properties -->"                +
+    "<!ELEMENT properties ( comment?, entry* ) >"+
+    "<!ATTLIST properties"                       +
+        " version CDATA #FIXED \"1.0\">"         +
+    "<!ELEMENT comment (#PCDATA) >"              +
+    "<!ELEMENT entry (#PCDATA) >"                +
+    "<!ATTLIST entry "                           +
+        " key CDATA #REQUIRED>";
+
+    /**
+     * Version number for the format of exported properties files.
+     */
+    private static final String EXTERNAL_XML_VERSION = "1.0";
+
+    @Override
+    public void load(Properties props, InputStream in)
+        throws IOException, InvalidPropertiesFormatException
+    {
+        Document doc = null;
+        try {
+            doc = getLoadingDoc(in);
+        } catch (SAXException saxe) {
+            throw new InvalidPropertiesFormatException(saxe);
+        }
+        Element propertiesElement = doc.getDocumentElement();
+        String xmlVersion = propertiesElement.getAttribute("version");
+        if (xmlVersion.compareTo(EXTERNAL_XML_VERSION) > 0)
+            throw new InvalidPropertiesFormatException(
+                "Exported Properties file format version " + xmlVersion +
+                " is not supported. This java installation can read" +
+                " versions " + EXTERNAL_XML_VERSION + " or older. You" +
+                " may need to install a newer version of JDK.");
+        importProperties(props, propertiesElement);
+    }
+
+    static Document getLoadingDoc(InputStream in)
+        throws SAXException, IOException
+    {
+        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
+        dbf.setIgnoringElementContentWhitespace(true);
+        dbf.setValidating(true);
+        dbf.setCoalescing(true);
+        dbf.setIgnoringComments(true);
+        try {
+            DocumentBuilder db = dbf.newDocumentBuilder();
+            db.setEntityResolver(new Resolver());
+            db.setErrorHandler(new EH());
+            InputSource is = new InputSource(in);
+            return db.parse(is);
+        } catch (ParserConfigurationException x) {
+            throw new Error(x);
+        }
+    }
+
+    static void importProperties(Properties props, Element propertiesElement) {
+        NodeList entries = propertiesElement.getChildNodes();
+        int numEntries = entries.getLength();
+        int start = numEntries > 0 &&
+            entries.item(0).getNodeName().equals("comment") ? 1 : 0;
+        for (int i=start; i<numEntries; i++) {
+            Element entry = (Element)entries.item(i);
+            if (entry.hasAttribute("key")) {
+                Node n = entry.getFirstChild();
+                String val = (n == null) ? "" : n.getNodeValue();
+                props.setProperty(entry.getAttribute("key"), val);
+            }
+        }
+    }
+
+    @Override
+    public void store(Properties props, OutputStream os, String comment,
+                      String encoding)
+        throws IOException
+    {
+        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
+        DocumentBuilder db = null;
+        try {
+            db = dbf.newDocumentBuilder();
+        } catch (ParserConfigurationException pce) {
+            assert(false);
+        }
+        Document doc = db.newDocument();
+        Element properties =  (Element)
+            doc.appendChild(doc.createElement("properties"));
+
+        if (comment != null) {
+            Element comments = (Element)properties.appendChild(
+                doc.createElement("comment"));
+            comments.appendChild(doc.createTextNode(comment));
+        }
+
+        synchronized (props) {
+            for (String key : props.stringPropertyNames()) {
+                Element entry = (Element)properties.appendChild(
+                    doc.createElement("entry"));
+                entry.setAttribute("key", key);
+                entry.appendChild(doc.createTextNode(props.getProperty(key)));
+            }
+        }
+        emitDocument(doc, os, encoding);
+    }
+
+    static void emitDocument(Document doc, OutputStream os, String encoding)
+        throws IOException
+    {
+        TransformerFactory tf = TransformerFactory.newInstance();
+        Transformer t = null;
+        try {
+            t = tf.newTransformer();
+            t.setOutputProperty(OutputKeys.DOCTYPE_SYSTEM, PROPS_DTD_URI);
+            t.setOutputProperty(OutputKeys.INDENT, "yes");
+            t.setOutputProperty(OutputKeys.METHOD, "xml");
+            t.setOutputProperty(OutputKeys.ENCODING, encoding);
+        } catch (TransformerConfigurationException tce) {
+            assert(false);
+        }
+        DOMSource doms = new DOMSource(doc);
+        StreamResult sr = new StreamResult(os);
+        try {
+            t.transform(doms, sr);
+        } catch (TransformerException te) {
+            throw new IOException(te);
+        }
+    }
+
+    private static class Resolver implements EntityResolver {
+        public InputSource resolveEntity(String pid, String sid)
+            throws SAXException
+        {
+            if (sid.equals(PROPS_DTD_URI)) {
+                InputSource is;
+                is = new InputSource(new StringReader(PROPS_DTD));
+                is.setSystemId(PROPS_DTD_URI);
+                return is;
+            }
+            throw new SAXException("Invalid system identifier: " + sid);
+        }
+    }
+
+    private static class EH implements ErrorHandler {
+        public void error(SAXParseException x) throws SAXException {
+            throw x;
+        }
+        public void fatalError(SAXParseException x) throws SAXException {
+            throw x;
+        }
+        public void warning(SAXParseException x) throws SAXException {
+            throw x;
+        }
+    }
+
+}
--- a/jdk/src/share/classes/sun/util/xml/XMLUtils.java	Thu Oct 11 09:50:14 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,207 +0,0 @@
-/*
- * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package sun.util.xml;
-
-import java.io.*;
-import java.util.*;
-import org.xml.sax.*;
-import org.xml.sax.helpers.*;
-import org.w3c.dom.*;
-import javax.xml.parsers.*;
-import javax.xml.transform.*;
-import javax.xml.transform.dom.*;
-import javax.xml.transform.stream.*;
-
-/**
- * A class used to aid in Properties load and save in XML. Keeping this
- * code outside of Properties helps reduce the number of classes loaded
- * when Properties is loaded.
- *
- * @author  Michael McCloskey
- * @since   1.3
- */
-public class XMLUtils {
-
-    // XML loading and saving methods for Properties
-
-    // The required DTD URI for exported properties
-    private static final String PROPS_DTD_URI =
-    "http://java.sun.com/dtd/properties.dtd";
-
-    private static final String PROPS_DTD =
-    "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
-    "<!-- DTD for properties -->"                +
-    "<!ELEMENT properties ( comment?, entry* ) >"+
-    "<!ATTLIST properties"                       +
-        " version CDATA #FIXED \"1.0\">"         +
-    "<!ELEMENT comment (#PCDATA) >"              +
-    "<!ELEMENT entry (#PCDATA) >"                +
-    "<!ATTLIST entry "                           +
-        " key CDATA #REQUIRED>";
-
-    /**
-     * Version number for the format of exported properties files.
-     */
-    private static final String EXTERNAL_XML_VERSION = "1.0";
-
-    public static void load(Properties props, InputStream in)
-        throws IOException, InvalidPropertiesFormatException
-    {
-        Document doc = null;
-        try {
-            doc = getLoadingDoc(in);
-        } catch (SAXException saxe) {
-            throw new InvalidPropertiesFormatException(saxe);
-        }
-        Element propertiesElement = doc.getDocumentElement();
-        String xmlVersion = propertiesElement.getAttribute("version");
-        if (xmlVersion.compareTo(EXTERNAL_XML_VERSION) > 0)
-            throw new InvalidPropertiesFormatException(
-                "Exported Properties file format version " + xmlVersion +
-                " is not supported. This java installation can read" +
-                " versions " + EXTERNAL_XML_VERSION + " or older. You" +
-                " may need to install a newer version of JDK.");
-        importProperties(props, propertiesElement);
-    }
-
-    static Document getLoadingDoc(InputStream in)
-        throws SAXException, IOException
-    {
-        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
-        dbf.setIgnoringElementContentWhitespace(true);
-        dbf.setValidating(true);
-        dbf.setCoalescing(true);
-        dbf.setIgnoringComments(true);
-        try {
-            DocumentBuilder db = dbf.newDocumentBuilder();
-            db.setEntityResolver(new Resolver());
-            db.setErrorHandler(new EH());
-            InputSource is = new InputSource(in);
-            return db.parse(is);
-        } catch (ParserConfigurationException x) {
-            throw new Error(x);
-        }
-    }
-
-    static void importProperties(Properties props, Element propertiesElement) {
-        NodeList entries = propertiesElement.getChildNodes();
-        int numEntries = entries.getLength();
-        int start = numEntries > 0 &&
-            entries.item(0).getNodeName().equals("comment") ? 1 : 0;
-        for (int i=start; i<numEntries; i++) {
-            Element entry = (Element)entries.item(i);
-            if (entry.hasAttribute("key")) {
-                Node n = entry.getFirstChild();
-                String val = (n == null) ? "" : n.getNodeValue();
-                props.setProperty(entry.getAttribute("key"), val);
-            }
-        }
-    }
-
-    public static void save(Properties props, OutputStream os, String comment,
-                     String encoding)
-        throws IOException
-    {
-        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
-        DocumentBuilder db = null;
-        try {
-            db = dbf.newDocumentBuilder();
-        } catch (ParserConfigurationException pce) {
-            assert(false);
-        }
-        Document doc = db.newDocument();
-        Element properties =  (Element)
-            doc.appendChild(doc.createElement("properties"));
-
-        if (comment != null) {
-            Element comments = (Element)properties.appendChild(
-                doc.createElement("comment"));
-            comments.appendChild(doc.createTextNode(comment));
-        }
-
-        synchronized (props) {
-            for (String key : props.stringPropertyNames()) {
-                Element entry = (Element)properties.appendChild(
-                    doc.createElement("entry"));
-                entry.setAttribute("key", key);
-                entry.appendChild(doc.createTextNode(props.getProperty(key)));
-            }
-        }
-        emitDocument(doc, os, encoding);
-    }
-
-    static void emitDocument(Document doc, OutputStream os, String encoding)
-        throws IOException
-    {
-        TransformerFactory tf = TransformerFactory.newInstance();
-        Transformer t = null;
-        try {
-            t = tf.newTransformer();
-            t.setOutputProperty(OutputKeys.DOCTYPE_SYSTEM, PROPS_DTD_URI);
-            t.setOutputProperty(OutputKeys.INDENT, "yes");
-            t.setOutputProperty(OutputKeys.METHOD, "xml");
-            t.setOutputProperty(OutputKeys.ENCODING, encoding);
-        } catch (TransformerConfigurationException tce) {
-            assert(false);
-        }
-        DOMSource doms = new DOMSource(doc);
-        StreamResult sr = new StreamResult(os);
-        try {
-            t.transform(doms, sr);
-        } catch (TransformerException te) {
-            IOException ioe = new IOException();
-            ioe.initCause(te);
-            throw ioe;
-        }
-    }
-
-    private static class Resolver implements EntityResolver {
-        public InputSource resolveEntity(String pid, String sid)
-            throws SAXException
-        {
-            if (sid.equals(PROPS_DTD_URI)) {
-                InputSource is;
-                is = new InputSource(new StringReader(PROPS_DTD));
-                is.setSystemId(PROPS_DTD_URI);
-                return is;
-            }
-            throw new SAXException("Invalid system identifier: " + sid);
-        }
-    }
-
-    private static class EH implements ErrorHandler {
-        public void error(SAXParseException x) throws SAXException {
-            throw x;
-        }
-        public void fatalError(SAXParseException x) throws SAXException {
-            throw x;
-        }
-        public void warning(SAXParseException x) throws SAXException {
-            throw x;
-        }
-    }
-
-}
--- a/jdk/src/share/test/pack200/pack.conf	Thu Oct 11 09:50:14 2012 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,31 +0,0 @@
-# Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved.
-# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-#
-# This code is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License version 2 only, as
-# published by the Free Software Foundation.  Oracle designates this
-# particular file as subject to the "Classpath" exception as provided
-# by Oracle in the LICENSE file that accompanied this code.
-#
-# This code is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
-# version 2 for more details (a copy is included in the LICENSE file that
-# accompanied this code).
-#
-# You should have received a copy of the GNU General Public License version
-# 2 along with this work; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
-# or visit www.oracle.com if you need additional information or have any
-# questions.
-#
-#
-# The config file for the packer, define all the test properties here.
-pack.effort=1
-pack.unknown.attribute=error
-pack.deflate.hint=false
-pack.keep.class.order=true
-pack.verbose=1
-
--- a/jdk/src/solaris/classes/sun/java2d/xr/XRDrawImage.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/solaris/classes/sun/java2d/xr/XRDrawImage.java	Thu Oct 11 16:59:50 2012 -0700
@@ -27,6 +27,7 @@
 
 import java.awt.*;
 import java.awt.geom.*;
+import java.awt.image.*;
 
 import sun.java2d.*;
 import sun.java2d.loops.*;
@@ -45,8 +46,8 @@
         SurfaceData srcData = dstData.getSourceSurfaceData(img,
                 SunGraphics2D.TRANSFORM_GENERIC, sg.imageComp, bgColor);
 
-        if (srcData != null && !isBgOperation(srcData, bgColor))  { // TODO: Do we bail out on bgBlits?
-        //      && srcData instanceof XRSurfaceData) {
+        if (srcData != null && !isBgOperation(srcData, bgColor)
+                && interpType <= AffineTransformOp.TYPE_BILINEAR) {
             SurfaceType srcType = srcData.getSurfaceType();
             SurfaceType dstType = dstData.getSurfaceType();
 
--- a/jdk/src/solaris/classes/sun/nio/ch/DevPollArrayWrapper.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/solaris/classes/sun/nio/ch/DevPollArrayWrapper.java	Thu Oct 11 16:59:50 2012 -0700
@@ -68,7 +68,7 @@
     static final short REVENT_OFFSET = 6;
 
     // Special value to indicate that an update should be ignored
-    static final byte  CANCELLED     = (byte)-1;
+    static final byte  IGNORE        = (byte)-1;
 
     // Maximum number of open file descriptors
     static final int   OPEN_MAX      = IOUtil.fdLimit();
@@ -192,15 +192,15 @@
 
             // events are stored as bytes for efficiency reasons
             byte b = (byte)mask;
-            assert (b == mask) && (b != CANCELLED);
+            assert (b == mask) && (b != IGNORE);
             setUpdateEvents(fd, b);
         }
     }
 
     void release(int fd) {
         synchronized (updateLock) {
-            // cancel any pending update for this file descriptor
-            setUpdateEvents(fd, CANCELLED);
+            // ignore any pending update for this file descriptor
+            setUpdateEvents(fd, IGNORE);
 
             // remove from /dev/poll
             if (registered.get(fd)) {
@@ -236,32 +236,40 @@
             while (j < updateCount) {
                 int fd = updateDescriptors[j];
                 short events = getUpdateEvents(fd);
-                boolean isRegistered = registered.get(fd);
+                boolean wasRegistered = registered.get(fd);
 
                 // events = 0 => POLLREMOVE or do-nothing
-                if (events != CANCELLED) {
+                if (events != IGNORE) {
                     if (events == 0) {
-                        if (isRegistered) {
+                        if (wasRegistered) {
                             events = POLLREMOVE;
                             registered.clear(fd);
                         } else {
-                            events = CANCELLED;
+                            events = IGNORE;
                         }
                     } else {
-                        if (!isRegistered) {
+                        if (!wasRegistered) {
                             registered.set(fd);
                         }
                     }
                 }
 
                 // populate pollfd array with updated event
-                if (events != CANCELLED) {
+                if (events != IGNORE) {
+                    // insert POLLREMOVE if changing events
+                    if (wasRegistered && events != POLLREMOVE) {
+                        putPollFD(pollArray, index, fd, POLLREMOVE);
+                        index++;
+                    }
                     putPollFD(pollArray, index, fd, events);
                     index++;
-                    if (index >= NUM_POLLFDS) {
+                    if (index >= (NUM_POLLFDS-1)) {
                         registerMultiple(wfd, pollArray.address(), index);
                         index = 0;
                     }
+
+                    // events for this fd now up to date
+                    setUpdateEvents(fd, IGNORE);
                 }
                 j++;
             }
--- a/jdk/src/solaris/classes/sun/nio/fs/LinuxFileStore.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/solaris/classes/sun/nio/fs/LinuxFileStore.java	Thu Oct 11 16:59:50 2012 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2008, 2012, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -145,6 +145,9 @@
             }
             return xattrEnabled;
         }
+        // POSIX attributes not supported on FAT
+        if (type == PosixFileAttributeView.class && entry().fstype().equals("vfat"))
+            return false;
         return super.supportsFileAttributeView(type);
     }
 
--- a/jdk/src/solaris/native/java/net/Inet4AddressImpl.c	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/solaris/native/java/net/Inet4AddressImpl.c	Thu Oct 11 16:59:50 2012 -0700
@@ -647,9 +647,10 @@
 #ifdef __linux__
         if (errno != EINVAL && errno != EHOSTUNREACH)
           /*
-           * On some Linuxes, when bound to the loopback interface, sendto
-           * will fail and errno will be set to EINVAL or EHOSTUNREACH.
-           * When that happens, don't throw an exception, just return false.
+           * On some Linux versions, when a socket is bound to the loopback
+           * interface, sendto will fail and errno will be set to
+           * EINVAL or EHOSTUNREACH. When that happens, don't throw an
+           * exception, just return false.
            */
 #endif /*__linux__ */
           NET_ThrowNew(env, errno, "Can't send ICMP packet");
@@ -813,9 +814,10 @@
         case EINVAL:
         case EHOSTUNREACH:
           /*
-           * On some Linuxes, when bound to the loopback interface, connect
-           * will fail and errno will be set to EINVAL or EHOSTUNREACH.
-           * When that happens, don't throw an exception, just return false.
+           * On some Linux versions, when a socket is bound to the loopback
+           * interface, connect will fail and errno will be set to EINVAL
+           * or EHOSTUNREACH.  When that happens, don't throw an exception,
+           * just return false.
            */
 #endif /* __linux__ */
           close(fd);
--- a/jdk/src/solaris/native/java/net/Inet6AddressImpl.c	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/solaris/native/java/net/Inet6AddressImpl.c	Thu Oct 11 16:59:50 2012 -0700
@@ -336,13 +336,7 @@
                 }
                 (*env)->SetByteArrayRegion(env, ipaddress, 0, 16,
                                            (jbyte *)&(((struct sockaddr_in6*)iterator->ai_addr)->sin6_addr));
-#ifdef __linux__
-                if (!kernelIsV22()) {
-                    scope = ((struct sockaddr_in6*)iterator->ai_addr)->sin6_scope_id;
-                }
-#else
                 scope = ((struct sockaddr_in6*)iterator->ai_addr)->sin6_scope_id;
-#endif
                 if (scope != 0) { /* zero is default value, no need to set */
                     (*env)->SetIntField(env, iaObj, ia6_scopeidID, scope);
                     (*env)->SetBooleanField(env, iaObj, ia6_scopeidsetID, JNI_TRUE);
@@ -507,8 +501,9 @@
 #ifdef __linux__
         if (errno != EINVAL && errno != EHOSTUNREACH)
           /*
-           * On some Linuxes, when bound to the loopback interface, sendto
-           * will fail and errno will be set to EINVAL or EHOSTUNREACH.
+           * On some Linux versions, when a socket is  bound to the
+           * loopback interface, sendto will fail and errno will be
+           * set to EINVAL or EHOSTUNREACH.
            * When that happens, don't throw an exception, just return false.
            */
 #endif /*__linux__ */
@@ -623,7 +618,7 @@
      * If we can create a RAW socket, then when can use the ICMP ECHO_REQUEST
      * otherwise we'll try a tcp socket to the Echo port (7).
      * Note that this is empiric, and not connecting could mean it's blocked
-     * or the echo servioe has been disabled.
+     * or the echo service has been disabled.
      */
 
     fd = JVM_Socket(AF_INET6, SOCK_RAW, IPPROTO_ICMPV6);
@@ -680,9 +675,10 @@
         case EINVAL:
         case EHOSTUNREACH:
           /*
-           * On some Linuxes, when bound to the loopback interface, connect
-           * will fail and errno will be set to EINVAL or EHOSTUNREACH.
-           * When that happens, don't throw an exception, just return false.
+           * On some Linux versions, when  a socket is bound to the
+           * loopback interface, connect will fail and errno will
+           * be set to EINVAL or EHOSTUNREACH.  When that happens,
+           * don't throw an exception, just return false.
            */
 #endif /* __linux__ */
           close(fd);
--- a/jdk/src/solaris/native/java/net/NetworkInterface.c	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/solaris/native/java/net/NetworkInterface.c	Thu Oct 11 16:59:50 2012 -0700
@@ -769,14 +769,14 @@
         return NULL;
     }
 
-    /* return partial list if exception occure in the middle of process ???*/
+    /* return partial list if an exception occurs in the middle of process ???*/
 
     /*
      * If IPv6 is available then enumerate IPv6 addresses.
      */
 #ifdef AF_INET6
 
-        /* User can disable ipv6 expicitly by -Djava.net.preferIPv4Stack=true,
+        /* User can disable ipv6 explicitly by -Djava.net.preferIPv4Stack=true,
          * so we have to call ipv6_available()
          */
         if (ipv6_available()) {
@@ -887,7 +887,7 @@
     addrP->next = 0;
     if (family == AF_INET) {
       /*
-       * Deal with brodcast addr & subnet mask
+       * Deal with broadcast addr & subnet mask
        */
        struct sockaddr * brdcast_to = (struct sockaddr *) ((char *) addrP + sizeof(netaddr) + addr_size);
        addrP->brdcast = getBroadcast(env, sock, name,  brdcast_to );
@@ -898,7 +898,7 @@
      }
 
     /**
-     * Deal with virtual interface with colon notaion e.g. eth0:1
+     * Deal with virtual interface with colon notation e.g. eth0:1
      */
     name_colonP = strchr(name, ':');
     if (name_colonP != NULL) {
@@ -1327,13 +1327,13 @@
    }
 
      /**
-      * Solaris requires that we have IPv6 socket to query an
-      * interface without IPv4 address - check it here
-      * POSIX 1 require the kernell to return ENOTTY if the call is
-      * unappropriate for device e.g. NETMASK for device having IPv6
-      * only address but not all devices follows the standart so
-      * fallback on any error.  It's not an ecology friendly but more
-      * reliable.
+      * Solaris requires that we have an IPv6 socket to query an
+      * interface without an IPv4 address - check it here.
+      * POSIX 1 require the kernel to return ENOTTY if the call is
+      * inappropriate for a device e.g. the NETMASK for a device having IPv6
+      * only address but not all devices follow the standard so
+      * fall back on any error. It's not an ecologically friendly gesture
+      * but more reliable.
       */
 
     if (! alreadyV6 ){
@@ -1359,7 +1359,7 @@
 
 /*
  * Enumerates and returns all IPv4 interfaces
- * (linux verison)
+ * (linux verision)
  */
 
 static netif *enumIPv4Interfaces(JNIEnv *env, int sock, netif *ifs) {
--- a/jdk/src/solaris/native/java/net/PlainDatagramSocketImpl.c	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/solaris/native/java/net/PlainDatagramSocketImpl.c	Thu Oct 11 16:59:50 2012 -0700
@@ -73,16 +73,6 @@
 static jfieldID pdsi_connectedAddress;
 static jfieldID pdsi_connectedPort;
 
-#ifdef __linux__
-static jboolean isOldKernel;
-#endif
-
-#if defined(__linux__) && defined(AF_INET6)
-static jfieldID pdsi_multicastInterfaceID;
-static jfieldID pdsi_loopbackID;
-static jfieldID pdsi_ttlID;
-#endif
-
 extern void setDefaultScopeID(JNIEnv *env, struct sockaddr *him);
 extern int getDefaultScopeID(JNIEnv *env);
 
@@ -174,41 +164,6 @@
     Java_java_net_Inet6Address_init(env, 0);
     Java_java_net_NetworkInterface_init(env, 0);
 
-#ifdef __linux__
-    /*
-     * We need to determine if this is a 2.2 kernel.
-     */
-    if (uname(&sysinfo) == 0) {
-        sysinfo.release[3] = '\0';
-        isOldKernel = (strcmp(sysinfo.release, "2.2") == 0);
-    } else {
-        /*
-         * uname failed - move to plan B and examine /proc/version
-         * If this fails assume that /proc has changed and that
-         * this must be new /proc format and hence new kernel.
-         */
-        FILE *fP;
-        isOldKernel = JNI_FALSE;
-        if ((fP = fopen("/proc/version", "r")) != NULL) {
-            char ver[25];
-            if (fgets(ver, sizeof(ver), fP) != NULL) {
-                isOldKernel = (strstr(ver, "2.2.") != NULL);
-            }
-            fclose(fP);
-        }
-    }
-
-#ifdef AF_INET6
-    pdsi_multicastInterfaceID = (*env)->GetFieldID(env, cls, "multicastInterface", "I");
-    CHECK_NULL(pdsi_multicastInterfaceID);
-    pdsi_loopbackID = (*env)->GetFieldID(env, cls, "loopbackMode", "Z");
-    CHECK_NULL(pdsi_loopbackID);
-    pdsi_ttlID = (*env)->GetFieldID(env, cls, "ttl", "I");
-    CHECK_NULL(pdsi_ttlID);
-#endif
-
-#endif
-
 }
 
 /*
@@ -257,7 +212,7 @@
         return;
     }
 
-    /* intialize the local port */
+    /* initialize the local port */
     if (localport == 0) {
         /* Now that we're a connected socket, let's extract the port number
          * that the system chose for us and store it in the Socket object.
@@ -308,20 +263,14 @@
       return;
     }
 
-#ifdef __linux__
-    if (isOldKernel) {
-        int t = 0;
-        setsockopt(fd, SOL_SOCKET, SO_BSDCOMPAT, (char*) &t, sizeof(int));
-    } else
-#endif
     setDefaultScopeID(env, (struct sockaddr *)&rmtaddr);
-    {
-        if (JVM_Connect(fd, (struct sockaddr *)&rmtaddr, len) == -1) {
-            NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "ConnectException",
-                            "Connect failed");
-            return;
-        }
+
+    if (JVM_Connect(fd, (struct sockaddr *)&rmtaddr, len) == -1) {
+        NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "ConnectException",
+                        "Connect failed");
+        return;
     }
+
 }
 
 /*
@@ -347,12 +296,6 @@
     fd = (*env)->GetIntField(env, fdObj, IO_fd_fdID);
 
 #if defined(__linux__) || defined(_ALLBSD_SOURCE)
-#ifdef __linux__
-    if (isOldKernel) {
-        int t = 1;
-        setsockopt(fd, SOL_SOCKET, SO_BSDCOMPAT, (char*) &t, sizeof(int));
-    } else {
-#endif /* __linux__ */
         memset(&addr, 0, sizeof(addr));
 #ifdef AF_INET6
         if (ipv6_available()) {
@@ -369,14 +312,10 @@
         JVM_Connect(fd, (struct sockaddr *)&addr, len);
 
 #ifdef __linux__
-        // After disconnecting a UDP socket, Linux kernel will set
-        // local port to zero if the port number comes from implicit
-        // bind. Successive send/recv on the same socket will fail.
-        // So bind again with former port number here.
         int localPort = 0;
-        if (JVM_GetSockName(fd, (struct sockaddr *)&addr, &len) == -1) {
+        if (JVM_GetSockName(fd, (struct sockaddr *)&addr, &len) == -1)
             return;
-        }
+
         localPort = NET_GetPortFromSockaddr((struct sockaddr *)&addr);
         if (localPort == 0) {
             localPort = (*env)->GetIntField(env, this, pdsi_localPortID);
@@ -388,9 +327,10 @@
             {
                 ((struct sockaddr_in*)&addr)->sin_port = htons(localPort);
             }
+
             NET_Bind(fd, (struct sockaddr *)&addr, len);
         }
-    }
+
 #endif
 #else
     JVM_Connect(fd, 0, 0);
@@ -448,11 +388,7 @@
     packetBufferOffset = (*env)->GetIntField(env, packet, dp_offsetID);
     packetBufferLen = (*env)->GetIntField(env, packet, dp_lengthID);
 
-#ifdef __linux__
-    if (connected && !isOldKernel) {
-#else
     if (connected) {
-#endif
         /* arg to NET_Sendto () null in this case */
         len = 0;
         rmtaddrP = 0;
@@ -466,14 +402,14 @@
 
     if (packetBufferLen > MAX_BUFFER_LEN) {
         /* When JNI-ifying the JDK's IO routines, we turned
-         * read's and write's of byte arrays of size greater
+         * reads and writes of byte arrays of size greater
          * than 2048 bytes into several operations of size 2048.
          * This saves a malloc()/memcpy()/free() for big
          * buffers.  This is OK for file IO and TCP, but that
          * strategy violates the semantics of a datagram protocol.
          * (one big send) != (several smaller sends).  So here
-         * we *must* alloc the buffer.  Note it needn't be bigger
-         * than 65,536 (0xFFFF) the max size of an IP packet.
+         * we *must* allocate the buffer.  Note it needn't be bigger
+         * than 65,536 (0xFFFF), the max size of an IP packet.
          * Anything bigger should be truncated anyway.
          *
          * We may want to use a smarter allocation scheme at some
@@ -621,7 +557,7 @@
 #else
     family = AF_INET;
 #endif
-    if (family == AF_INET) { /* this api can't handle IPV6 addresses */
+    if (family == AF_INET) { /* this API can't handle IPV6 addresses */
         int address = (*env)->GetIntField(env, iaObj, ia_addressID);
         (*env)->SetIntField(env, addressObj, ia_addressID, address);
     }
@@ -695,14 +631,14 @@
     if (packetBufferLen > MAX_BUFFER_LEN) {
 
         /* When JNI-ifying the JDK's IO routines, we turned
-         * read's and write's of byte arrays of size greater
+         * reads and writes of byte arrays of size greater
          * than 2048 bytes into several operations of size 2048.
          * This saves a malloc()/memcpy()/free() for big
          * buffers.  This is OK for file IO and TCP, but that
          * strategy violates the semantics of a datagram protocol.
          * (one big send) != (several smaller sends).  So here
-         * we *must* alloc the buffer.  Note it needn't be bigger
-         * than 65,536 (0xFFFF) the max size of an IP packet.
+         * we *must* allocate the buffer.  Note it needn't be bigger
+         * than 65,536 (0xFFFF), the max size of an IP packet.
          * anything bigger is truncated anyway.
          *
          * We may want to use a smarter allocation scheme at some
@@ -855,14 +791,14 @@
     if (packetBufferLen > MAX_BUFFER_LEN) {
 
         /* When JNI-ifying the JDK's IO routines, we turned
-         * read's and write's of byte arrays of size greater
+         * reads and writes of byte arrays of size greater
          * than 2048 bytes into several operations of size 2048.
          * This saves a malloc()/memcpy()/free() for big
          * buffers.  This is OK for file IO and TCP, but that
          * strategy violates the semantics of a datagram protocol.
          * (one big send) != (several smaller sends).  So here
-         * we *must* alloc the buffer.  Note it needn't be bigger
-         * than 65,536 (0xFFFF) the max size of an IP packet.
+         * we *must* allocate the buffer.  Note it needn't be bigger
+         * than 65,536 (0xFFFF) the max size of an IP packet,
          * anything bigger is truncated anyway.
          *
          * We may want to use a smarter allocation scheme at some
@@ -883,24 +819,6 @@
         fullPacket = &(BUF[0]);
     }
 
-#ifdef __linux__
-    /*
-     * On Linux with the 2.2 kernel we simulate connected datagrams by
-     * discarding packets
-     */
-    if (isOldKernel) {
-        connected = (*env)->GetBooleanField(env, this, pdsi_connected);
-        if (connected) {
-            connectedAddress = (*env)->GetObjectField(env, this, pdsi_connectedAddress);
-            connectedPort = (*env)->GetIntField(env, this, pdsi_connectedPort);
-
-            if (timeout) {
-                prevTime = JVM_CurrentTimeMillis(env, 0);
-            }
-        }
-    }
-#endif
-
     do {
         retry = JNI_FALSE;
 
@@ -933,14 +851,6 @@
             }
         }
 
-        /*
-         * Security Note: For Linux 2.2 with connected datagrams ensure that
-         * you receive into the stack/heap allocated buffer - do not attempt
-         * to receive directly into DatagramPacket's byte array.
-         * (ie: if the virtual machine support pinning don't use
-         * GetByteArrayElements or a JNI critical section and receive
-         * directly into the byte array)
-         */
         len = SOCKADDR_LEN;
         n = NET_RecvFrom(fd, fullPacket, packetBufferLen, 0,
                          (struct sockaddr *)&remote_addr, &len);
@@ -971,47 +881,6 @@
             jobject packetAddress;
 
             /*
-             * If we are connected then we know that the datagram that we have
-             * received is from the address that we are connected too. However
-             * on Linux with 2.2 kernel we have to simulate this behaviour by
-             * discarding any datagrams that aren't from the connected address.
-             */
-#ifdef __linux__
-            if (isOldKernel && connected) {
-
-                if (NET_GetPortFromSockaddr((struct sockaddr *)&remote_addr) != connectedPort ||
-                    !NET_SockaddrEqualsInetAddress(env, (struct sockaddr *)&remote_addr, connectedAddress)) {
-
-                    /*
-                     * Discard the datagram as it's not from the connected
-                     * address
-                     */
-                    retry = JNI_TRUE;
-
-                    /*
-                     * Adjust timeout if necessary to ensure that we adhere to
-                     * timeout semantics.
-                     */
-                    if (timeout) {
-                        jlong newTime = JVM_CurrentTimeMillis(env, 0);
-                        timeout -= (newTime - prevTime);
-                        if (timeout <= 0) {
-                            JNU_ThrowByName(env, JNU_JAVANETPKG "SocketTimeoutException",
-                                    "Receive timed out");
-                            if (mallocedPacket) {
-                                free(fullPacket);
-                            }
-                            return;
-                        }
-                        prevTime = newTime;
-                    }
-
-                    continue;
-                }
-            }
-#endif
-
-            /*
              * success - fill in received address...
              *
              * REMIND: Fill in an int on the packet, and create inetadd
@@ -1112,27 +981,16 @@
 
      setsockopt(fd, SOL_SOCKET, SO_BROADCAST, (char*) &t, sizeof(int));
 
-#ifdef __linux__
-    if (isOldKernel) {
-        setsockopt(fd, SOL_SOCKET, SO_BSDCOMPAT, (char*) &t, sizeof(int));
-    }
-
-#ifdef AF_INET6
+#if defined (__linux__) && defined (AF_INET6)
     /*
      * On Linux for IPv6 sockets we must set the hop limit
-     * to 1 to be compatible with default ttl of 1 for IPv4 sockets.
+     * to 1 to be compatible with default TTL of 1 for IPv4 sockets.
      */
     if (domain == AF_INET6) {
         int ttl = 1;
         setsockopt(fd, IPPROTO_IPV6, IPV6_MULTICAST_HOPS, (char *)&ttl,
                    sizeof(ttl));
-
-        if (isOldKernel) {
-            (*env)->SetIntField(env, this, pdsi_ttlID, ttl);
-        }
     }
-#endif
-
 #endif /* __linux__ */
 
     (*env)->SetIntField(env, fdObj, IO_fd_fdID, fd);
@@ -1250,16 +1108,6 @@
         return;
     }
 
-#ifdef __linux__
-    /*
-     * Linux 2.2 kernel doesn't support IPV6_MULTICAST_IF socket
-     * option so record index for later retrival.
-     */
-    if (isOldKernel) {
-        (*env)->SetIntField(env, this, pdsi_multicastInterfaceID,
-                            (jint)index);
-    }
-#endif
 }
 #endif /* AF_INET6 */
 
@@ -1326,8 +1174,6 @@
  *              InetAddress is bound
  *              Set outgoing multicast interface using
  *              IPPROTO_IPV6/IPV6_MULTICAST_IF
- *              On Linux 2.2 record interface index as can't
- *              query the multicast interface.
  *
  * SockOptions.IF_MULTICAST_IF2 :-
  *      value is a NetworkInterface
@@ -1338,8 +1184,6 @@
  *      IPv6:   Obtain NetworkInterface.index
  *              Set outgoing multicast interface using
  *              IPPROTO_IPV6/IPV6_MULTICAST_IF
- *              On Linux 2.2 record interface index as can't
- *              query the multicast interface.
  *
  */
 static void setMulticastInterface(JNIEnv *env, jobject this, int fd,
@@ -1436,15 +1280,6 @@
         return;
     }
 
-#ifdef __linux__
-    /*
-     * Can't query IPV6_MULTICAST_LOOP on Linux 2.2 kernel so
-     * store it in impl so that we can simulate getsockopt.
-     */
-    if (isOldKernel) {
-        (*env)->SetBooleanField(env, this, pdsi_loopbackID, on);
-    }
-#endif
 }
 #endif  /* AF_INET6 */
 
@@ -1507,7 +1342,7 @@
     }
 
     /*
-     * Setting the multicast interface handled seperately
+     * Setting the multicast interface handled separately
      */
     if (opt == java_net_SocketOptions_IP_MULTICAST_IF ||
         opt == java_net_SocketOptions_IP_MULTICAST_IF2) {
@@ -1594,8 +1429,7 @@
  *              Create InetAddress
  *              IP_MULTICAST_IF returns struct ip_mreqn on 2.2
  *              kernel but struct in_addr on 2.4 kernel
- *      IPv6:   Query IPPROTO_IPV6 / IPV6_MULTICAST_IF or
- *              obtain from impl is Linux 2.2 kernel
+ *      IPv6:   Query IPPROTO_IPV6 / IPV6_MULTICAST_IF
  *              If index == 0 return InetAddress representing
  *              anyLocalAddress.
  *              If index > 0 query NetworkInterface by index
@@ -1641,14 +1475,6 @@
         struct in_addr *inP = &in;
         int len = sizeof(struct in_addr);
 
-#ifdef __linux__
-        struct ip_mreqn mreqn;
-        if (isOldKernel) {
-            inP = (struct in_addr *)&mreqn;
-            len = sizeof(struct ip_mreqn);
-        }
-#endif
-
         if (JVM_GetSockOpt(fd, IPPROTO_IP, IP_MULTICAST_IF,
                            (char *)inP, &len) < 0) {
             NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
@@ -1672,12 +1498,7 @@
         addr = (*env)->NewObject(env, inet4_class, inet4_ctrID, 0);
         CHECK_NULL_RETURN(addr, NULL);
 
-#ifdef __linux__
-        (*env)->SetIntField(env, addr, inet4_addrID,
-                (isOldKernel ? ntohl(mreqn.imr_address.s_addr) : ntohl(in.s_addr)) );
-#else
         (*env)->SetIntField(env, addr, inet4_addrID, ntohl(in.s_addr));
-#endif
 
         /*
          * For IP_MULTICAST_IF return InetAddress
@@ -1746,22 +1567,11 @@
         jobject addr;
         jobject ni;
 
-#ifdef __linux__
-        /*
-         * Linux 2.2 kernel doesn't support IPV6_MULTICAST_IF socke option
-         * so use cached index.
-         */
-        if (isOldKernel) {
-            index = (*env)->GetIntField(env, this, pdsi_multicastInterfaceID);
-        } else
-#endif
-        {
-            if (JVM_GetSockOpt(fd, IPPROTO_IPV6, IPV6_MULTICAST_IF,
-                               (char*)&index, &len) < 0) {
-                NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
-                               "Error getting socket option");
-                return NULL;
-            }
+        if (JVM_GetSockOpt(fd, IPPROTO_IPV6, IPV6_MULTICAST_IF,
+                           (char*)&index, &len) < 0) {
+            NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
+                           "Error getting socket option");
+            return NULL;
         }
 
         if (ni_class == NULL) {
@@ -1877,7 +1687,7 @@
     }
 
     /*
-     * Handle IP_MULTICAST_IF seperately
+     * Handle IP_MULTICAST_IF separately
      */
     if (opt == java_net_SocketOptions_IP_MULTICAST_IF ||
         opt == java_net_SocketOptions_IP_MULTICAST_IF2) {
@@ -1916,18 +1726,6 @@
         return NULL;
     }
 
-    /*
-     * IP_MULTICAST_LOOP socket option isn't available on Linux 2.2
-     * kernel with IPv6 so return value stored in impl.
-     */
-#if defined(AF_INET6) && defined(__linux__)
-    if (isOldKernel && opt == java_net_SocketOptions_IP_MULTICAST_LOOP &&
-        level == IPPROTO_IPV6) {
-        int mode = (int)(*env)->GetBooleanField(env, this, pdsi_loopbackID);
-        return createBoolean(env, mode);
-    }
-#endif
-
     if (opt == java_net_SocketOptions_IP_MULTICAST_LOOP &&
         level == IPPROTO_IP) {
         optlen = sizeof(optval.c);
@@ -1961,7 +1759,7 @@
 
     }
 
-    /* should never rearch here */
+    /* should never reach here */
     return NULL;
 }
 
@@ -2025,15 +1823,12 @@
     } else {
         fd = (*env)->GetIntField(env, fdObj, IO_fd_fdID);
     }
-    /* setsockopt to be correct ttl */
+    /* setsockopt to be correct TTL */
 #ifdef AF_INET6
 #ifdef __linux__
     setTTL(env, fd, ttl);
     if (ipv6_available()) {
         setHopLimit(env, fd, ttl);
-        if (isOldKernel) {
-            (*env)->SetIntField(env, this, pdsi_ttlID, ttl);
-        }
     }
 #else  /*  __linux__ not defined */
     if (ipv6_available()) {
@@ -2076,21 +1871,12 @@
     } else {
         fd = (*env)->GetIntField(env, fdObj, IO_fd_fdID);
     }
-    /* getsockopt of ttl */
+    /* getsockopt of TTL */
 #ifdef AF_INET6
     if (ipv6_available()) {
         int ttl = 0;
         int len = sizeof(ttl);
 
-#ifdef __linux__
-        /*
-         * Linux 2.2 kernel doesn't support IPV6_MULTICAST_HOPS socket option
-         */
-        if (isOldKernel) {
-            return (*env)->GetIntField(env, this, pdsi_ttlID);
-        }
-#endif
-
         if (JVM_GetSockOpt(fd, IPPROTO_IPV6, IPV6_MULTICAST_HOPS,
                                (char*)&ttl, &len) < 0) {
                 NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
@@ -2258,14 +2044,10 @@
                 int index;
                 int len = sizeof(index);
 
-                if (isOldKernel) {
-                    index = (*env)->GetIntField(env, this, pdsi_multicastInterfaceID);
-                } else {
-                    if (JVM_GetSockOpt(fd, IPPROTO_IPV6, IPV6_MULTICAST_IF,
-                                       (char*)&index, &len) < 0) {
-                        NET_ThrowCurrent(env, "getsockopt IPV6_MULTICAST_IF failed");
-                        return;
-                    }
+                if (JVM_GetSockOpt(fd, IPPROTO_IPV6, IPV6_MULTICAST_IF,
+                                   (char*)&index, &len) < 0) {
+                    NET_ThrowCurrent(env, "getsockopt IPV6_MULTICAST_IF failed");
+                    return;
                 }
 
                 mname.imr_multiaddr.s_addr = htonl((*env)->GetIntField(env, iaObj, ia_addressID));
@@ -2279,21 +2061,13 @@
                 struct in_addr *inP = &in;
                 socklen_t len = sizeof(struct in_addr);
 
-#ifdef __linux__
-                struct ip_mreqn mreqn;
-                if (isOldKernel) {
-                    inP = (struct in_addr *)&mreqn;
-                    len = sizeof(struct ip_mreqn);
-                }
-#endif
                 if (getsockopt(fd, IPPROTO_IP, IP_MULTICAST_IF, (char *)inP, &len) < 0) {
                     NET_ThrowCurrent(env, "getsockopt IP_MULTICAST_IF failed");
                     return;
                 }
 
 #ifdef __linux__
-                mname.imr_address.s_addr =
-                    (isOldKernel ? mreqn.imr_address.s_addr : in.s_addr);
+                mname.imr_address.s_addr = in.s_addr;
 
 #else
                 mname.imr_interface.s_addr = in.s_addr;
@@ -2314,10 +2088,10 @@
              * If IP_ADD_MEMBERSHIP returns ENOPROTOOPT on Linux and we've got
              * IPv6 enabled then it's possible that the kernel has been fixed
              * so we switch to IPV6_ADD_MEMBERSHIP socket option.
-             * As of 2.4.7 kernel IPV6_ADD_MEMERSHIP can't handle IPv4-mapped
-             * addresses so we have to use IP_ADD_MEMERSHIP for IPv4 multicast
+             * As of 2.4.7 kernel IPV6_ADD_MEMBERSHIP can't handle IPv4-mapped
+             * addresses so we have to use IP_ADD_MEMBERSHIP for IPv4 multicast
              * groups. However if the socket is an IPv6 socket then then setsockopt
-             * should reurn ENOPROTOOPT. We assume this will be fixed in Linux
+             * should return ENOPROTOOPT. We assume this will be fixed in Linux
              * at some stage.
              */
 #if defined(__linux__) && defined(AF_INET6)
@@ -2385,20 +2159,10 @@
             int index;
             int len = sizeof(index);
 
-#ifdef __linux__
-            /*
-             * 2.2 kernel doens't support IPV6_MULTICAST_IF socket option
-             */
-            if (isOldKernel) {
-                index = (*env)->GetIntField(env, this, pdsi_multicastInterfaceID);
-            } else
-#endif
-            {
-                if (JVM_GetSockOpt(fd, IPPROTO_IPV6, IPV6_MULTICAST_IF,
-                                 (char*)&index, &len) < 0) {
-                    NET_ThrowCurrent(env, "getsockopt IPV6_MULTICAST_IF failed");
-                    return;
-                }
+            if (JVM_GetSockOpt(fd, IPPROTO_IPV6, IPV6_MULTICAST_IF,
+                             (char*)&index, &len) < 0) {
+                NET_ThrowCurrent(env, "getsockopt IPV6_MULTICAST_IF failed");
+               return;
             }
 
 #ifdef __linux__
@@ -2408,7 +2172,7 @@
              * subsequent leave groups to fail as there is no match. Thus we
              * pick the interface if there is a matching route.
              */
-            if (index == 0 && !isOldKernel) {
+            if (index == 0) {
                 int rt_index = getDefaultIPv6Interface(&(mname6.ipv6mr_multiaddr));
                 if (rt_index > 0) {
                     index = rt_index;
--- a/jdk/src/solaris/native/java/net/PlainSocketImpl.c	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/solaris/native/java/net/PlainSocketImpl.c	Thu Oct 11 16:59:50 2012 -0700
@@ -128,7 +128,7 @@
 
 /*
  * The initroto function is called whenever PlainSocketImpl is
- * loaded, to cache fieldIds for efficiency. This is called everytime
+ * loaded, to cache field IDs for efficiency. This is called every time
  * the Java class is loaded.
  *
  * Class:     java_net_PlainSocketImpl
@@ -589,7 +589,7 @@
     /* set the address */
     (*env)->SetObjectField(env, this, psi_addressID, iaObj);
 
-    /* intialize the local port */
+    /* initialize the local port */
     if (localport == 0) {
         /* Now that we're a connected socket, let's extract the port number
          * that the system chose for us and store it in the Socket object.
@@ -909,7 +909,7 @@
     }
 
     /*
-     * SO_TIMEOUT is a no-op on Solaris/Linux
+     * SO_TIMEOUT is a NOOP on Solaris/Linux
      */
     if (cmd == java_net_SocketOptions_SO_TIMEOUT) {
         return;
--- a/jdk/src/solaris/native/java/net/SocketInputStream.c	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/solaris/native/java/net/SocketInputStream.c	Thu Oct 11 16:59:50 2012 -0700
@@ -67,14 +67,14 @@
     jint fd, nread;
 
     if (IS_NULL(fdObj)) {
-        /* should't this be a NullPointerException? -br */
+        /* shouldn't this be a NullPointerException? -br */
         JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException",
                         "Socket closed");
         return -1;
     } else {
         fd = (*env)->GetIntField(env, fdObj, IO_fd_fdID);
         /* Bug 4086704 - If the Socket associated with this file descriptor
-         * was closed (sysCloseFD), the the file descriptor is set to -1.
+         * was closed (sysCloseFD), then the file descriptor is set to -1.
          */
         if (fd == -1) {
             JNU_ThrowByName(env, "java/net/SocketException", "Socket closed");
--- a/jdk/src/solaris/native/java/net/bsd_close.c	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/solaris/native/java/net/bsd_close.c	Thu Oct 11 16:59:50 2012 -0700
@@ -68,7 +68,7 @@
 
 /*
  * This limit applies if getlimit() returns unlimited.
- * Unfortunately, this means if someone wants a higher limt
+ * Unfortunately, this means if someone wants a higher limit
  * then they have to set an explicit limit, higher than this,
  * which is probably counter-intuitive.
  */
--- a/jdk/src/solaris/native/java/net/net_util_md.c	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/solaris/native/java/net/net_util_md.c	Thu Oct 11 16:59:50 2012 -0700
@@ -169,7 +169,7 @@
  * for Solaris versions that do not support the ioctl() in getParam().
  * Ugly, but only called once (for each sotype).
  *
- * As an optimisation, we make a guess using the default values for Solaris
+ * As an optimization, we make a guess using the default values for Solaris
  * assuming they haven't been modified with ndd.
  */
 
@@ -217,23 +217,7 @@
 #endif
 
 #ifdef __linux__
-static int kernelV22 = 0;
 static int vinit = 0;
-
-int kernelIsV22 () {
-    if (!vinit) {
-        struct utsname sysinfo;
-        if (uname(&sysinfo) == 0) {
-            sysinfo.release[3] = '\0';
-            if (strcmp(sysinfo.release, "2.2") == 0) {
-                kernelV22 = JNI_TRUE;
-            }
-        }
-        vinit = 1;
-    }
-    return kernelV22;
-}
-
 static int kernelV24 = 0;
 static int vinit24 = 0;
 
@@ -253,17 +237,11 @@
 
 int getScopeID (struct sockaddr *him) {
     struct sockaddr_in6 *hext = (struct sockaddr_in6 *)him;
-    if (kernelIsV22()) {
-        return 0;
-    }
     return hext->sin6_scope_id;
 }
 
 int cmpScopeID (unsigned int scope, struct sockaddr *him) {
     struct sockaddr_in6 *hext = (struct sockaddr_in6 *)him;
-    if (kernelIsV22()) {
-        return 1;       /* scope is ignored for comparison in 2.2 kernel */
-    }
     return hext->sin6_scope_id == scope;
 }
 
@@ -843,15 +821,14 @@
          * address needs to be routed via the loopback interface. In this case,
          * we override the specified value with that of the loopback interface.
          * If no cached value exists and no value was specified by user, then
-         * we try to determine a value ffrom the routing table. In all these
+         * we try to determine a value from the routing table. In all these
          * cases the used value is cached for further use.
          */
 #ifdef __linux__
         if (IN6_IS_ADDR_LINKLOCAL(&(him6->sin6_addr))) {
             int cached_scope_id = 0, scope_id = 0;
-            int old_kernel = kernelIsV22();
 
-            if (ia6_cachedscopeidID && !old_kernel) {
+            if (ia6_cachedscopeidID) {
                 cached_scope_id = (int)(*env)->GetIntField(env, iaObj, ia6_cachedscopeidID);
                 /* if cached value exists then use it. Otherwise, check
                  * if scope is set in the address.
@@ -891,13 +868,11 @@
              * of sockaddr_in6.
              */
 
-            if (!old_kernel) {
-                struct sockaddr_in6 *him6 =
-                        (struct sockaddr_in6 *)him;
-                him6->sin6_scope_id = cached_scope_id != 0 ?
-                                            cached_scope_id    : scope_id;
-                *len = sizeof(struct sockaddr_in6);
-            }
+            struct sockaddr_in6 *him6 =
+                    (struct sockaddr_in6 *)him;
+            him6->sin6_scope_id = cached_scope_id != 0 ?
+                                        cached_scope_id    : scope_id;
+            *len = sizeof(struct sockaddr_in6);
         }
 #else
         /* handle scope_id for solaris */
@@ -1208,7 +1183,7 @@
 
 /*
  * Wrapper for getsockopt system routine - does any necessary
- * pre/post processing to deal with OS specific oddies :-
+ * pre/post processing to deal with OS specific oddities :-
  *
  * IP_TOS is a no-op with IPv6 sockets as it's setup when
  * the connection is established.
@@ -1287,7 +1262,7 @@
  *
  * For IP_TOS socket option need to mask off bits as this
  * aren't automatically masked by the kernel and results in
- * an error. In addition IP_TOS is a noop with IPv6 as it
+ * an error. In addition IP_TOS is a NOOP with IPv6 as it
  * should be setup as connection time.
  */
 int
@@ -1321,7 +1296,7 @@
 
     /*
      * IPPROTO/IP_TOS :-
-     * 1. IPv6 on Solaris/Mac OS: no-op and will be set
+     * 1. IPv6 on Solaris/Mac OS: NOOP and will be set
      *    in flowinfo field when connecting TCP socket,
      *    or sending UDP packet.
      * 2. IPv6 on Linux: By default Linux ignores flowinfo
--- a/jdk/src/solaris/native/java/net/net_util_md.h	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/solaris/native/java/net/net_util_md.h	Thu Oct 11 16:59:50 2012 -0700
@@ -144,7 +144,6 @@
  *  Utilities
  */
 #ifdef __linux__
-extern int kernelIsV22();
 extern int kernelIsV24();
 #endif
 
--- a/jdk/src/solaris/native/sun/awt/initIDs.c	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/solaris/native/sun/awt/initIDs.c	Thu Oct 11 16:59:50 2012 -0700
@@ -89,6 +89,12 @@
 }
 
 JNIEXPORT void JNICALL
+Java_java_awt_Choice_initIDs
+  (JNIEnv *env, jclass clazz)
+{
+}
+
+JNIEXPORT void JNICALL
 Java_java_awt_Dimension_initIDs
   (JNIEnv *env, jclass clazz)
 {
--- a/jdk/src/solaris/native/sun/nio/ch/Net.c	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/solaris/native/sun/nio/ch/Net.c	Thu Oct 11 16:59:50 2012 -0700
@@ -38,6 +38,7 @@
 #include "net_util_md.h"
 #include "nio_util.h"
 #include "nio.h"
+#include "sun_nio_ch_PollArrayWrapper.h"
 
 #ifdef _ALLBSD_SOURCE
 
@@ -627,6 +628,26 @@
         handleSocketError(env, errno);
 }
 
+JNIEXPORT jint JNICALL
+Java_sun_nio_ch_Net_poll(JNIEnv* env, jclass this, jobject fdo, jint events, jlong timeout)
+{
+    struct pollfd pfd;
+    int rv;
+    pfd.fd = fdval(env, fdo);
+    pfd.events = events;
+    rv = poll(&pfd, 1, timeout);
+
+    if (rv >= 0) {
+        return pfd.revents;
+    } else if (errno == EINTR) {
+        return IOS_INTERRUPTED;
+    } else if (rv < 0) {
+        handleSocketError(env, errno);
+        return IOS_THROWN;
+    }
+}
+
+
 /* Declared in nio_util.h */
 
 jint
--- a/jdk/src/windows/native/sun/nio/ch/Net.c	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/windows/native/sun/nio/ch/Net.c	Thu Oct 11 16:59:50 2012 -0700
@@ -35,6 +35,7 @@
 #include "net_util.h"
 
 #include "sun_nio_ch_Net.h"
+#include "sun_nio_ch_PollArrayWrapper.h"
 
 /**
  * Definitions to allow for building with older SDK include files.
@@ -524,3 +525,49 @@
         NET_ThrowNew(env, WSAGetLastError(), "shutdown");
     }
 }
+
+JNIEXPORT jint JNICALL
+Java_sun_nio_ch_Net_poll(JNIEnv* env, jclass this, jobject fdo, jint events, jlong timeout)
+{
+    int rv;
+    int revents = 0;
+    struct timeval t;
+    int lastError = 0;
+    fd_set rd, wr, ex;
+    jint fd = fdval(env, fdo);
+
+    t.tv_sec = timeout / 1000;
+    t.tv_usec = (timeout % 1000) * 1000;
+
+    FD_ZERO(&rd);
+    FD_ZERO(&wr);
+    FD_ZERO(&ex);
+    if (events & sun_nio_ch_PollArrayWrapper_POLLIN) {
+        FD_SET(fd, &rd);
+    }
+    if (events & sun_nio_ch_PollArrayWrapper_POLLOUT ||
+        events & sun_nio_ch_PollArrayWrapper_POLLCONN) {
+        FD_SET(fd, &wr);
+    }
+    FD_SET(fd, &ex);
+
+    rv = select(fd+1, &rd, &wr, &ex, &t);
+
+    /* save last winsock error */
+    if (rv == SOCKET_ERROR) {
+        handleSocketError(env, lastError);
+        return IOS_THROWN;
+    } else if (rv >= 0) {
+        rv = 0;
+        if (FD_ISSET(fd, &rd)) {
+            rv |= sun_nio_ch_PollArrayWrapper_POLLIN;
+        }
+        if (FD_ISSET(fd, &wr)) {
+            rv |= sun_nio_ch_PollArrayWrapper_POLLOUT;
+        }
+        if (FD_ISSET(fd, &ex)) {
+            rv |= sun_nio_ch_PollArrayWrapper_POLLERR;
+        }
+    }
+    return rv;
+}
--- a/jdk/src/windows/native/sun/util/locale/provider/HostLocaleProviderAdapter_md.c	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/windows/native/sun/util/locale/provider/HostLocaleProviderAdapter_md.c	Thu Oct 11 16:59:50 2012 -0700
@@ -209,31 +209,26 @@
  */
 JNIEXPORT jstring JNICALL Java_sun_util_locale_provider_HostLocaleProviderAdapterImpl_getDateTimePattern
   (JNIEnv *env, jclass cls, jint dateStyle, jint timeStyle, jstring jlangtag) {
-    WCHAR datePattern[BUFLEN];
-    WCHAR timePattern[BUFLEN];
+    WCHAR pattern[BUFLEN];
     const jchar *langtag = (*env)->GetStringChars(env, jlangtag, JNI_FALSE);
 
-    datePattern[0] = L'\0';
-    timePattern[0] = L'\0';
+    pattern[0] = L'\0';
 
     if (dateStyle == 0 || dateStyle == 1) {
-        getLocaleInfoWrapper(langtag, LOCALE_SLONGDATE, datePattern, BUFLEN);
+        getLocaleInfoWrapper(langtag, LOCALE_SLONGDATE, pattern, BUFLEN);
     } else if (dateStyle == 2 || dateStyle == 3) {
-        getLocaleInfoWrapper(langtag, LOCALE_SSHORTDATE, datePattern, BUFLEN);
+        getLocaleInfoWrapper(langtag, LOCALE_SSHORTDATE, pattern, BUFLEN);
     }
 
     if (timeStyle == 0 || timeStyle == 1) {
-        getLocaleInfoWrapper(langtag, LOCALE_STIMEFORMAT, timePattern, BUFLEN);
+        getLocaleInfoWrapper(langtag, LOCALE_STIMEFORMAT, pattern, BUFLEN);
     } else if (timeStyle == 2 || timeStyle == 3) {
-        getLocaleInfoWrapper(langtag, LOCALE_SSHORTTIME, timePattern, BUFLEN);
+        getLocaleInfoWrapper(langtag, LOCALE_SSHORTTIME, pattern, BUFLEN);
     }
 
-    wcscat(datePattern, L" ");
-    wcscat(datePattern, timePattern);
-
     (*env)->ReleaseStringChars(env, jlangtag, langtag);
 
-    return (*env)->NewString(env, datePattern, wcslen(datePattern));
+    return (*env)->NewString(env, pattern, wcslen(pattern));
 }
 
 /*
--- a/jdk/src/windows/native/sun/windows/awt_Choice.cpp	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/windows/native/sun/windows/awt_Choice.cpp	Thu Oct 11 16:59:50 2012 -0700
@@ -79,6 +79,10 @@
 
 static const UINT MINIMUM_NUMBER_OF_VISIBLE_ITEMS = 8;
 
+namespace {
+    jfieldID selectedIndexID;
+}
+
 /*************************************************************************
  * AwtChoice class methods
  */
@@ -86,7 +90,6 @@
 AwtChoice::AwtChoice() {
     m_hList = NULL;
     m_listDefWindowProc = NULL;
-    m_selectedItem = -1;
 }
 
 LPCTSTR AwtChoice::GetClassName() {
@@ -102,7 +105,6 @@
 
 AwtChoice* AwtChoice::Create(jobject peer, jobject parent) {
 
-
     JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
 
     jobject target = NULL;
@@ -438,10 +440,14 @@
 MsgRouting AwtChoice::WmNotify(UINT notifyCode)
 {
     if (notifyCode == CBN_SELCHANGE) {
-        int selectedItem = (int)SendMessage(CB_GETCURSEL);
-        if (selectedItem != CB_ERR && m_selectedItem != selectedItem){
-            m_selectedItem = selectedItem;
-            DoCallback("handleAction", "(I)V", selectedItem);
+        int selectedIndex = (int)SendMessage(CB_GETCURSEL);
+
+        JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
+        jobject target = GetTarget(env);
+        int previousIndex = env->GetIntField(target, selectedIndexID);
+
+        if (selectedIndex != CB_ERR && selectedIndex != previousIndex){
+            DoCallback("handleAction", "(I)V", selectedIndex);
         }
     } else if (notifyCode == CBN_DROPDOWN) {
 
@@ -695,6 +701,15 @@
 
 extern "C" {
 
+JNIEXPORT void JNICALL
+Java_java_awt_Choice_initIDs(JNIEnv *env, jclass cls)
+{
+    TRY;
+    selectedIndexID = env->GetFieldID(cls, "selectedIndex", "I");
+    DASSERT(selectedIndexID);
+    CATCH_BAD_ALLOC;
+}
+
 /*
  * Class:     sun_awt_windows_WChoicePeer
  * Method:    select
--- a/jdk/src/windows/native/sun/windows/awt_Choice.h	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/windows/native/sun/windows/awt_Choice.h	Thu Oct 11 16:59:50 2012 -0700
@@ -94,7 +94,6 @@
     static BOOL sm_isMouseMoveInList;
     HWND m_hList;
     WNDPROC m_listDefWindowProc;
-    int m_selectedItem;
     static LRESULT CALLBACK ListWindowProc(HWND hwnd, UINT message,
                                            WPARAM wParam, LPARAM lParam);
 };
--- a/jdk/src/windows/native/sun/windows/awt_Component.cpp	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/windows/native/sun/windows/awt_Component.cpp	Thu Oct 11 16:59:50 2012 -0700
@@ -3144,7 +3144,8 @@
     return;
 }
 
-UINT AwtComponent::WindowsKeyToJavaKey(UINT windowsKey, UINT modifiers)
+UINT AwtComponent::WindowsKeyToJavaKey(UINT windowsKey, UINT modifiers, UINT character, BOOL isDeadKey)
+
 {
     // Handle the few cases where we need to take the modifier into
     // consideration for the Java VK code or where we have to take the keyboard
@@ -3171,6 +3172,15 @@
             break;
     };
 
+    // check dead key
+    if (isDeadKey) {
+      for (int i = 0; charToDeadVKTable[i].c != 0; i++) {
+        if (charToDeadVKTable[i].c == character) {
+            return charToDeadVKTable[i].javaKey;
+        }
+      }
+    }
+
     // for the general case, use a bi-directional table
     for (int i = 0; keyMapTable[i].windowsKey != 0; i++) {
         if (keyMapTable[i].windowsKey == windowsKey) {
@@ -3384,14 +3394,18 @@
     }
 }
 
-UINT AwtComponent::WindowsKeyToJavaChar(UINT wkey, UINT modifiers, TransOps ops)
+UINT AwtComponent::WindowsKeyToJavaChar(UINT wkey, UINT modifiers, TransOps ops, BOOL &isDeadKey)
 {
     static Hashtable transTable("VKEY translations");
+    static Hashtable deadKeyFlagTable("Dead Key Flags");
+    isDeadKey = FALSE;
 
     // Try to translate using last saved translation
     if (ops == LOAD) {
+       void* deadKeyFlag = deadKeyFlagTable.remove(reinterpret_cast<void*>(static_cast<INT_PTR>(wkey)));
        void* value = transTable.remove(reinterpret_cast<void*>(static_cast<INT_PTR>(wkey)));
        if (value != NULL) {
+           isDeadKey = static_cast<BOOL>(reinterpret_cast<INT_PTR>(deadKeyFlag));
            return static_cast<UINT>(reinterpret_cast<INT_PTR>(value));
        }
     }
@@ -3484,12 +3498,13 @@
 
     // instead of creating our own conversion tables, I'll let Win32
     // convert the character for me.
-    WORD mbChar;
+    WORD wChar[2];
     UINT scancode = ::MapVirtualKey(wkey, 0);
-    int converted = ::ToAsciiEx(wkey, scancode, keyboardState,
-                                &mbChar, 0, GetKeyboardLayout());
+    int converted = ::ToUnicodeEx(wkey, scancode, keyboardState,
+                                  wChar, 2, 0, GetKeyboardLayout());
 
     UINT translation;
+    BOOL deadKeyFlag = (converted == 2);
 
     // Dead Key
     if (converted < 0) {
@@ -3508,16 +3523,16 @@
     } else
     // the caller expects a Unicode character.
     if (converted > 0) {
-        WCHAR unicodeChar[2];
-        VERIFY(::MultiByteToWideChar(GetCodePage(), MB_PRECOMPOSED,
-        (LPCSTR)&mbChar, 1, unicodeChar, 1));
-
-        translation = unicodeChar[0];
+        translation = wChar[0];
     }
     if (ops == SAVE) {
         transTable.put(reinterpret_cast<void*>(static_cast<INT_PTR>(wkey)),
                        reinterpret_cast<void*>(static_cast<INT_PTR>(translation)));
-    }
+        deadKeyFlagTable.put(reinterpret_cast<void*>(static_cast<INT_PTR>(wkey)),
+                       reinterpret_cast<void*>(static_cast<INT_PTR>(deadKeyFlag)));
+    }
+
+    isDeadKey = deadKeyFlag;
     return translation;
 }
 
@@ -3537,8 +3552,9 @@
 
     UINT modifiers = GetJavaModifiers();
     jint keyLocation = GetKeyLocation(wkey, flags);
-    UINT jkey = WindowsKeyToJavaKey(wkey, modifiers);
-    UINT character = WindowsKeyToJavaChar(wkey, modifiers, SAVE);
+    BOOL isDeadKey = FALSE;
+    UINT character = WindowsKeyToJavaChar(wkey, modifiers, SAVE, isDeadKey);
+    UINT jkey = WindowsKeyToJavaKey(wkey, modifiers, character, isDeadKey);
     UpdateDynPrimaryKeymap(wkey, jkey, keyLocation, modifiers);
 
 
@@ -3579,8 +3595,9 @@
 
     UINT modifiers = GetJavaModifiers();
     jint keyLocation = GetKeyLocation(wkey, flags);
-    UINT jkey = WindowsKeyToJavaKey(wkey, modifiers);
-    UINT character = WindowsKeyToJavaChar(wkey, modifiers, LOAD);
+    BOOL isDeadKey = FALSE;
+    UINT character = WindowsKeyToJavaChar(wkey, modifiers, LOAD, isDeadKey);
+    UINT jkey = WindowsKeyToJavaKey(wkey, modifiers, character, isDeadKey);
     UpdateDynPrimaryKeymap(wkey, jkey, keyLocation, modifiers);
 
     SendKeyEventToFocusOwner(java_awt_event_KeyEvent_KEY_RELEASED,
@@ -5628,7 +5645,8 @@
                         }
                     }
 
-                    modifiedChar = p->WindowsKeyToJavaChar(winKey, modifiers, AwtComponent::NONE);
+                    BOOL isDeadKey = FALSE;
+                    modifiedChar = p->WindowsKeyToJavaChar(winKey, modifiers, AwtComponent::NONE, isDeadKey);
                     bCharChanged = (keyChar != modifiedChar);
                 }
                 break;
@@ -7166,4 +7184,4 @@
         removedDCs = removedDCs->next;
         delete tmpDCList;
     }
-}
+}
\ No newline at end of file
--- a/jdk/src/windows/native/sun/windows/awt_Component.h	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/windows/native/sun/windows/awt_Component.h	Thu Oct 11 16:59:50 2012 -0700
@@ -441,7 +441,7 @@
     static jint GetJavaModifiers();
     static jint GetButton(int mouseButton);
     static UINT GetButtonMK(int mouseButton);
-    static UINT WindowsKeyToJavaKey(UINT windowsKey, UINT modifiers);
+    static UINT WindowsKeyToJavaKey(UINT windowsKey, UINT modifiers, UINT character, BOOL isDeadKey);
     static void JavaKeyToWindowsKey(UINT javaKey, UINT *windowsKey, UINT *modifiers, UINT originalWindowsKey);
     static void UpdateDynPrimaryKeymap(UINT wkey, UINT jkeyLegacy, jint keyLocation, UINT modifiers);
 
@@ -453,7 +453,7 @@
 
     enum TransOps {NONE, LOAD, SAVE};
 
-    UINT WindowsKeyToJavaChar(UINT wkey, UINT modifiers, TransOps ops);
+    UINT WindowsKeyToJavaChar(UINT wkey, UINT modifiers, TransOps ops, BOOL &isDeadKey);
 
     /* routines used for input method support */
     void SetInputMethod(jobject im, BOOL useNativeCompWindow);
--- a/jdk/src/windows/native/sun/windows/awt_InputMethod.cpp	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/src/windows/native/sun/windows/awt_InputMethod.cpp	Thu Oct 11 16:59:50 2012 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -517,10 +517,10 @@
     jstring infojStr = NULL;
 
     if ((buffSize = ::ImmGetDescription(hkl, szImmDescription, 0)) > 0) {
-        szImmDescription = (LPTSTR) safe_Malloc(buffSize * sizeof(TCHAR));
+        szImmDescription = (LPTSTR) safe_Malloc((buffSize+1) * sizeof(TCHAR));
 
         if (szImmDescription != NULL) {
-            ImmGetDescription(hkl, szImmDescription, buffSize);
+            ImmGetDescription(hkl, szImmDescription, (buffSize+1));
 
             infojStr = JNU_NewStringPlatform(env, szImmDescription);
 
--- a/jdk/test/ProblemList.txt	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/test/ProblemList.txt	Thu Oct 11 16:59:50 2012 -0700
@@ -153,9 +153,6 @@
 # 7144846
 javax/management/remote/mandatory/connection/ReconnectTest.java	generic-all
 
-# 7158614, locks up Windows machines at least
-sun/management/jmxremote/startstop/JMXStartStopTest.sh		windows-all
-
 # 7120365
 javax/management/remote/mandatory/notif/DiffHBTest.java 	generic-all
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/Choice/ItemStateChangeTest/ItemStateChangeTest.java	Thu Oct 11 16:59:50 2012 -0700
@@ -0,0 +1,128 @@
+/*
+ * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+  @test
+  @bug 7171412
+  @summary awt Choice doesn't fire ItemStateChange when selecting item after select() call
+  @author Oleg Pekhovskiy: area=awt-choice
+  @library ../../regtesthelpers
+  @build Util
+  @run main ItemStateChangeTest
+*/
+
+import test.java.awt.regtesthelpers.Util;
+
+import java.awt.*;
+import java.awt.event.*;
+import sun.awt.OSInfo;
+
+public class ItemStateChangeTest extends Frame {
+
+    int events = 0;
+
+    public static void main(String args[]) {
+        new ItemStateChangeTest();
+    }
+
+    public ItemStateChangeTest() {
+
+        if (OSInfo.getOSType() != OSInfo.OSType.WINDOWS) {
+            return;
+        }
+
+        try {
+
+            final Robot robot = new Robot();
+            robot.setAutoDelay(20);
+            Util.waitForIdle(robot);
+
+            addWindowListener(new WindowAdapter() {
+                @Override
+                public void windowClosing(WindowEvent e) {
+                    System.exit(0);
+                }
+            });
+
+            final Choice choice = new Choice();
+            choice.add("A");
+            choice.add("B");
+            choice.addItemListener(new ItemListener() {
+                @Override
+                public void itemStateChanged(ItemEvent e) {
+                    ++events;
+                }
+            });
+
+            add(choice);
+            setSize(200, 150);
+            setVisible(true);
+            toFront();
+
+            // choose B
+            int y = chooseB(choice, robot, 16);
+
+            // reset to A
+            choice.select(0);
+            robot.delay(20);
+            Util.waitForIdle(robot);
+
+            // choose B again
+            chooseB(choice, robot, y);
+
+            if (events == 2) {
+                System.out.println("Test passed!");
+            }
+            else {
+                throw new RuntimeException("Test failed!");
+            }
+
+        }
+        catch (AWTException e) {
+            throw new RuntimeException("Test failed!");
+        }
+    }
+
+    final int chooseB(Choice choice, Robot robot, int y) {
+        while (true) {
+            // show drop-down list
+            Util.clickOnComp(choice, robot);
+            Util.waitForIdle(robot);
+            Point pt = choice.getLocationOnScreen();
+            Dimension size = choice.getSize();
+            // try to click B item
+            robot.mouseMove(pt.x + size.width / 2, pt.y + size.height + y);
+            Util.waitForIdle(robot);
+            robot.mousePress(InputEvent.BUTTON1_DOWN_MASK);
+            Util.waitForIdle(robot);
+            robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
+            Util.waitForIdle(robot);
+            if (choice.getSelectedIndex() == 1) {
+                break;
+            }
+            // if it's not B, position cursor lower by 2 pixels and try again
+            y += 2;
+        }
+        return y;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/List/EmptyListEventTest/EmptyListEventTest.java	Thu Oct 11 16:59:50 2012 -0700
@@ -0,0 +1,158 @@
+/*
+ * Copyright (c) 2008, 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 6366126
+ * @summary List throws ArrayIndexOutOfBoundsException when pressing ENTER after removing all the items, Win32
+ * @author Dmitry Cherepanov area=awt.list
+ * @run main EmptyListEventTest
+ */
+import java.awt.*;
+import java.awt.event.*;
+import javax.swing.JFrame;
+import javax.swing.JPanel;
+import javax.swing.SwingUtilities;
+import sun.awt.SunToolkit;
+
+public class EmptyListEventTest {
+
+    private static List list;
+
+    public static void main(String[] args) throws Exception {
+
+        SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit();
+        Robot robot = new Robot();
+        robot.setAutoDelay(50);
+
+        SwingUtilities.invokeAndWait(new Runnable() {
+
+            @Override
+            public void run() {
+                createAndShowGUI();
+            }
+        });
+
+        toolkit.realSync();
+
+        // press mouse -> ItemEvent
+        Point point = getClickPoint();
+        robot.mouseMove(point.x, point.y);
+        robot.mousePress(InputEvent.BUTTON1_MASK);
+        robot.mouseRelease(InputEvent.BUTTON1_MASK);
+
+        toolkit.realSync();
+
+        SwingUtilities.invokeAndWait(new Runnable() {
+
+            @Override
+            public void run() {
+                list.requestFocusInWindow();
+            }
+        });
+
+        toolkit.realSync();
+
+        if (KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner() != list) {
+            throw new RuntimeException("Test failed - list isn't focus owner.");
+        }
+
+        // press key ENTER -> ActionEvent
+        robot.keyPress(KeyEvent.VK_ENTER);
+        robot.keyRelease(KeyEvent.VK_ENTER);
+        toolkit.realSync();
+
+        // press key SPACE -> ItemEvent
+        robot.keyPress(KeyEvent.VK_SPACE);
+        robot.keyRelease(KeyEvent.VK_SPACE);
+        toolkit.realSync();
+
+        // mouse double click -> ActionEvent
+        robot.setAutoDelay(10);
+        robot.mousePress(InputEvent.BUTTON1_MASK);
+        robot.mouseRelease(InputEvent.BUTTON1_MASK);
+        robot.mousePress(InputEvent.BUTTON1_MASK);
+        robot.mouseRelease(InputEvent.BUTTON1_MASK);
+        toolkit.realSync();
+    }
+
+    private static Point getClickPoint() throws Exception {
+        final Point[] result = new Point[1];
+
+        SwingUtilities.invokeAndWait(new Runnable() {
+
+            @Override
+            public void run() {
+                Point point = list.getLocationOnScreen();
+                point.translate(list.getWidth() / 2, list.getHeight() / 2);
+                result[0] = point;
+
+            }
+        });
+
+        return result[0];
+
+
+    }
+
+    private static void createAndShowGUI() {
+        JFrame frame = new JFrame();
+        frame.setSize(200, 200);
+        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+
+        JPanel panel = new JPanel(new BorderLayout());
+
+        frame.getToolkit().addAWTEventListener(new AWTEventListener() {
+
+            public void eventDispatched(AWTEvent e) {
+                System.out.println(e);
+            }
+        }, AWTEvent.FOCUS_EVENT_MASK | AWTEvent.WINDOW_FOCUS_EVENT_MASK);
+
+
+        MyListener listener = new MyListener();
+
+        list = new List(4, true);
+        list.addActionListener(listener);
+        list.addItemListener(listener);
+
+        panel.add(list);
+
+        frame.getContentPane().add(panel);
+        frame.setVisible(true);
+
+    }
+
+    static class MyListener implements ActionListener, ItemListener {
+
+        public void actionPerformed(ActionEvent ae) {
+            System.err.println(ae);
+            throw new RuntimeException("Test failed - list is empty so event is redundant");
+        }
+
+        public void itemStateChanged(ItemEvent ie) {
+            System.err.println(ie);
+            throw new RuntimeException("Test failed - list is empty so event is redundant");
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/ScrollPane/ScrollPanePreferredSize/ScrollPanePreferredSize.java	Thu Oct 11 16:59:50 2012 -0700
@@ -0,0 +1,65 @@
+/*
+ * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import java.awt.Dimension;
+import java.awt.Frame;
+import java.awt.ScrollPane;
+import java.awt.Toolkit;
+
+import sun.awt.SunToolkit;
+
+/**
+ * @test
+ * @bug 7124213
+ * @author Sergey Bylokhov
+ */
+public final class ScrollPanePreferredSize {
+
+    public static void main(final String[] args) {
+        final Dimension expected = new Dimension(300, 300);
+        final Frame frame = new Frame();
+        final ScrollPane sp = new ScrollPane();
+        sp.setSize(expected);
+        frame.add(sp);
+        frame.pack();
+        frame.setLocationRelativeTo(null);
+        frame.setVisible(true);
+        sleep();
+        final Dimension size = frame.getSize();
+        if (size.width < expected.width || size.height < expected.height) {
+            throw new RuntimeException(
+                    "Expected size: >= " + expected + ", actual size: " + size);
+        }
+        frame.dispose();
+    }
+
+    private static void sleep() {
+        ((SunToolkit) Toolkit.getDefaultToolkit()).realSync();
+        try {
+            Thread.sleep(500L);
+        } catch (InterruptedException ignored) {
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/TextArea/TextAreaTwicePack/TextAreaTwicePack.java	Thu Oct 11 16:59:50 2012 -0700
@@ -0,0 +1,66 @@
+/*
+ * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import java.awt.Dimension;
+import java.awt.Frame;
+import java.awt.TextArea;
+import java.awt.Toolkit;
+
+import sun.awt.SunToolkit;
+
+/**
+ * @test
+ * @bug 7160627
+ * @summary We shouldn't get different frame size when we call Frame.pack()
+ * twice.
+ * @author Sergey Bylokhov
+ */
+public final class TextAreaTwicePack {
+
+    public static void main(final String[] args) {
+        final Frame frame = new Frame();
+        final TextArea ta = new TextArea();
+        frame.add(ta);
+        frame.pack();
+        frame.setVisible(true);
+        sleep();
+        final Dimension before = frame.getSize();
+        frame.pack();
+        final Dimension after = frame.getSize();
+        if (!after.equals(before)) {
+            throw new RuntimeException(
+                    "Expected size: " + before + ", actual size: " + after);
+        }
+        frame.dispose();
+    }
+
+    private static void sleep() {
+        ((SunToolkit) Toolkit.getDefaultToolkit()).realSync();
+        try {
+            Thread.sleep(500L);
+        } catch (InterruptedException ignored) {
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/event/KeyEvent/DeadKey/DeadKeyMacOSXInputText.java	Thu Oct 11 16:59:50 2012 -0700
@@ -0,0 +1,131 @@
+/*
+ * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 7199180
+ * @summary [macosx] Dead keys handling for input methods
+ * @author alexandr.scherbatiy area=awt.event
+ * @run main DeadKeyMacOSXInputText
+ */
+import java.awt.*;
+import java.awt.event.*;
+import java.awt.event.KeyEvent;
+import javax.swing.JTextField;
+import sun.awt.OSInfo;
+import sun.awt.SunToolkit;
+
+public class DeadKeyMacOSXInputText {
+
+    private static SunToolkit toolkit;
+    private static volatile int state = 0;
+
+    public static void main(String[] args) throws Exception {
+
+        if (OSInfo.getOSType() != OSInfo.OSType.MACOSX) {
+            return;
+        }
+
+        toolkit = (SunToolkit) Toolkit.getDefaultToolkit();
+        Robot robot = new Robot();
+        robot.setAutoDelay(50);
+
+        createAndShowGUI();
+
+        // Pressed keys: Alt + E + A
+        // Results:  ALT + VK_DEAD_ACUTE + a with accute accent
+        robot.keyPress(KeyEvent.VK_ALT);
+        robot.keyPress(KeyEvent.VK_E);
+        robot.keyRelease(KeyEvent.VK_E);
+        robot.keyRelease(KeyEvent.VK_ALT);
+
+        robot.keyPress(KeyEvent.VK_A);
+        robot.keyRelease(KeyEvent.VK_A);
+        toolkit.realSync();
+
+        if (state != 3) {
+            throw new RuntimeException("Wrong number of key events.");
+        }
+    }
+
+    static void createAndShowGUI() {
+        Frame frame = new Frame();
+        frame.setSize(300, 300);
+        Panel panel = new Panel(new BorderLayout());
+        JTextField textField = new JTextField();
+        textField.addKeyListener(new DeadKeyListener());
+        panel.add(textField, BorderLayout.CENTER);
+        frame.add(panel);
+        frame.setVisible(true);
+        toolkit.realSync();
+
+        textField.requestFocusInWindow();
+        toolkit.realSync();
+
+    }
+
+    static class DeadKeyListener extends KeyAdapter {
+
+        @Override
+        public void keyPressed(KeyEvent e) {
+            int keyCode = e.getKeyCode();
+            char keyChar = e.getKeyChar();
+
+            switch (state) {
+                case 0:
+                    if (keyCode != KeyEvent.VK_ALT) {
+                        throw new RuntimeException("Alt is not pressed.");
+                    }
+                    state++;
+                    break;
+                case 1:
+                    if (keyCode != KeyEvent.VK_DEAD_ACUTE) {
+                        throw new RuntimeException("Dead ACUTE is not pressed.");
+                    }
+                    if (keyChar != 0xB4) {
+                        throw new RuntimeException("Pressed char is not dead acute.");
+                    }
+                    state++;
+                    break;
+            }
+        }
+
+        @Override
+        public void keyTyped(KeyEvent e) {
+            int keyCode = e.getKeyCode();
+            char keyChar = e.getKeyChar();
+
+            if (state == 2) {
+                if (keyCode != 0) {
+                    throw new RuntimeException("Key code should be undefined.");
+                }
+                if (keyChar != 0xE1) {
+                    throw new RuntimeException("A char does not have ACCUTE accent");
+                }
+                state++;
+            } else {
+                throw new RuntimeException("Wron number of keyTyped events.");
+            }
+        }
+    }
+}
--- a/jdk/test/java/nio/Buffer/Basic-X.java.template	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/test/java/nio/Buffer/Basic-X.java.template	Thu Oct 11 16:59:50 2012 -0700
@@ -335,7 +335,7 @@
         fail(problem + String.format(": x=%s y=%s", x, y), xb, yb);
     }
 
-    private static void tryCatch(Buffer b, Class ex, Runnable thunk) {
+    private static void tryCatch(Buffer b, Class<?> ex, Runnable thunk) {
         boolean caught = false;
         try {
             thunk.run();
@@ -350,7 +350,7 @@
             fail(ex.getName() + " not thrown", b);
     }
 
-    private static void tryCatch($type$ [] t, Class ex, Runnable thunk) {
+    private static void tryCatch($type$ [] t, Class<?> ex, Runnable thunk) {
         tryCatch($Type$Buffer.wrap(t), ex, thunk);
     }
 
@@ -681,6 +681,14 @@
                     bulkPutBuffer(rb);
                 }});
 
+        // put($Type$Buffer) should not change source position
+        final $Type$Buffer src = $Type$Buffer.allocate(1);
+        tryCatch(b, ReadOnlyBufferException.class, new Runnable() {
+                public void run() {
+                    rb.put(src);
+                 }});
+        ck(src, src.position(), 0);
+
         tryCatch(b, ReadOnlyBufferException.class, new Runnable() {
                 public void run() {
                     rb.compact();
@@ -744,6 +752,22 @@
 
 #end[byte]
 
+#if[char]
+
+        // 7199551
+        tryCatch(b, ReadOnlyBufferException.class, new Runnable() {
+            public void run() {
+                String s = new String(new char[rb.remaining() + 1]);
+                rb.put(s);
+            }});
+        tryCatch(b, ReadOnlyBufferException.class, new Runnable() {
+            public void run() {
+                String s = new String(new char[rb.remaining() + 1]);
+                rb.append(s);
+            }});
+
+#end[char]
+
         if (rb.getClass().getName().startsWith("java.nio.Heap")) {
 
             tryCatch(b, ReadOnlyBufferException.class, new Runnable() {
--- a/jdk/test/java/nio/Buffer/Basic.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/test/java/nio/Buffer/Basic.java	Thu Oct 11 16:59:50 2012 -0700
@@ -25,7 +25,7 @@
  * @summary Unit test for buffers
  * @bug 4413135 4414911 4416536 4416562 4418782 4471053 4472779 4490253 4523725
  *      4526177 4463011 4660660 4661219 4663521 4782970 4804304 4938424 6231529
- *      6221101 6234263 6535542 6591971 6593946 6795561 7190219
+ *      6221101 6234263 6535542 6591971 6593946 6795561 7190219 7199551
  * @author Mark Reinhold
  */
 
--- a/jdk/test/java/nio/Buffer/BasicByte.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/test/java/nio/Buffer/BasicByte.java	Thu Oct 11 16:59:50 2012 -0700
@@ -335,7 +335,7 @@
         fail(problem + String.format(": x=%s y=%s", x, y), xb, yb);
     }
 
-    private static void tryCatch(Buffer b, Class ex, Runnable thunk) {
+    private static void tryCatch(Buffer b, Class<?> ex, Runnable thunk) {
         boolean caught = false;
         try {
             thunk.run();
@@ -350,7 +350,7 @@
             fail(ex.getName() + " not thrown", b);
     }
 
-    private static void tryCatch(byte [] t, Class ex, Runnable thunk) {
+    private static void tryCatch(byte [] t, Class<?> ex, Runnable thunk) {
         tryCatch(ByteBuffer.wrap(t), ex, thunk);
     }
 
@@ -681,6 +681,14 @@
                     bulkPutBuffer(rb);
                 }});
 
+        // put(ByteBuffer) should not change source position
+        final ByteBuffer src = ByteBuffer.allocate(1);
+        tryCatch(b, ReadOnlyBufferException.class, new Runnable() {
+                public void run() {
+                    rb.put(src);
+                 }});
+        ck(src, src.position(), 0);
+
         tryCatch(b, ReadOnlyBufferException.class, new Runnable() {
                 public void run() {
                     rb.compact();
@@ -744,6 +752,22 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
         if (rb.getClass().getName().startsWith("java.nio.Heap")) {
 
             tryCatch(b, ReadOnlyBufferException.class, new Runnable() {
--- a/jdk/test/java/nio/Buffer/BasicChar.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/test/java/nio/Buffer/BasicChar.java	Thu Oct 11 16:59:50 2012 -0700
@@ -335,7 +335,7 @@
         fail(problem + String.format(": x=%s y=%s", x, y), xb, yb);
     }
 
-    private static void tryCatch(Buffer b, Class ex, Runnable thunk) {
+    private static void tryCatch(Buffer b, Class<?> ex, Runnable thunk) {
         boolean caught = false;
         try {
             thunk.run();
@@ -350,7 +350,7 @@
             fail(ex.getName() + " not thrown", b);
     }
 
-    private static void tryCatch(char [] t, Class ex, Runnable thunk) {
+    private static void tryCatch(char [] t, Class<?> ex, Runnable thunk) {
         tryCatch(CharBuffer.wrap(t), ex, thunk);
     }
 
@@ -681,6 +681,14 @@
                     bulkPutBuffer(rb);
                 }});
 
+        // put(CharBuffer) should not change source position
+        final CharBuffer src = CharBuffer.allocate(1);
+        tryCatch(b, ReadOnlyBufferException.class, new Runnable() {
+                public void run() {
+                    rb.put(src);
+                 }});
+        ck(src, src.position(), 0);
+
         tryCatch(b, ReadOnlyBufferException.class, new Runnable() {
                 public void run() {
                     rb.compact();
@@ -744,6 +752,22 @@
 
 
 
+
+
+        // 7199551
+        tryCatch(b, ReadOnlyBufferException.class, new Runnable() {
+            public void run() {
+                String s = new String(new char[rb.remaining() + 1]);
+                rb.put(s);
+            }});
+        tryCatch(b, ReadOnlyBufferException.class, new Runnable() {
+            public void run() {
+                String s = new String(new char[rb.remaining() + 1]);
+                rb.append(s);
+            }});
+
+
+
         if (rb.getClass().getName().startsWith("java.nio.Heap")) {
 
             tryCatch(b, ReadOnlyBufferException.class, new Runnable() {
--- a/jdk/test/java/nio/Buffer/BasicDouble.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/test/java/nio/Buffer/BasicDouble.java	Thu Oct 11 16:59:50 2012 -0700
@@ -335,7 +335,7 @@
         fail(problem + String.format(": x=%s y=%s", x, y), xb, yb);
     }
 
-    private static void tryCatch(Buffer b, Class ex, Runnable thunk) {
+    private static void tryCatch(Buffer b, Class<?> ex, Runnable thunk) {
         boolean caught = false;
         try {
             thunk.run();
@@ -350,7 +350,7 @@
             fail(ex.getName() + " not thrown", b);
     }
 
-    private static void tryCatch(double [] t, Class ex, Runnable thunk) {
+    private static void tryCatch(double [] t, Class<?> ex, Runnable thunk) {
         tryCatch(DoubleBuffer.wrap(t), ex, thunk);
     }
 
@@ -681,6 +681,14 @@
                     bulkPutBuffer(rb);
                 }});
 
+        // put(DoubleBuffer) should not change source position
+        final DoubleBuffer src = DoubleBuffer.allocate(1);
+        tryCatch(b, ReadOnlyBufferException.class, new Runnable() {
+                public void run() {
+                    rb.put(src);
+                 }});
+        ck(src, src.position(), 0);
+
         tryCatch(b, ReadOnlyBufferException.class, new Runnable() {
                 public void run() {
                     rb.compact();
@@ -744,6 +752,22 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
         if (rb.getClass().getName().startsWith("java.nio.Heap")) {
 
             tryCatch(b, ReadOnlyBufferException.class, new Runnable() {
--- a/jdk/test/java/nio/Buffer/BasicFloat.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/test/java/nio/Buffer/BasicFloat.java	Thu Oct 11 16:59:50 2012 -0700
@@ -335,7 +335,7 @@
         fail(problem + String.format(": x=%s y=%s", x, y), xb, yb);
     }
 
-    private static void tryCatch(Buffer b, Class ex, Runnable thunk) {
+    private static void tryCatch(Buffer b, Class<?> ex, Runnable thunk) {
         boolean caught = false;
         try {
             thunk.run();
@@ -350,7 +350,7 @@
             fail(ex.getName() + " not thrown", b);
     }
 
-    private static void tryCatch(float [] t, Class ex, Runnable thunk) {
+    private static void tryCatch(float [] t, Class<?> ex, Runnable thunk) {
         tryCatch(FloatBuffer.wrap(t), ex, thunk);
     }
 
@@ -681,6 +681,14 @@
                     bulkPutBuffer(rb);
                 }});
 
+        // put(FloatBuffer) should not change source position
+        final FloatBuffer src = FloatBuffer.allocate(1);
+        tryCatch(b, ReadOnlyBufferException.class, new Runnable() {
+                public void run() {
+                    rb.put(src);
+                 }});
+        ck(src, src.position(), 0);
+
         tryCatch(b, ReadOnlyBufferException.class, new Runnable() {
                 public void run() {
                     rb.compact();
@@ -744,6 +752,22 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
         if (rb.getClass().getName().startsWith("java.nio.Heap")) {
 
             tryCatch(b, ReadOnlyBufferException.class, new Runnable() {
--- a/jdk/test/java/nio/Buffer/BasicInt.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/test/java/nio/Buffer/BasicInt.java	Thu Oct 11 16:59:50 2012 -0700
@@ -335,7 +335,7 @@
         fail(problem + String.format(": x=%s y=%s", x, y), xb, yb);
     }
 
-    private static void tryCatch(Buffer b, Class ex, Runnable thunk) {
+    private static void tryCatch(Buffer b, Class<?> ex, Runnable thunk) {
         boolean caught = false;
         try {
             thunk.run();
@@ -350,7 +350,7 @@
             fail(ex.getName() + " not thrown", b);
     }
 
-    private static void tryCatch(int [] t, Class ex, Runnable thunk) {
+    private static void tryCatch(int [] t, Class<?> ex, Runnable thunk) {
         tryCatch(IntBuffer.wrap(t), ex, thunk);
     }
 
@@ -681,6 +681,14 @@
                     bulkPutBuffer(rb);
                 }});
 
+        // put(IntBuffer) should not change source position
+        final IntBuffer src = IntBuffer.allocate(1);
+        tryCatch(b, ReadOnlyBufferException.class, new Runnable() {
+                public void run() {
+                    rb.put(src);
+                 }});
+        ck(src, src.position(), 0);
+
         tryCatch(b, ReadOnlyBufferException.class, new Runnable() {
                 public void run() {
                     rb.compact();
@@ -744,6 +752,22 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
         if (rb.getClass().getName().startsWith("java.nio.Heap")) {
 
             tryCatch(b, ReadOnlyBufferException.class, new Runnable() {
--- a/jdk/test/java/nio/Buffer/BasicLong.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/test/java/nio/Buffer/BasicLong.java	Thu Oct 11 16:59:50 2012 -0700
@@ -335,7 +335,7 @@
         fail(problem + String.format(": x=%s y=%s", x, y), xb, yb);
     }
 
-    private static void tryCatch(Buffer b, Class ex, Runnable thunk) {
+    private static void tryCatch(Buffer b, Class<?> ex, Runnable thunk) {
         boolean caught = false;
         try {
             thunk.run();
@@ -350,7 +350,7 @@
             fail(ex.getName() + " not thrown", b);
     }
 
-    private static void tryCatch(long [] t, Class ex, Runnable thunk) {
+    private static void tryCatch(long [] t, Class<?> ex, Runnable thunk) {
         tryCatch(LongBuffer.wrap(t), ex, thunk);
     }
 
@@ -681,6 +681,14 @@
                     bulkPutBuffer(rb);
                 }});
 
+        // put(LongBuffer) should not change source position
+        final LongBuffer src = LongBuffer.allocate(1);
+        tryCatch(b, ReadOnlyBufferException.class, new Runnable() {
+                public void run() {
+                    rb.put(src);
+                 }});
+        ck(src, src.position(), 0);
+
         tryCatch(b, ReadOnlyBufferException.class, new Runnable() {
                 public void run() {
                     rb.compact();
@@ -744,6 +752,22 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
         if (rb.getClass().getName().startsWith("java.nio.Heap")) {
 
             tryCatch(b, ReadOnlyBufferException.class, new Runnable() {
--- a/jdk/test/java/nio/Buffer/BasicShort.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/test/java/nio/Buffer/BasicShort.java	Thu Oct 11 16:59:50 2012 -0700
@@ -335,7 +335,7 @@
         fail(problem + String.format(": x=%s y=%s", x, y), xb, yb);
     }
 
-    private static void tryCatch(Buffer b, Class ex, Runnable thunk) {
+    private static void tryCatch(Buffer b, Class<?> ex, Runnable thunk) {
         boolean caught = false;
         try {
             thunk.run();
@@ -350,7 +350,7 @@
             fail(ex.getName() + " not thrown", b);
     }
 
-    private static void tryCatch(short [] t, Class ex, Runnable thunk) {
+    private static void tryCatch(short [] t, Class<?> ex, Runnable thunk) {
         tryCatch(ShortBuffer.wrap(t), ex, thunk);
     }
 
@@ -681,6 +681,14 @@
                     bulkPutBuffer(rb);
                 }});
 
+        // put(ShortBuffer) should not change source position
+        final ShortBuffer src = ShortBuffer.allocate(1);
+        tryCatch(b, ReadOnlyBufferException.class, new Runnable() {
+                public void run() {
+                    rb.put(src);
+                 }});
+        ck(src, src.position(), 0);
+
         tryCatch(b, ReadOnlyBufferException.class, new Runnable() {
                 public void run() {
                     rb.compact();
@@ -744,6 +752,22 @@
 
 
 
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
         if (rb.getClass().getName().startsWith("java.nio.Heap")) {
 
             tryCatch(b, ReadOnlyBufferException.class, new Runnable() {
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/nio/channels/Selector/ChangingInterests.java	Thu Oct 11 16:59:50 2012 -0700
@@ -0,0 +1,190 @@
+/*
+ * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/* @test
+ * @bug 7200742
+ * @summary Test that Selector doesn't spin when changing interest ops
+ */
+
+import java.net.*;
+import java.nio.ByteBuffer;
+import java.nio.channels.*;
+import static java.nio.channels.SelectionKey.*;
+import java.io.IOException;
+
+public class ChangingInterests {
+
+    static int OPS[] = { 0, OP_WRITE, OP_READ, (OP_WRITE|OP_READ) };
+
+    static String toOpsString(int ops) {
+        String s = "";
+        if ((ops & OP_READ) > 0)
+            s += "POLLIN";
+        if ((ops & OP_WRITE) > 0) {
+            if (s.length() > 0)
+                s += "|";
+            s += "POLLOUT";
+        }
+        if (s.length() == 0)
+            s = "0";
+        return "(" + s + ")";
+    }
+
+    static void write1(SocketChannel peer) throws IOException {
+        peer.write(ByteBuffer.wrap(new byte[1]));
+        // give time for other end to be readable
+        try {
+            Thread.sleep(50);
+        } catch (InterruptedException ignore) { }
+    }
+
+    static void drain(SocketChannel sc) throws IOException {
+        ByteBuffer buf = ByteBuffer.allocate(100);
+        int n;
+        while ((n = sc.read(buf)) > 0) {
+            buf.rewind();
+        }
+    }
+
+    /**
+     * Changes the given key's interest set from one set to another and then
+     * checks the selected key set and the key's channel.
+     */
+    static void testChange(SelectionKey key, int from, int to) throws IOException {
+        Selector sel = key.selector();
+        assertTrue(sel.keys().size() == 1, "Only one channel should be registered");
+
+        // ensure that channel is registered with the "from" interest set
+        key.interestOps(from);
+        sel.selectNow();
+        sel.selectedKeys().clear();
+
+        // change to the "to" interest set
+        key.interestOps(to);
+        System.out.println("select...");
+        int selected = sel.selectNow();
+        System.out.println("" + selected + " channel(s) selected");
+
+        int expected = (to == 0) ? 0 : 1;
+        assertTrue(selected == expected, "Expected " + expected);
+
+        // check selected keys
+        for (SelectionKey k: sel.selectedKeys()) {
+            assertTrue(k == key, "Unexpected key selected");
+
+            boolean readable = k.isReadable();
+            boolean writable = k.isWritable();
+
+            System.out.println("key readable: " + readable);
+            System.out.println("key writable: " + writable);
+
+            if ((to & OP_READ) == 0) {
+                assertTrue(!readable, "Not expected to be readable");
+            } else {
+                assertTrue(readable, "Expected to be readable");
+            }
+
+            if ((to & OP_WRITE) == 0) {
+                assertTrue(!writable, "Not expected to be writable");
+            } else {
+                assertTrue(writable, "Expected to be writable");
+            }
+
+            sel.selectedKeys().clear();
+        }
+    }
+
+    /**
+     * Tests that given Selector's select method blocks.
+     */
+    static void testForSpin(Selector sel) throws IOException {
+        System.out.println("Test for spin...");
+        long start = System.currentTimeMillis();
+        int count = 3;
+        while (count-- > 0) {
+            int selected = sel.select(1000);
+            System.out.println("" + selected + " channel(s) selected");
+            assertTrue(selected == 0, "Channel should not be selected");
+        }
+        long dur = System.currentTimeMillis() - start;
+        assertTrue(dur > 1000, "select was too short");
+    }
+
+    public static void main(String[] args) throws IOException {
+        InetAddress lh = InetAddress.getLocalHost();
+
+        // create loopback connection
+        ServerSocketChannel ssc =
+            ServerSocketChannel.open().bind(new InetSocketAddress(0));
+
+        final SocketChannel sc = SocketChannel.open();
+        sc.connect(new InetSocketAddress(lh, ssc.socket().getLocalPort()));
+        SocketChannel peer = ssc.accept();
+
+        sc.configureBlocking(false);
+
+        // ensure that channel "sc" is readable
+        write1(peer);
+
+        try (Selector sel = Selector.open()) {
+            SelectionKey key = sc.register(sel, 0);
+            sel.selectNow();
+
+            // test all transitions
+            for (int from: OPS) {
+                for (int to: OPS) {
+
+                    System.out.println(toOpsString(from) + " -> " + toOpsString(to));
+
+                    testChange(key, from, to);
+
+                    // if the interst ops is now 0 then Selector should not spin
+                    if (to == 0)
+                        testForSpin(sel);
+
+                    // if interest ops is now OP_READ then make non-readable
+                    // and test that Selector does not spin.
+                    if (to == OP_READ) {
+                        System.out.println("Drain channel...");
+                        drain(sc);
+                        testForSpin(sel);
+                        System.out.println("Make channel readable again");
+                        write1(peer);
+                    }
+
+                    System.out.println();
+                }
+            }
+
+        } finally {
+            sc.close();
+            peer.close();
+            ssc.close();
+        }
+    }
+
+    static void assertTrue(boolean v, String msg) {
+        if (!v) throw new RuntimeException(msg);
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/nio/channels/etc/AdaptorCloseAndInterrupt.java	Thu Oct 11 16:59:50 2012 -0700
@@ -0,0 +1,221 @@
+/*
+ * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/* @test
+ * @bug 7184932
+ * @summary Test asynchronous close and interrupt of timed socket adapter methods
+ */
+
+import java.io.*;
+import java.nio.*;
+import java.nio.channels.*;
+import java.nio.channels.spi.AbstractSelectableChannel;
+import java.net.*;
+import java.util.concurrent.Callable;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.TimeUnit;
+import java.util.Random;
+
+
+public class AdaptorCloseAndInterrupt {
+    private static final ScheduledExecutorService pool =
+        Executors.newScheduledThreadPool(1);
+    final ServerSocketChannel listener;
+    final DatagramChannel peer;
+    final int port;
+
+    public AdaptorCloseAndInterrupt() {
+        listener = null;
+        peer = null;
+        port = -1;
+    }
+
+    public AdaptorCloseAndInterrupt(ServerSocketChannel listener) {
+        this.listener = listener;
+        this.port = listener.socket().getLocalPort();
+        this.peer = null;
+    }
+
+    public AdaptorCloseAndInterrupt(DatagramChannel listener) {
+        this.peer = listener;
+        this.port = peer.socket().getLocalPort();
+        this.listener = null;
+    }
+
+    public static void main(String args[]) throws Exception {
+        try {
+            try (ServerSocketChannel listener = ServerSocketChannel.open()) {
+                listener.socket().bind(null);
+                new AdaptorCloseAndInterrupt(listener).scReadAsyncClose();
+                new AdaptorCloseAndInterrupt(listener).scReadAsyncInterrupt();
+            }
+
+            try (DatagramChannel peer = DatagramChannel.open()) {
+                peer.socket().bind(null);
+                new AdaptorCloseAndInterrupt(peer).dcReceiveAsyncClose();
+                new AdaptorCloseAndInterrupt(peer).dcReceiveAsyncInterrupt();
+            }
+
+            new AdaptorCloseAndInterrupt().ssAcceptAsyncClose();
+            new AdaptorCloseAndInterrupt().ssAcceptAsyncInterrupt();
+        } finally {
+            pool.shutdown();
+        }
+        System.out.println("Test Passed");
+    }
+
+    void scReadAsyncClose() throws IOException {
+        try {
+            SocketChannel sc = SocketChannel.open(new InetSocketAddress(
+                "127.0.0.1", port));
+            sc.socket().setSoTimeout(30*1000);
+
+            doAsyncClose(sc);
+
+            try {
+                sc.socket().getInputStream().read(new byte[100]);
+                throw new RuntimeException("read should not have completed");
+            } catch (ClosedChannelException expected) {}
+
+            if (!sc.socket().isClosed())
+                throw new RuntimeException("socket is not closed");
+        } finally {
+            // accept connection and close it.
+            listener.accept().close();
+        }
+    }
+
+    void scReadAsyncInterrupt() throws IOException {
+        try {
+            final SocketChannel sc = SocketChannel.open(new InetSocketAddress(
+                "127.0.0.1", port));
+            sc.socket().setSoTimeout(30*1000);
+
+            doAsyncInterrupt();
+
+            try {
+                sc.socket().getInputStream().read(new byte[100]);
+                throw new RuntimeException("read should not have completed");
+            } catch (ClosedByInterruptException expected) {
+                Thread.currentThread().interrupted();
+            }
+
+            if (!sc.socket().isClosed())
+                throw new RuntimeException("socket is not closed");
+        } finally {
+            // accept connection and close it.
+            listener.accept().close();
+        }
+    }
+
+    void dcReceiveAsyncClose() throws IOException {
+        DatagramChannel dc = DatagramChannel.open();
+        dc.connect(new InetSocketAddress(
+            "127.0.0.1", port));
+        dc.socket().setSoTimeout(30*1000);
+
+        doAsyncClose(dc);
+
+        try {
+            dc.socket().receive(new DatagramPacket(new byte[100], 100));
+            throw new RuntimeException("receive should not have completed");
+        } catch (ClosedChannelException expected) {}
+
+        if (!dc.socket().isClosed())
+            throw new RuntimeException("socket is not closed");
+    }
+
+    void dcReceiveAsyncInterrupt() throws IOException {
+        DatagramChannel dc = DatagramChannel.open();
+        dc.connect(new InetSocketAddress(
+            "127.0.0.1", port));
+        dc.socket().setSoTimeout(30*1000);
+
+        doAsyncInterrupt();
+
+        try {
+            dc.socket().receive(new DatagramPacket(new byte[100], 100));
+            throw new RuntimeException("receive should not have completed");
+        } catch (ClosedByInterruptException expected) {
+            Thread.currentThread().interrupted();
+        }
+
+        if (!dc.socket().isClosed())
+            throw new RuntimeException("socket is not closed");
+    }
+
+    void ssAcceptAsyncClose() throws IOException {
+        ServerSocketChannel ssc = ServerSocketChannel.open();
+        ssc.socket().bind(null);
+        ssc.socket().setSoTimeout(30*1000);
+
+        doAsyncClose(ssc);
+
+        try {
+            ssc.socket().accept();
+            throw new RuntimeException("accept should not have completed");
+        } catch (ClosedChannelException expected) {}
+
+        if (!ssc.socket().isClosed())
+            throw new RuntimeException("socket is not closed");
+    }
+
+    void ssAcceptAsyncInterrupt() throws IOException {
+        ServerSocketChannel ssc = ServerSocketChannel.open();
+        ssc.socket().bind(null);
+        ssc.socket().setSoTimeout(30*1000);
+
+        doAsyncInterrupt();
+
+        try {
+            ssc.socket().accept();
+            throw new RuntimeException("accept should not have completed");
+        } catch (ClosedByInterruptException expected) {
+            Thread.currentThread().interrupted();
+        }
+
+        if (!ssc.socket().isClosed())
+            throw new RuntimeException("socket is not closed");
+    }
+
+    void doAsyncClose(final AbstractSelectableChannel sc) {
+        AdaptorCloseAndInterrupt.pool.schedule(new Callable<Void>() {
+            public Void call() throws Exception {
+                sc.close();
+                return null;
+            }
+        }, new Random().nextInt(1000), TimeUnit.MILLISECONDS);
+    }
+
+    void doAsyncInterrupt() {
+        final Thread current = Thread.currentThread();
+        AdaptorCloseAndInterrupt.pool.schedule(new Callable<Void>() {
+            public Void call() throws Exception {
+                current.interrupt();
+                return null;
+            }
+        }, new Random().nextInt(1000), TimeUnit.MILLISECONDS);
+    }
+
+}
--- a/jdk/test/java/nio/file/Files/CopyAndMove.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/test/java/nio/file/Files/CopyAndMove.java	Thu Oct 11 16:59:50 2012 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2008, 2012, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -22,7 +22,7 @@
  */
 
 /* @test
- * @bug 4313887 6838333 6917021 7006126
+ * @bug 4313887 6838333 6917021 7006126 6950237
  * @summary Unit test for java.nio.file.Files copy and move methods
  * @library ..
  * @build CopyAndMove PassThroughFileSystem
@@ -41,12 +41,14 @@
 public class CopyAndMove {
     static final Random rand = new Random();
     static boolean heads() { return rand.nextBoolean(); }
+    private static boolean testPosixAttributes = false;
 
     public static void main(String[] args) throws Exception {
         Path dir1 = TestUtil.createTemporaryDirectory();
         try {
 
             // Same directory
+            testPosixAttributes = getFileStore(dir1).supportsFileAttributeView("posix");
             testCopyFileToFile(dir1, dir1, TestUtil.supportsLinks(dir1));
             testMove(dir1, dir1, TestUtil.supportsLinks(dir1));
 
@@ -57,6 +59,8 @@
             try {
                 boolean testSymbolicLinks =
                     TestUtil.supportsLinks(dir1) && TestUtil.supportsLinks(dir2);
+                testPosixAttributes = getFileStore(dir1).supportsFileAttributeView("posix") &&
+                                      getFileStore(dir2).supportsFileAttributeView("posix");
                 testCopyFileToFile(dir1, dir2, testSymbolicLinks);
                 testMove(dir1, dir2, testSymbolicLinks);
             } finally {
@@ -65,6 +69,8 @@
 
             // Target is location associated with custom provider
             Path dir3 = PassThroughFileSystem.create().getPath(dir1.toString());
+            testPosixAttributes = getFileStore(dir1).supportsFileAttributeView("posix") &&
+                                  getFileStore(dir3).supportsFileAttributeView("posix");
             testCopyFileToFile(dir1, dir3, false);
             testMove(dir1, dir3, false);
 
@@ -90,7 +96,12 @@
         if (!attrs1.isSymbolicLink()) {
             long time1 = attrs1.lastModifiedTime().toMillis();
             long time2 = attrs2.lastModifiedTime().toMillis();
-            assertTrue(time1 == time2);
+
+            if (time1 != time2) {
+                System.err.format("File time for %s is %s\n", attrs1.fileKey(), attrs1.lastModifiedTime());
+                System.err.format("File time for %s is %s\n", attrs2.fileKey(), attrs2.lastModifiedTime());
+                assertTrue(false);
+            }
         }
 
         // check size
@@ -207,7 +218,10 @@
         if (source.getFileSystem().provider() == target.getFileSystem().provider()) {
 
             // verify POSIX attributes
-            if (posixAttributes != null && !basicAttributes.isSymbolicLink()) {
+            if (posixAttributes != null &&
+                !basicAttributes.isSymbolicLink() &&
+                testPosixAttributes)
+            {
                 checkPosixAttributes(posixAttributes,
                     readAttributes(target, PosixFileAttributes.class, NOFOLLOW_LINKS));
             }
@@ -636,7 +650,9 @@
 
                 // check POSIX attributes are copied
                 String os = System.getProperty("os.name");
-                if (os.equals("SunOS") || os.equals("Linux")) {
+                if ((os.equals("SunOS") || os.equals("Linux")) &&
+                    testPosixAttributes)
+                {
                     checkPosixAttributes(
                         readAttributes(source, PosixFileAttributes.class, linkOptions),
                         readAttributes(target, PosixFileAttributes.class, linkOptions));
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/text/BreakIterator/Bug7104012.java	Thu Oct 11 16:59:50 2012 -0700
@@ -0,0 +1,78 @@
+/*
+ * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+/*
+ * @test
+ * @bug 7104012
+ * @summary Confirm that AIOBE is not thrown.
+ */
+
+import java.text.*;
+import java.util.*;
+
+public class Bug7104012 {
+
+    public static void main(String[] args) {
+        boolean err = false;
+
+        List<String> data = new ArrayList<>();
+        data.add("\udb40");
+        data.add(" \udb40");
+        data.add("\udc53");
+        data.add(" \udc53");
+        data.add(" \udb40\udc53");
+        data.add("\udb40\udc53");
+        data.add("ABC \udb40\udc53 123");
+        data.add("\udb40\udc53 ABC \udb40\udc53");
+
+        for (Locale locale : Locale.getAvailableLocales()) {
+            List<BreakIterator> breakIterators = new ArrayList<>();
+            breakIterators.add(BreakIterator.getCharacterInstance(locale));
+            breakIterators.add(BreakIterator.getLineInstance(locale));
+            breakIterators.add(BreakIterator.getSentenceInstance(locale));
+            breakIterators.add(BreakIterator.getWordInstance(locale));
+
+            for (BreakIterator bi : breakIterators) {
+                for (String str : data) {
+                    try {
+                        bi.setText(str);
+                        bi.first();
+                        while (bi.next() != BreakIterator.DONE) { }
+                        bi.last();
+                        while (bi.previous() != BreakIterator.DONE) { }
+                    }
+                    catch (ArrayIndexOutOfBoundsException ex) {
+                        System.out.println("    " + data.indexOf(str)
+                            + ": BreakIterator(" + locale
+                            + ") threw AIOBE.");
+                        err = true;
+                    }
+                }
+            }
+        }
+
+        if (err) {
+            throw new RuntimeException("Unexpected exeption.");
+        }
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/text/Collator/Bug7200119.java	Thu Oct 11 16:59:50 2012 -0700
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 7200119
+ * @summary verify that getAvailableLocales() contains Locale.US
+ */
+import java.text.*;
+import java.util.*;
+
+public class Bug7200119 {
+    public static void main(String[] args) {
+        List<Locale> avail = Arrays.asList(Collator.getAvailableLocales());
+
+        if (!avail.contains(Locale.US)) {
+            throw new RuntimeException("Failed.");
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/text/Format/DecimalFormat/Bug7196316.java	Thu Oct 11 16:59:50 2012 -0700
@@ -0,0 +1,73 @@
+/*
+ * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+/*
+ * @test
+ * @bug 7196316
+ * @summary Confirm that a non-default rounding mode is used even after deserialization.
+ */
+
+
+import java.io.*;
+import java.math.*;
+import java.text.*;
+
+public class Bug7196316 {
+
+    private static final String filename = "bug7196316.ser";
+
+    public static void main(String[] args) throws Exception {
+        DecimalFormat df;
+        RoundingMode mode = RoundingMode.DOWN;
+        double given = 6.6;
+        String expected;
+        String actual;
+
+        try (ObjectOutputStream os
+                 = new ObjectOutputStream(new FileOutputStream(filename))) {
+            df = new DecimalFormat("#");
+            df.setRoundingMode(mode);
+            expected = df.format(given);
+            os.writeObject(df);
+        }
+
+        try (ObjectInputStream is
+                 = new ObjectInputStream(new FileInputStream(filename))) {
+            df = (DecimalFormat)is.readObject();
+        }
+
+        RoundingMode newMode = df.getRoundingMode();
+        if (mode != newMode) {
+            throw new RuntimeException("Unexpected roundig mode: " + newMode);
+        } else {
+            actual = df.format(given);
+            if (!expected.equals(actual)) {
+                throw new RuntimeException("Unexpected formatted result: \""
+                              + actual + "\"");
+            } else {
+                System.out.println("Passed: Expected rounding mode (" + newMode
+                    + ") & formatted result: \"" + actual + "\"");
+            }
+        }
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/text/Format/DecimalFormat/FormatMicroBenchmark.java	Thu Oct 11 16:59:50 2012 -0700
@@ -0,0 +1,926 @@
+/*
+ * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 7050528
+ * @summary Set of micro-benchmarks testing throughput of java.text.DecimalFormat.format()
+ * @author Olivier Lagneau
+ * @run main FormatMicroBenchmark
+ */
+
+/* This is a set of micro-benchmarks testing throughput of java.text.DecimalFormat.format().
+ * It never fails.
+ *
+ * Usage and arguments:
+ *  - Run with no argument skips the whole benchmark and exits.
+ *  - Run with "-help" as first argument calls the usage() method and exits.
+ *  - Run with "-doit" runs the benchmark with summary details.
+ *  - Run with "-verbose" provides additional details on the run.
+ *
+ * Example run :
+ *   java -Xms500m -Xmx500m -XX:NewSize=400m FormatMicroBenchmark -doit -verbose
+ *
+ * Running with jtreg:
+ *  The jtreg header "run" tag options+args must be changed to avoid skipping
+ *  the execution. here is an example of run options:
+ *  "main/othervm -Xms500m -Xmx500m -XX:NewSize=400m FormatMicroBenchmark -doit"
+ *
+ * Note:
+ *  - Vm options -Xms, -Xmx, -XX:NewSize must be set correctly for
+ *    getting reliable numbers. Otherwise GC activity may corrupt results.
+ *    As of jdk80b48 using "-Xms500m -Xmx500m -XX:NewSize=400m" covers
+ *    all cases.
+ *  - Optionally using "-XX:+printGC" option provides information that
+ *    helps checking any GC activity while benches are run.
+ *
+ * Vm Options:
+ *  - Vm options to use (as of jdk80b48):
+ *     fast-path case :     -Xms128m -Xmx128m -XX:NewSize=100m
+ *     non fast-path case:  -Xms500m -Xmx500m -XX:NewSize=400m
+ *    or use worst case (non fast-path above) with both types of algorithm.
+ *
+ *  - use -XX:+PrintGC to verify memory consumption of the benchmarks.
+ *    (See "Checking Memory Consumption" below).
+ *
+ * Description:
+ *
+ *  Fast-path algorithm for format(double...)  call stack is very different  of
+ *  the standard call stack. Where the  standard algorithm for formating double
+ *  uses internal class sun.misc.FloatingDecimal and its dtoa(double) method to
+ *  provide digits,  fast-path embeds its own  algorithm for  binary to decimal
+ *  string conversion.
+ *
+ *  FloatingDecimal always converts completely  the passed double to  a string.
+ *  Fast-path converts  only to the needed digits  since it follows constraints
+ *  on both the pattern rule,  the  DecimalFormat instance properties, and  the
+ *  passed double.
+ *
+ *  Micro benchmarks below measure  the throughput for formating double  values
+ *  using NumberFormat.format(double)  call stack.  The  standard DecimalFormat
+ *  call stack as well as the  fast-path algorithm implementation are sensitive
+ *  to the nature of the passed double values regarding throughput performance.
+ *
+ *  These benchmarks are useful both  for measuring the global performance gain
+ *  of fast-path and to check that any modification done on fast-path algorithm
+ *  does not bring any regression in the performance boost of fast-path.
+ *
+ *  Note  that these benchmarks  will provide numbers  without any knowledge of
+ *  the  implementation of DecimalFormat class. So  to check regression any run
+ *  should be compared to another reference run with  a previous JDK, wether or
+ *  not this previous reference JDK contains fast-path implementation.
+ *
+ *  The eight benchmarks below are dedicated to measure throughput on different
+ *  kinds of double that all fall in the fast-path case (all in Integer range):
+ *
+ *  - Integer case : used double values are all "integer-like" (ex: -12345.0).
+ *    This is the benchFormatInteger micro-benchmark.
+ *
+ *  - Fractional case : double values are "fractional" (ex: -0.12345).
+ *    This is the benchFormatFractional micro-benchmark.
+ *
+ *  - Small integral case : like Integer case but double values are all limited
+ *    in their magnitude, from -500.0 to 500.0 if the number of iterations N is
+ *    set to 500000.
+ *    This is the benchFormatSmallIntegral micro-benchmark.
+ *
+ *  - Fractional All Nines : doubles values have fractional part that is very
+ *    close to "999" (decimal pattern), or "99" (currency pattern),
+ *    or "0000...".
+ *    This is the benchFormatFractionalAllNines micro-benchmark.
+ *
+ *  - All Nines : double values are such that both integral and fractional
+ *    part consist only of '9' digits. None of these values are rounded up.
+ *    This is the benchFormatAllNines micro-benchmark.
+ *
+ *  - Fair simple case : calling J the loop variable and iterating over
+ *    the N number of iterations, used double values are computed as
+ *    d = (double) J + J*seed
+ *    where seed is a very small value that adds a fractional part and adds a
+ *    small number to integral part. Provides fairly distributed double values.
+ *    This is the benchFormatFairSimple micro-benchmark.
+ *
+ *  - Fair case : this is a combination of small integral case and fair simple
+ *    case. Double values are limited in their magnitude but follow a parabolic
+ *    curve y = x**2 / K, keeping large magnitude only for large values of J.
+ *    The intent is trying to reproduce a distribution of double values as could
+ *    be found in a business application, with most values in either the low
+ *    range or the high range.
+ *    This is the benchFormatFair micro-benchmark.
+ *
+ *  - Tie cases: values are very close to a tie case (iii...ii.fff5)
+ *    That is the worst situation that can happen for Fast-path algorithm when
+ *    considering throughput.
+ *    This is the benchFormatTie micro-benchmark.
+ *
+ *  For  all  of  the micro-benchmarks,  the  throughput load   of the eventual
+ *  additional computations inside the loop is calculated  prior to running the
+ *  benchmark, and provided in the output.  That may be  useful since this load
+ *  may vary for each architecture or machine configuration.
+ *
+ *  The "-verbose" flag,  when set, provides the  throughput  load numbers, the
+ *  time spent for  each run of  a benchmark, as  well as an estimation  of the
+ *  memory consumed  by the  runs.  Beware of  incremental  GCs, see  "Checking
+ *  Memory  Consumption" section below. Every run   should be done with correct
+ *  ms, mx, and NewSize vm options to get fully reliable numbers.
+ *
+ *  The output provides the  mean time needed for  a benchmark after the server
+ *  jit compiler has done its optimization work if  any. Thus only the last but
+ *  first three runs are taken into account in the time measurement (server jit
+ *  compiler shows  to have  done full  optimization  in  most cases  after the
+ *  second run, given a base number of iterations set to 500000).
+ *
+ *  The program cleans up memory (stabilizeMemory() method) between each run of
+ *  the benchmarks to make sure that  no garbage collection activity happens in
+ *  measurements. However that does not  preclude incremental GCs activity that
+ *  may  happen during the micro-benchmark if  -Xms, -Xmx, and NewSize options
+ *  have not been tuned and set correctly.
+ *
+ * Checking Memory Consumption:
+ *
+ *  For getting confidence  in the throughput numbers, there  must not give any
+ *  GC activity during the benchmark runs. That  means that specific VM options
+ *  related to memory must be tuned for any given implementation of the JDK.
+ *
+ *  Running with "-verbose" arguments will provide  clues of the memory consumed
+ *  but  is   not enough,  since  any   unexpected  incremental  GC  may  lower
+ *  artificially the estimation of the memory consumption.
+ *
+ *  Options to  set are -Xms, -Xmx,  -XX:NewSize, plus -XX:+PrintGC to evaluate
+ *  correctly  the  values of  these options. When  running "-verbose", varying
+ *  numbers reported for memory consumption may  indicate bad choices for these
+ *  options.
+ *
+ *  For jdk80b25, fast-path shows a consuption of ~60Mbs for 500000 iterations
+ *  while a jdk without fast-path will consume ~260Mbs for each benchmark run.
+ *  Indeed these values will vary depending on the jdk used.
+ *
+ *  Correct option settings found jdk80b48 were :
+ *     fast-path :     -Xms128m -Xmx128m -XX:NewSize=100m
+ *     non fast-path : -Xms500m -Xmx500m -XX:NewSize=400m
+ *  Greater values can be provided safely but not smaller ones.
+ * ----------------------------------------------------------------------
+ */
+
+import java.util.*;
+import java.text.NumberFormat;
+import java.text.DecimalFormat;
+
+public class FormatMicroBenchmark {
+
+    // The number of times the bench method will be run (must be at least 4).
+    private static final int NB_RUNS = 20;
+
+    // The bench* methods below all iterates over [-MAX_RANGE , +MAX_RANGE] integer values.
+    private static final int MAX_RANGE = 500000;
+
+    // Flag for more details on each bench run (default is no).
+    private static boolean Verbose = false;
+
+    // Should we really execute the benches ? (no by default).
+    private static boolean DoIt = false;
+
+    // Prints out a message describing how to run the program.
+    private static void usage() {
+        System.out.println(
+            "This is a set of micro-benchmarks testing throughput of " +
+            "java.text.DecimalFormat.format(). It never fails.\n\n" +
+            "Usage and arguments:\n" +
+            " - Run with no argument skips the whole benchmark and exits.\n" +
+            " - Run with \"-help\" as first argument prints this message and exits.\n" +
+            " - Run with \"-doit\" runs the benchmark with summary details.\n" +
+            " - Run with \"-verbose\" provides additional details on the run.\n\n" +
+            "Example run :\n" +
+            "   java -Xms500m -Xmx500m -XX:NewSize=400m FormatMicroBenchmark -doit -verbose\n\n" +
+            "Note: \n" +
+            " - Vm options -Xms, -Xmx, -XX:NewSize must be set correctly for \n" +
+            "   getting reliable numbers. Otherwise GC activity may corrupt results.\n" +
+            "   As of jdk80b48 using \"-Xms500m -Xmx500m -XX:NewSize=400m\" covers \n" +
+            "   all cases.\n" +
+            " - Optionally using \"-XX:+printGC\" option provides information that \n" +
+            "   helps checking any GC activity while benches are run.\n\n" +
+            "Look at the heading comments and description in source code for " +
+            "detailed information.\n");
+    }
+
+    /* We will call stabilizeMemory before each call of benchFormat***().
+     * This in turn tries to clean up as much memory as possible.
+     * As a safe bound we limit number of System.gc() calls to 10,
+     * but most of the time two calls to System.gc() will be enough.
+     * If memory reporting is asked for, the method returns the difference
+     * of free memory between entering an leaving the method.
+     */
+    private static long stabilizeMemory(boolean reportConsumedMemory) {
+        final long oneMegabyte = 1024L * 1024L;
+
+        long refMemory = 0;
+        long initialMemoryLeft = Runtime.getRuntime().freeMemory();
+        long currMemoryLeft = initialMemoryLeft;
+        int nbGCCalls = 0;
+
+        do {
+            nbGCCalls++;
+
+            refMemory = currMemoryLeft;
+            System.gc();
+            currMemoryLeft = Runtime.getRuntime().freeMemory();
+
+        } while ((Math.abs(currMemoryLeft - refMemory) > oneMegabyte) &&
+                 (nbGCCalls < 10));
+
+        if (Verbose &&
+            reportConsumedMemory)
+            System.out.println("Memory consumed by previous run : " +
+                               (currMemoryLeft - initialMemoryLeft)/oneMegabyte + "Mbs.");
+
+        return currMemoryLeft;
+    }
+
+
+    // ---------- Integer only based bench --------------------
+    private static final String INTEGER_BENCH = "benchFormatInteger";
+    private static String benchFormatInteger(NumberFormat nf) {
+        String str = "";
+        for (int j = - MAX_RANGE; j <= MAX_RANGE; j++)
+            str = nf.format((double) j);
+        return str;
+    }
+
+    // This reproduces the throughput load added in benchFormatInteger
+    static double integerThroughputLoad() {
+        double d = 0.0d;
+        for (int j = - MAX_RANGE; j <= MAX_RANGE; j++) {
+            d = (double) j;
+        }
+        return d;
+    }
+
+    // Runs integerThroughputLoad and calculate its mean load
+    static void calculateIntegerThroughputLoad() {
+        int nbRuns = NB_RUNS;
+        long elapsedTime = 0;
+        double foo;
+
+        for (int i = 1; i <= nbRuns; i++) {
+
+            long startTime = System.nanoTime();
+            foo = integerThroughputLoad();
+            long estimatedTime = System.nanoTime() - startTime;
+            if (i > 3) elapsedTime += estimatedTime / 1000;
+        }
+
+
+        if (Verbose)
+            System.out.println(
+               "calculated throughput load for " + INTEGER_BENCH +
+               " bench is = " + (elapsedTime / (nbRuns - 3)) + " microseconds");
+    }
+
+    // ---------- Fractional only based bench --------------------
+    private static final String FRACTIONAL_BENCH = "benchFormatFractional";
+    private static String benchFormatFractional(NumberFormat nf) {
+        String str = "";
+        double floatingN = 1.0d / (double) MAX_RANGE;
+        for (int j = - MAX_RANGE; j <= MAX_RANGE; j++)
+            str = nf.format(floatingN * (double) j);
+        return str;
+    }
+
+    // This reproduces the throughput load added in benchFormatFractional
+    static double fractionalThroughputLoad() {
+        double d = 0.0d;
+        double floatingN = 1.0d / (double) MAX_RANGE;
+        for (int j = - MAX_RANGE; j <= MAX_RANGE; j++) {
+            d = floatingN * (double) j;
+        }
+        return d;
+    }
+
+    // Runs fractionalThroughputLoad and calculate its mean load
+    static void calculateFractionalThroughputLoad() {
+        int nbRuns = NB_RUNS;
+        long elapsedTime = 0;
+        double foo;
+
+        for (int i = 1; i <= nbRuns; i++) {
+
+            long startTime = System.nanoTime();
+            foo = fractionalThroughputLoad();
+            long estimatedTime = System.nanoTime() - startTime;
+            if (i > 3) elapsedTime += estimatedTime / 1000;
+        }
+
+        if (Verbose)
+        System.out.println(
+            "calculated throughput load for " + FRACTIONAL_BENCH +
+            " bench is = " + (elapsedTime / (nbRuns - 3)) + " microseconds");
+    }
+
+    // ---------- An Small Integral bench --------------------
+    //  that limits the magnitude of tested double values
+    private static final String SMALL_INTEGRAL_BENCH = "benchFormatSmallIntegral";
+    private static String benchFormatSmallIntegral(NumberFormat nf) {
+        String str = "";
+        for (int j = - MAX_RANGE; j <= MAX_RANGE; j++)
+            str = nf.format(((double) j) / 1000.0d);
+        return str;
+    }
+
+    // This reproduces the throughput load added in benchFormatSmallIntegral
+    static double smallIntegralThroughputLoad() {
+        double d = 0.0d;
+        for (int j = - MAX_RANGE; j <= MAX_RANGE; j++) {
+            d = (double) j / 1000.0d;
+        }
+        return d;
+    }
+
+    // Runs small_integralThroughputLoad and calculate its mean load
+    static void calculateSmallIntegralThroughputLoad() {
+        int nbRuns = NB_RUNS;
+        long elapsedTime = 0;
+        double foo;
+
+        for (int i = 1; i <= nbRuns; i++) {
+
+            long startTime = System.nanoTime();
+            foo = smallIntegralThroughputLoad();
+            long estimatedTime = System.nanoTime() - startTime;
+            if (i > 3) elapsedTime += estimatedTime / 1000;
+        }
+
+        if (Verbose)
+        System.out.println(
+            "calculated throughput load for " + SMALL_INTEGRAL_BENCH +
+            " bench is = " + (elapsedTime / (nbRuns - 3)) + " microseconds");
+    }
+
+    // ---------- A fair and simple bench --------------------
+    private static final String FAIR_SIMPLE_BENCH = "benchFormatFairSimple";
+    private static String benchFormatFairSimple(NumberFormat nf, boolean isCurrency) {
+        String str = "";
+        double seed = isCurrency ?  0.0010203040506070809 : 0.00010203040506070809;
+        double d = (double) -MAX_RANGE;
+        for (int j = - MAX_RANGE; j <= MAX_RANGE; j++) {
+            d = d  + 1.0d + seed;
+            str = nf.format(d);
+        }
+        return str;
+    }
+
+    // This reproduces the throughput load added in benchFormatFairSimple
+    static double fairSimpleThroughputLoad() {
+        double seed =  0.00010203040506070809;
+        double delta = 0.0d;
+        double d = (double) -MAX_RANGE;
+        for (int j = - MAX_RANGE; j <= MAX_RANGE; j++) {
+            d = d + 1.0d + seed;
+        }
+        return d;
+    }
+
+    // Runs fairThroughputLoad and calculate its mean load
+    static void calculateFairSimpleThroughputLoad() {
+        int nbRuns = NB_RUNS;
+        long elapsedTime = 0;
+        double foo;
+
+        for (int i = 1; i <= nbRuns; i++) {
+
+            long startTime = System.nanoTime();
+            foo = fairSimpleThroughputLoad();
+            long estimatedTime = System.nanoTime() - startTime;
+            if (i > 3) elapsedTime += estimatedTime / 1000;
+        }
+
+        if (Verbose)
+        System.out.println(
+            "calculated throughput load for " + FAIR_SIMPLE_BENCH +
+            " bench is = " + (elapsedTime / (nbRuns - 3)) + " microseconds");
+    }
+
+    // ---------- Fractional part is only made of nines bench --------------
+    private static final String FRACTIONAL_ALL_NINES_BENCH = "benchFormatFractionalAllNines";
+    private static String benchFormatFractionalAllNines(NumberFormat nf, boolean isCurrency) {
+        String str = "";
+        double fractionalEven = isCurrency ?  0.993000001 : 0.99930000001;
+        double fractionalOdd  = isCurrency ?  0.996000001 : 0.99960000001;
+        double fractional;
+        double d;
+        for (int j = - MAX_RANGE; j <= MAX_RANGE; j++) {
+            if ((j & 1) == 0)
+                fractional = fractionalEven;
+            else
+                fractional = fractionalOdd;
+            if ( j >= 0)
+                d = (double ) j + fractional;
+            else d = (double) j - fractional;
+            str = nf.format(d);
+        }
+        return str;
+    }
+
+    // This reproduces the throughput load added in benchFormatFractionalAllNines
+    static double fractionalAllNinesThroughputLoad() {
+        double fractionalEven = 0.99930000001;
+        double fractionalOdd  = 0.99960000001;
+        double fractional;
+        double d = 0.0d;
+        for (int j = - MAX_RANGE; j <= MAX_RANGE; j++) {
+            if ((j & 1) == 0)
+                fractional = fractionalEven;
+            else fractional = fractionalOdd;
+            if ( j >= 0)
+                d = (double ) j + fractional;
+            else d = (double) j - fractional;
+        }
+        return d;
+    }
+
+    // Runs fractionalAllNinesThroughputLoad and calculate its mean load
+    static void calculateFractionalAllNinesThroughputLoad() {
+        int nbRuns = NB_RUNS;
+        long elapsedTime = 0;
+        double foo;
+
+        for (int i = 1; i <= nbRuns; i++) {
+
+            long startTime = System.nanoTime();
+            foo = fractionalAllNinesThroughputLoad();
+            long estimatedTime = System.nanoTime() - startTime;
+            if (i > 3) elapsedTime += estimatedTime / 1000;
+        }
+
+        if (Verbose)
+            System.out.println(
+               "calculated throughput load for " + FRACTIONAL_ALL_NINES_BENCH +
+               " bench is = " + (elapsedTime / (nbRuns - 3)) + " microseconds");
+    }
+
+    // ---------- Number is only made of nines bench --------------
+    private static final String ALL_NINES_BENCH = "benchFormatAllNines";
+    private static String benchFormatAllNines(NumberFormat nf, boolean isCurrency) {
+        String str = "";
+        double[] decimaAllNines =
+            {9.9993, 99.9993, 999.9993, 9999.9993, 99999.9993,
+             999999.9993, 9999999.9993, 99999999.9993, 999999999.9993};
+        double[] currencyAllNines =
+            {9.993, 99.993, 999.993, 9999.993, 99999.993,
+             999999.993, 9999999.993, 99999999.993, 999999999.993};
+        double[] valuesArray = (isCurrency) ? currencyAllNines : decimaAllNines;
+        double seed = 1.0 / (double) MAX_RANGE;
+        double d;
+        int id;
+        for (int j = - MAX_RANGE; j <= MAX_RANGE; j++) {
+            id = (j >=  0) ? j % 9 : -j % 9;
+            if ((j & 1) == 0)
+                d = valuesArray[id] + id * seed;
+            else
+                d = valuesArray[id] - id * seed;
+            str = nf.format(d);
+        }
+        return str;
+    }
+
+    // This reproduces the throughput load added in benchFormatAllNines
+    static double allNinesThroughputLoad() {
+        double[] decimaAllNines =
+            {9.9993, 99.9993, 999.9993, 9999.9993, 99999.9993,
+             999999.9993, 9999999.9993, 99999999.9993, 999999999.9993};
+        double[] valuesArray = decimaAllNines;
+        double seed = 1.0 / (double) MAX_RANGE;
+        double d = 0.0d;
+        int id;
+        for (int j = - MAX_RANGE; j <= MAX_RANGE; j++) {
+            id = (j >=  0) ? j % 9 : -j % 9;
+            if ((j & 1) == 0)
+                d = valuesArray[id] + id * seed;
+            else
+                d = valuesArray[id] - id * seed;
+        }
+        return d;
+    }
+
+    // Runs allNinesThroughputLoad and calculate its mean load
+    static void calculateAllNinesThroughputLoad() {
+        int nbRuns = NB_RUNS;
+        long elapsedTime = 0;
+        double foo;
+
+        for (int i = 1; i <= nbRuns; i++) {
+
+            long startTime = System.nanoTime();
+            foo = allNinesThroughputLoad();
+            long estimatedTime = System.nanoTime() - startTime;
+            if (i > 3) elapsedTime += estimatedTime / 1000;
+        }
+
+        if (Verbose)
+            System.out.println(
+               "calculated throughput load for " + ALL_NINES_BENCH +
+               " bench is = " + (elapsedTime / (nbRuns - 3)) + " microseconds");
+    }
+
+
+
+    // --- A fair bench trying (hopefully) to reproduce business applicatons  ---
+
+    /*  benchFormatFair uses the following formula :
+     *   y = F(x) = sign(x) * x**2 * ((1000/MAX_RANGE)**2).
+     *
+     *  which converts in the loop as (if j is the loop index) :
+     *   x = double(j)
+     *   k = 1000.0d * double(MAX_RANGE)
+     *   y = sign(j) * x**2 * k**2
+     *
+     *  This is a flattened parabolic curve where only the j values
+     *  in [-1000, 1000] will provide y results in [-1, +1] interval,
+     *  and for abs(j) >= 1000 the result y will be greater than 1.
+     *
+     *  The difference with benchFormatSmallIntegral is that since y results
+     *  follow a parabolic curve the magnitude of y grows much more rapidly
+     *  and closer to j values when abs(j) >= 1000:
+     *   - for |j| < 1000,  SmallIntegral(j) < 1.0 and fair(j) < 1.0
+     *   - for j in [1000, 10000[
+     *      SmallIntegral(j) is in [1, 10[
+     *      Fair(j) is in [4, 400[
+     *   - for j in [10000,100000[
+     *      SmallIntegral(j) is in [10, 100[
+     *      Fair(j) is in [400,40000[
+     *   - for j in [100000,1000000[
+     *      SmallIntegral(j) is in [100, 1000[
+     *      Fair(j) is in [40000, 4000000[
+     *
+     *  Since double values for j less than 100000 provide only 4 digits in the
+     *  integral, values greater than 250000 provide at least 6 digits, and 500000
+     *  computes to 1000000, the distribution is roughly half with less than 5
+     *  digits and half with at least 6 digits in the integral part.
+     *
+     *  Compared to FairSimple bench, this represents an application where 20% of
+     *  the double values to format are less than 40000.0 absolute value.
+     *
+     *  Fair(j) is close to the magnitude of j when j > 100000 and is hopefully
+     *  more representative of what may be found in general in business apps.
+     *  (assumption : there will be mainly either small or large values, and
+     *   less values in middle range).
+     *
+     *  We could get even more precise distribution of values using formula :
+     *   y = sign(x) * abs(x)**n * ((1000 / MAX_RANGE)**n) where n > 2,
+     *  or even well-known statistics function to fine target such distribution,
+     *  but we have considred that the throughput load for calculating y would
+     *  then be too high. We thus restrain the use of a power of 2 formula.
+     */
+
+    private static final String FAIR_BENCH = "benchFormatFair";
+    private static String benchFormatFair(NumberFormat nf) {
+        String str = "";
+        double k = 1000.0d / (double) MAX_RANGE;
+        k *= k;
+
+        double d;
+        double absj;
+        double jPowerOf2;
+        for (int j = - MAX_RANGE; j <= MAX_RANGE; j++) {
+            absj = (double) j;
+            jPowerOf2 = absj * absj;
+            d = k * jPowerOf2;
+            if (j < 0) d = -d;
+            str = nf.format(d);
+        }
+        return str;
+    }
+
+    // This is the exact throughput load added in benchFormatFair
+    static double fairThroughputLoad() {
+        double k = 1000.0d / (double) MAX_RANGE;
+        k *= k;
+
+        double d = 0.0d;
+        double absj;
+        double jPowerOf2;
+        for (int j = - MAX_RANGE; j <= MAX_RANGE; j++) {
+            absj = (double) j;
+            jPowerOf2 = absj * absj;
+            d = k * jPowerOf2;
+            if (j < 0) d = -d;
+        }
+        return d;
+    }
+
+    // Runs fairThroughputLoad and calculate its mean load
+    static void calculateFairThroughputLoad() {
+        int nbRuns = NB_RUNS;
+        long elapsedTime = 0;
+        double foo;
+
+        for (int i = 1; i <= nbRuns; i++) {
+
+            long startTime = System.nanoTime();
+            foo = fairThroughputLoad();
+            long estimatedTime = System.nanoTime() - startTime;
+            if (i > 3) elapsedTime += estimatedTime / 1000;
+        }
+
+        if (Verbose)
+            System.out.println(
+               "calculated throughput load for " + FAIR_BENCH +
+               " bench is = " + (elapsedTime / (nbRuns - 3)) + " microseconds");
+    }
+
+    // ---------- All double values are very close to a tie --------------------
+    // i.e. like 123.1235 (for decimal case) or 123.125 (for currency case).
+
+    private static final String TIE_BENCH = "benchFormatTie";
+    private static String benchFormatTie(NumberFormat nf, boolean isCurrency) {
+        double d;
+        String str = "";
+        double fractionaScaling = (isCurrency) ? 1000.0d : 10000.0d;
+        int fixedFractionalPart = (isCurrency) ? 125 : 1235;
+        for (int j = - MAX_RANGE; j <= MAX_RANGE; j++) {
+            d = (((double) j * fractionaScaling) +
+                 (double) fixedFractionalPart) / fractionaScaling;
+            str = nf.format(d);
+        }
+        return str;
+    }
+
+    // This is the exact throughput load added in benchFormatTie
+    static double tieThroughputLoad(boolean isCurrency) {
+        double d = 0.0d;
+        double fractionaScaling = (isCurrency) ? 1000.0d : 10000.0d;
+        int fixedFractionalPart = (isCurrency) ? 125 : 1235;
+        for (int j = - MAX_RANGE; j <= MAX_RANGE; j++) {
+            d = (((double) j * fractionaScaling) +
+                 (double) fixedFractionalPart) / fractionaScaling;
+        }
+        return d;
+    }
+
+    // Runs tieThroughputLoad and calculate its mean load
+    static void calculateTieThroughputLoad(boolean isCurrency) {
+        int nbRuns = NB_RUNS;
+        long elapsedTime = 0;
+        double foo;
+
+        for (int i = 1; i <= nbRuns; i++) {
+
+            long startTime = System.nanoTime();
+            foo = tieThroughputLoad(isCurrency);
+            long estimatedTime = System.nanoTime() - startTime;
+            if (i > 3) elapsedTime += estimatedTime / 1000;
+        }
+
+        if (Verbose)
+            System.out.println(
+               "calculated throughput load for " + TIE_BENCH +
+               " bench is = " + (elapsedTime / (nbRuns - 3)) + " microseconds");
+    }
+
+
+    // Print statistics for passed times results of benchName.
+    static void printPerfResults(long[] times, String benchName) {
+        int nbBenches = times.length;
+
+        long totalTimeSpent = 0;
+        long meanTimeSpent;
+
+        double variance = 0;
+        double standardDeviation = 0;
+
+        // Calculates mean spent time
+        for (int i = 1; i <= nbBenches; i++)
+            totalTimeSpent += times[i-1];
+        meanTimeSpent = totalTimeSpent / nbBenches;
+
+        // Calculates standard deviation
+        for (int j = 1; j <= nbBenches; j++)
+            variance += Math.pow(((double)times[j-1] - (double)meanTimeSpent), 2);
+        variance = variance / (double) times.length;
+        standardDeviation = Math.sqrt(variance) / meanTimeSpent;
+
+        // Print result and statistics for benchName
+        System.out.println(
+           "Statistics (starting at 4th bench) for bench " + benchName +
+           "\n for last " + nbBenches +
+           " runs out of " + NB_RUNS +
+           " , each with 2x" + MAX_RANGE + " format(double) calls : " +
+           "\n  mean exec time = " + meanTimeSpent + " microseconds" +
+           "\n  standard deviation = " + String.format("%.3f", standardDeviation) + "% \n");
+    }
+
+    public static void main(String[] args) {
+
+        if (args.length >= 1) {
+            // Parse args, just checks expected ones. Ignore others or dups.
+            if (args[0].equals("-help")) {
+                usage();
+                return;
+            }
+
+            for (String s : args) {
+                if (s.equals("-doit"))
+                    DoIt = true;
+                else if (s.equals("-verbose"))
+                    Verbose = true;
+            }
+        } else {
+            // No arguments, skips the benchmarks and exits.
+            System.out.println(
+                "Test skipped with success by default. See -help for details.");
+            return;
+        }
+
+        if (!DoIt) {
+            if (Verbose)
+                usage();
+            System.out.println(
+                "Test skipped and considered successful.");
+            return;
+        }
+
+        System.out.println("Single Threaded micro benchmark evaluating " +
+                           "the throughput of java.text.DecimalFormat.format() call stack.\n");
+
+        String fooString = "";
+
+        // Run benches for decimal instance
+        DecimalFormat df = (DecimalFormat) NumberFormat.getInstance(Locale.US);
+        System.out.println("Running with a decimal instance of DecimalFormat.");
+
+        calculateIntegerThroughputLoad();
+        fooString =
+            BenchType.INTEGER_BENCH.runBenchAndPrintStatistics(NB_RUNS, df, false);
+
+        calculateFractionalThroughputLoad();
+        fooString =
+            BenchType.FRACTIONAL_BENCH.runBenchAndPrintStatistics(NB_RUNS, df, false);
+
+        calculateSmallIntegralThroughputLoad();
+        fooString =
+            BenchType.SMALL_INTEGRAL_BENCH.runBenchAndPrintStatistics(NB_RUNS, df, false);
+
+        calculateFractionalAllNinesThroughputLoad();
+        fooString =
+            BenchType.FRACTIONAL_ALL_NINES_BENCH.runBenchAndPrintStatistics(NB_RUNS, df, false);
+
+        calculateAllNinesThroughputLoad();
+        fooString =
+            BenchType.ALL_NINES_BENCH.runBenchAndPrintStatistics(NB_RUNS, df, false);
+
+        calculateFairSimpleThroughputLoad();
+        fooString =
+            BenchType.FAIR_SIMPLE_BENCH.runBenchAndPrintStatistics(NB_RUNS, df, false);
+
+        calculateFairThroughputLoad();
+        fooString =
+            BenchType.FAIR_BENCH.runBenchAndPrintStatistics(NB_RUNS, df, false);
+
+        calculateTieThroughputLoad(false);
+        fooString =
+            BenchType.TIE_BENCH.runBenchAndPrintStatistics(NB_RUNS, df, false);
+
+        // Run benches for currency instance
+        DecimalFormat cf = (DecimalFormat) NumberFormat.getCurrencyInstance(Locale.US);
+        System.out.println("Running with a currency instance of DecimalFormat.");
+
+        calculateIntegerThroughputLoad();
+        fooString =
+            BenchType.INTEGER_BENCH.runBenchAndPrintStatistics(NB_RUNS, cf, false);
+
+        calculateFractionalThroughputLoad();
+        fooString =
+            BenchType.FRACTIONAL_BENCH.runBenchAndPrintStatistics(NB_RUNS, cf, false);
+
+        calculateSmallIntegralThroughputLoad();
+        fooString =
+            BenchType.SMALL_INTEGRAL_BENCH.runBenchAndPrintStatistics(NB_RUNS, cf, false);
+
+        calculateFractionalAllNinesThroughputLoad();
+        fooString =
+            BenchType.FRACTIONAL_ALL_NINES_BENCH.runBenchAndPrintStatistics(NB_RUNS, cf, false);
+
+        calculateAllNinesThroughputLoad();
+        fooString =
+            BenchType.ALL_NINES_BENCH.runBenchAndPrintStatistics(NB_RUNS, cf, false);
+
+        calculateFairSimpleThroughputLoad();
+        fooString =
+            BenchType.FAIR_SIMPLE_BENCH.runBenchAndPrintStatistics(NB_RUNS, cf, false);
+
+        calculateFairThroughputLoad();
+        fooString =
+            BenchType.FAIR_BENCH.runBenchAndPrintStatistics(NB_RUNS, cf, false);
+
+        calculateTieThroughputLoad(false);
+        fooString =
+            BenchType.TIE_BENCH.runBenchAndPrintStatistics(NB_RUNS, cf, false);
+
+    }
+
+    // This class to factorise what would be duplicated otherwise.
+    static enum BenchType {
+
+        INTEGER_BENCH("benchFormatInteger"),
+        FRACTIONAL_BENCH("benchFormatFractional"),
+        SMALL_INTEGRAL_BENCH("benchFormatSmallIntegral"),
+        FAIR_SIMPLE_BENCH("benchFormatFairSimple"),
+        FRACTIONAL_ALL_NINES_BENCH("benchFormatFractionalAllNines"),
+        ALL_NINES_BENCH("benchFormatAllNines"),
+        FAIR_BENCH("benchFormatFair"),
+        TIE_BENCH("benchFormatTie");
+
+        private final String name;
+
+        BenchType(String name) {
+            this.name = name;
+        }
+
+        String runBenchAndPrintStatistics(int nbRuns,
+                         NumberFormat nf,
+                         boolean isCurrency) {
+
+            // We eliminate the first 3 runs in the time measurements
+            // to let C2 do complete compilation and optimization work.
+            long[] elapsedTimes = new long[nbRuns - 3];
+
+            System.out.println("Now running " + nbRuns + " times bench " + name);
+
+            String str = "";
+            for (int i = 1; i <= nbRuns; i++) {
+
+                stabilizeMemory(false);
+                long startTime = System.nanoTime();
+
+                switch(this) {
+                case INTEGER_BENCH :
+                    str = benchFormatInteger(nf);
+                    break;
+                case FRACTIONAL_BENCH :
+                    str = benchFormatFractional(nf);
+                    break;
+                case SMALL_INTEGRAL_BENCH :
+                    str = benchFormatSmallIntegral(nf);
+                    break;
+                case FRACTIONAL_ALL_NINES_BENCH :
+                    str = benchFormatFractionalAllNines(nf, isCurrency);
+                    break;
+                case ALL_NINES_BENCH :
+                    str = benchFormatAllNines(nf, isCurrency);
+                    break;
+                case FAIR_SIMPLE_BENCH :
+                    str = benchFormatFairSimple(nf, isCurrency);
+                    break;
+                case FAIR_BENCH :
+                    str = benchFormatFair(nf);
+                    break;
+                case TIE_BENCH :
+                    str = benchFormatTie(nf, isCurrency);
+                    break;
+
+                default:
+                }
+
+
+                long estimatedTime = System.nanoTime() - startTime;
+                if (i > 3)
+                    elapsedTimes[i-4] = estimatedTime / 1000;
+
+                if (Verbose)
+                    System.out.println(
+                                       "calculated time for " + name +
+                                       " bench " + i + " is = " +
+                                       (estimatedTime / 1000) + " microseconds");
+                else System.out.print(".");
+
+                stabilizeMemory(true);
+            }
+
+            System.out.println(name + " Done.");
+
+            printPerfResults(elapsedTimes, name);
+
+            return str;
+        }
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/text/Format/DecimalFormat/GoldenDoubleValues.java	Thu Oct 11 16:59:50 2012 -0700
@@ -0,0 +1,965 @@
+/*
+ * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/* Set of constants and values used in RoundingAndPropertyTest.java.
+ *
+ * There are 5 different information in this class:
+ * - TestLocale is the locale used by RoundingAndPropertyTest regression test
+ *   when calling DecimalFormat.format() on either the set of DecimalGoldenValues
+ *   or CurrencyGoldenValues.
+ *   See main method of RoundingAndPropertyTest.
+ *
+ * - FullLocalizationTestLocale is the locale used by RoundingAndPropertyTest
+ *   regression test when calling DecimalFormat.format() on the set of values
+ *   (DecimalLocalizationValues) used to test that localization of digits
+ *   happens correctly when needed.
+ *   See main method of RoundingAndPropertyTest.
+ *
+ * - DecimalLocalizationValues is an array containing all the double values used
+ *   to check that localization of digits happens correctly when needed.
+ *   See RoundingAndPropertyTest.testLocalizationValues() method.
+ *
+ * - DecimalGoldenValues and CurrencyGoldenValues are arrays containing all the
+ *   double values that will be used as input when checking correctness of
+ *   results returned by DecimalFormat.format().
+ *   2 arrays are needed since decimal and currency formatting patterns require
+ *   a different number of digits after decimal point.
+ *   See RoundingAndPropertyTest.testGoldenValues() method.
+ *
+ * - PROPERTY_CHECK_POSITIVE_VALUE and PROPERTY_CHECK_NEGATIVE_VALUE are the
+ *   double values used for testing the validity of the property changes call
+ *   in the fast-path case. The locale used in that case is TestLocale.
+ *   See RoundingAndPropertyTest.testSettersAndFastPath() method.
+ */
+
+import java.util.*;
+
+class GoldenDoubleValues {
+
+    // TestLocale is the testing locale used by RoundingAndPropertyTest test,
+    // when testing the golden double values
+    static final Locale TestLocale = new Locale("en", "US");
+
+
+    // FullTestLocale is the testing locale used by RoundingAndPropertyTest test,
+    // when testing full localization of double values.
+    static final Locale FullLocalizationTestLocale = new Locale("hi", "IN");
+
+
+    /* Below are the two double values used for exercising the changes of
+     * of DecimalFormat properties and symbols. These values are also used
+     * as golden values (see golden arrays below).
+     */
+
+    /* PROPERTY_CHECK_NEGATIVE_VALUE is the negative double value used for
+     * testing the validity of the property changes for fast-path.
+     * See testSettersAndFastPath() in RoundingAndPropertyTest test.
+     */
+    static final double PROPERTY_CHECK_NEGATIVE_VALUE = -2147483646.2334997d;
+
+    /* PROPERTY_CHECK_POSITIVE_VALUE is the positive double value used for
+     * testing the validity of the property changes for fast-path.
+     * See testSettersAndFastPath() in RoundingAndPropertyTest test.
+     */
+    static final double PROPERTY_CHECK_POSITIVE_VALUE =  2147483646.2335003d;
+
+    /* --- Array of double values to test localization ------------------------
+     *
+     * For most locales, effective localization does not happen on digits, i.e.
+     * the digits are not changed due to localization. In order to check that
+     * fast-path localize correctly digits in such a case, the array of double
+     * values below deals with all the case of localization that may happen on
+     * digits
+     */
+    static final double[] DecimalLocalizationValues = {
+        1.123,
+        12.123,
+        123.123,
+        1234.123,
+        12345.123,
+        123456.123,
+        1234567.123,
+        12345678.123,
+        123456789.123,
+        1234567890.123,
+        1234.0,
+        1234.9,
+        1234.99,
+        1234.999
+    };
+
+
+    /* --- Arrays of golden double values ----------------------------------
+     *
+     * The   GoldenValues arrays  are used   as input values   for checking the
+     * correctness  of  the    DecimalFormat.format()  call  results  done   in
+     * RoundingAndPropertyTest regression test. The results are compared to the
+     * expected ones  found in  GoldenFormattedValues.  For each value   in the
+     * arrays  there  is   a corresponding    expected  string  result   found,
+     * represented as an array  of unicode values, at  the same index  in the
+     * related GoldenFormattedValues array.  The string returned by  the format
+     * call and the found in GoldenFormattedValues array  must be equal for the
+     * result to be considered valid.
+     * See RoundingAndPropertyTest.testGoldenValues() method.
+     *
+     * We  need 2  such  GoldenValues  arrays  since the decimal  and  currency
+     * formatting rules require different number of digits after decimal point.
+     *
+     * Thus we have two different arrays of golden values:
+     *  - DecimalGoldenValues for the decimal case.
+     *  - CurrencyGoldenValues for the currency case.
+     *
+     * They are associated to related GoldenFormattedValues arrays, generated by
+     * running RoundingAndPropertyTest with a "gengold" argument:
+     *  - DecimalGoldenFormattedValues for the decimal case.
+     *  - CurrencyGoldenFormattedValues for the currency case.
+     * These two generated arrays are found in GoldenFormattedValues.java file.
+     *
+     * The  impact of the formatting rules  is as follows,  because the pattern
+     * rule for  the  fractional  part is different   for  decimal and currency
+     * patterns:
+     *  - in decimal case one must output the first non-zero 3 digits of
+     *    fractional part 1.1232 => "1.123" and 1.12016789 => "1.12"
+     *  - in currency case the first 2 fractional digits are always output
+     *    1.1232 => "1.12" and 1.0016789 => "1.00"
+     *
+     * Thus we  need a different  number of  fractional digits when  we specify
+     * below the golden double values to check, and most of the decimal and
+     * currency golden values differ only in the number of fractional digits.
+     *
+     * The list below exercises almost all code pathes of the fast-path
+     * algorithm except localization of digits.
+     */
+
+    // --- The set of golden values for the Decimal formatting case --------
+    static final double[] DecimalGoldenValues = {
+        // Testing of specific values
+        +0.0,
+        -0.0,
+        Double.MIN_VALUE,
+        Double.MIN_NORMAL,
+        PROPERTY_CHECK_NEGATIVE_VALUE,
+        PROPERTY_CHECK_POSITIVE_VALUE,
+        -2147483647.9996,
+        2147483647.9996,
+        -1999999999.9994997,
+        1999999999.9995003,
+        // Testing fast-path range checks (all outside bounds)
+        Double.NaN,
+        Double.POSITIVE_INFINITY,
+        Double.NEGATIVE_INFINITY,
+        Double.MAX_VALUE,
+        -9876543210.9876543,
+        9876543210.9876543,
+        -1234567890.1234567E128,
+        1234567890.1234567E128,
+        // Testing of integral string size
+        1.123,
+        12.123,
+        123.123,
+        1234.123,
+        12345.123,
+        123456.123,
+        1234567.123,
+        12345678.123,
+        123456789.123,
+        1234567890.123,
+        -1.123,
+        -12.123,
+        -123.123,
+        -1234.123,
+        -12345.123,
+        -123456.123,
+        -1234567.123,
+        -12345678.123,
+        -123456789.123,
+        -1234567890.123,
+        // Testing of fractional string size
+        0.1,
+        0.12,
+        0.123,
+        0.1234,
+        10.1,
+        10.12,
+        10.123,
+        10.1234,
+        100.1,
+        100.12,
+        100.123,
+        100.1234,
+        1000.1,
+        1000.12,
+        1000.123,
+        1000.1234,
+        10000.1,
+        10000.12,
+        10000.123,
+        10000.1234,
+        100000.1,
+        100000.12,
+        100000.123,
+        100000.1234,
+        1000000.1,
+        1000000.12,
+        1000000.123,
+        1000000.1234,
+        10000000.1,
+        10000000.12,
+        10000000.123,
+        10000000.1234,
+        100000000.1,
+        100000000.12,
+        100000000.123,
+        100000000.1234,
+        1000000000.1,
+        1000000000.12,
+        1000000000.123,
+        1000000000.1234,
+        -0.1,
+        -0.12,
+        -0.123,
+        -0.1234,
+        -10.1,
+        -10.12,
+        -10.123,
+        -10.1234,
+        -100.1,
+        -100.12,
+        -100.123,
+        -100.1234,
+        -1000.1,
+        -1000.12,
+        -1000.123,
+        -1000.1234,
+        -10000.1,
+        -10000.12,
+        -10000.123,
+        -10000.1234,
+        -100000.1,
+        -100000.12,
+        -100000.123,
+        -100000.1234,
+        -1000000.1,
+        -1000000.12,
+        -1000000.123,
+        -1000000.1234,
+        -10000000.1,
+        -10000000.12,
+        -10000000.123,
+        -10000000.1234,
+        -100000000.1,
+        -100000000.12,
+        -100000000.123,
+        -100000000.1234,
+        -1000000000.1,
+        -1000000000.12,
+        -1000000000.123,
+        -1000000000.1234,
+        // Testing of special rounding cases
+        1.9993,
+        12.9993,
+        123.9993,
+        1234.9993,
+        12345.9993,
+        123456.9993,
+        1234567.9993,
+        12345678.9993,
+        123456789.9993,
+        1234567890.9993,
+        1.9996,
+        12.9996,
+        123.9996,
+        1234.9996,
+        12345.9996,
+        123456.9996,
+        1234567.9996,
+        12345678.9996,
+        123456789.9996,
+        1234567890.9996,
+        -1.9993,
+        -12.9993,
+        -123.9993,
+        -1234.9993,
+        -12345.9993,
+        -123456.9993,
+        -1234567.9993,
+        -12345678.9993,
+        -123456789.9993,
+        -1234567890.9993,
+        -1.9996,
+        -12.9996,
+        -123.9996,
+        -1234.9996,
+        -12345.9996,
+        -123456.9996,
+        -1234567.9996,
+        -12345678.9996,
+        -123456789.9996,
+        -1234567890.9996,
+        109.9996,
+        1099.9996,
+        10999.9996,
+        109999.9996,
+        1099999.9996,
+        10999999.9996,
+        109999999.9996,
+        1099999999.9996,
+        -109.9996,
+        -1099.9996,
+        -10999.9996,
+        -109999.9996,
+        -1099999.9996,
+        -10999999.9996,
+        -109999999.9996,
+        -1099999999.9996,
+        1.9996,
+        19.9996,
+        199.9996,
+        1999.9996,
+        19999.9996,
+        199999.9996,
+        1999999.9996,
+        19999999.9996,
+        199999999.9996,
+        1999999999.9996,
+        -1.9996,
+        -19.9996,
+        -199.9996,
+        -1999.9996,
+        -19999.9996,
+        -199999.9996,
+        -1999999.9996,
+        -19999999.9996,
+        -199999999.9996,
+        -1999999999.9996,
+        // Testing for all nines cases
+        9.9996,
+        99.9996,
+        999.9996,
+        9999.9996,
+        99999.9996,
+        999999.9996,
+        9999999.9996,
+        99999999.9996,
+        999999999.9996,
+        9.999,
+        99.999,
+        999.999,
+        9999.999,
+        99999.999,
+        999999.999,
+        9999999.999,
+        99999999.999,
+        999999999.999,
+        -9.9996,
+        -99.9996,
+        -999.9996,
+        -9999.9996,
+        -99999.9996,
+        -999999.9996,
+        -9999999.9996,
+        -99999999.9996,
+        -999999999.9996,
+        -9.999,
+        -99.999,
+        -999.999,
+        -9999.999,
+        -99999.999,
+        -999999.999,
+        -9999999.999,
+        -99999999.999,
+        -999999999.999,
+        // Testing for no Fractional part cases
+        1.0,
+        12.0,
+        123.0,
+        1234.0,
+        12345.0,
+        123456.0,
+        1234567.0,
+        12345678.0,
+        123456789.0,
+        1234567890.0,
+        -1.0,
+        -12.0,
+        -123.0,
+        -1234.0,
+        -12345.0,
+        -123456.0,
+        -1234567.0,
+        -12345678.0,
+        -123456789.0,
+        -1234567890.0,
+        // Testing of tricky cases
+        -2599.399999990123,
+        -2599.339999990123,
+        -2599.333999990123,
+        1.000099999999818,
+        1.000199999999818,
+        1.000299999999818,
+        1.000399999999818,
+        1.000499999999818,
+        1.000599999999818,
+        1.000699999999818,
+        1.000799999999818,
+        1.000899999999818,
+        1.000999999999818,
+        1.2224999999999980,
+        1.2224999999999981,
+        1.2224999999999982,
+        1.2224999999999983,
+        1.2224999999999984,
+        1.2224999999999985,
+        1.2224999999999986,
+        1.2224999999999987,
+        1.2224999999999988,
+        1.2224999999999989,
+        1.2224999999999990,
+        1.2224999999999991,
+        1.2224999999999992,
+        1.2224999999999993,
+        1.2224999999999994,
+        1.2224999999999995,
+        1.2224999999999996,
+        1.2224999999999997,
+        1.2224999999999998,
+        // 1.2225 and 1.2224999999999999 have the same double approximation
+        1.2225,
+        1.2225000000000001,
+        1.2225000000000002,
+        1.2225000000000003,
+        1.2225000000000004,
+        1.2225000000000005,
+        1.2225000000000006,
+        1.2225000000000007,
+        1.2225000000000008,
+        1.2225000000000009,
+        1.2225000000000010,
+        1.2225000000000011,
+        1.2225000000000012,
+        1.2225000000000013,
+        1.2225000000000014,
+        1.2225000000000015,
+        1.2225000000000016,
+        1.2225000000000017,
+        1.2225000000000018,
+        1.2225000000000019,
+        // Tricky rounding cases around tie values
+        100913.67050000005,
+        199999.99895901306,
+        251846.3465,
+        253243.8825000001,
+        365045.85349999997,
+        314734.9615,
+        541133.9755,
+        858372.1225,
+        1000999.9995000001,
+        1347505.7825,
+        3358844.1975,
+        9997979.4085,
+        9993743.1585,
+        9938671.9085,
+        3385302.5465,
+        3404642.6605,
+        3431280.0865,
+        3438756.4754999997,
+        3446053.7874999996,
+        3457917.5125,
+        3465393.9014999997,
+        3484734.0154999997,
+        3492031.3274999997,
+        3503895.0525,
+        3511371.4414999997,
+        3518668.7534999996,
+        3530532.4785,
+        3538008.8674999997,
+        3545306.1794999996,
+        3557169.9045,
+        3557348.9814999998,
+        3564646.2934999997,
+        3583986.4074999997,
+        3591283.7194999997,
+        3603147.4445,
+        3610623.8334999997,
+        3617921.1454999996,
+        3629784.8705,
+        3637261.2594999997,
+        3656422.2965,
+        3656601.3734999998,
+        3663898.6854999997,
+        3675762.4105,
+        3683238.7994999997,
+        3690536.1114999996,
+        3702399.8365,
+        3709876.2254999997,
+        3717173.5374999996,
+        3729037.2625,
+        3736513.6514999997,
+        3755853.7654999997,
+        3763151.0774999997,
+        3775014.8025,
+        3782491.1914999997,
+        3789788.5034999996,
+        3801652.2285,
+        3809128.6174999997,
+        3816425.9294999996,
+        3828289.6545,
+        3828468.7314999998,
+        3835766.0434999997,
+        3855106.1574999997,
+        3862403.4694999997,
+        3874267.1945,
+        3881743.5834999997,
+        3889040.8954999996,
+        3900904.6205,
+        3908381.0094999997,
+        3927542.0465,
+        3927721.1234999998,
+        3935018.4354999997,
+        3946882.1605,
+        3954358.5494999997,
+        3961655.8614999996,
+        3973519.5865,
+        3980995.9754999997,
+        3988293.2874999996,
+        4000157.0125,
+        4007633.4014999997,
+        4026973.5154999997,
+        4034270.8274999997,
+        4046134.5525,
+        4053610.9414999997,
+        4060908.2534999996,
+        4072771.9785,
+        4080248.3674999997,
+        4087545.6794999996,
+        4099409.4045,
+        4099588.4814999998,
+        4106885.7934999997,
+        4126225.9074999997,
+        4133523.2194999997,
+        4145386.9445,
+        4152863.3334999997,
+        4160160.6454999996,
+        4172024.3705,
+        4179500.7594999997,
+        4198661.7965,
+        4203407.2865,
+        4210704.5985,
+        4213435.4975
+    };
+
+    // --- The set of golden values for the currency formatting case --------
+    static final double[] CurrencyGoldenValues = {
+        // Testing of specific values
+        +0.0,
+        -0.0,
+        Double.MIN_VALUE,
+        Double.MIN_NORMAL,
+        PROPERTY_CHECK_NEGATIVE_VALUE,
+        PROPERTY_CHECK_POSITIVE_VALUE,
+        -2147483647.996,
+        2147483647.996,
+        -1999999999.9949997,
+        1999999999.9950003,
+        // Testing fast-path range checks (all outside bounds)
+        Double.NaN,
+        Double.POSITIVE_INFINITY,
+        Double.NEGATIVE_INFINITY,
+        Double.MAX_VALUE,
+        -9876543210.9876543,
+        9876543210.9876543,
+        -1234567890.1234567E128,
+        1234567890.1234567E128,
+        // Testing of integral string size
+        1.12,
+        12.12,
+        123.12,
+        1234.12,
+        12345.12,
+        123456.12,
+        1234567.12,
+        12345678.12,
+        123456789.12,
+        1234567890.12,
+        -1.12,
+        -12.12,
+        -123.12,
+        -1234.12,
+        -12345.12,
+        -123456.12,
+        -1234567.12,
+        -12345678.12,
+        -123456789.12,
+        -1234567890.12,
+        // Testing of fractional string size
+        0.1,
+        0.12,
+        0.123,
+        10.1,
+        10.12,
+        10.123,
+        100.1,
+        100.12,
+        100.123,
+        1000.1,
+        1000.12,
+        1000.123,
+        10000.1,
+        10000.12,
+        10000.123,
+        100000.1,
+        100000.12,
+        100000.123,
+        1000000.1,
+        1000000.12,
+        1000000.123,
+        10000000.1,
+        10000000.12,
+        10000000.123,
+        100000000.1,
+        100000000.12,
+        100000000.123,
+        1000000000.1,
+        1000000000.12,
+        1000000000.123,
+        -0.1,
+        -0.12,
+        -0.123,
+        -10.1,
+        -10.12,
+        -10.123,
+        -100.1,
+        -100.12,
+        -100.123,
+        -1000.1,
+        -1000.12,
+        -1000.123,
+        -10000.1,
+        -10000.12,
+        -10000.123,
+        -100000.1,
+        -100000.12,
+        -100000.123,
+        -1000000.1,
+        -1000000.12,
+        -1000000.123,
+        -10000000.1,
+        -10000000.12,
+        -10000000.123,
+        -100000000.1,
+        -100000000.12,
+        -100000000.123,
+        -1000000000.1,
+        -1000000000.12,
+        -1000000000.123,
+        // Testing of special rounding cases
+        1.993,
+        12.993,
+        123.993,
+        1234.993,
+        12345.993,
+        123456.993,
+        1234567.993,
+        12345678.993,
+        123456789.993,
+        1234567890.993,
+        1.996,
+        12.996,
+        123.996,
+        1234.996,
+        12345.996,
+        123456.996,
+        1234567.996,
+        12345678.996,
+        123456789.996,
+        1234567890.996,
+        -1.993,
+        -12.993,
+        -123.993,
+        -1234.993,
+        -12345.993,
+        -123456.993,
+        -1234567.993,
+        -12345678.993,
+        -123456789.993,
+        -1234567890.993,
+        -1.996,
+        -12.996,
+        -123.996,
+        -1234.996,
+        -12345.996,
+        -123456.996,
+        -1234567.996,
+        -12345678.996,
+        -123456789.996,
+        -1234567890.996,
+        109.996,
+        1099.996,
+        10999.996,
+        109999.996,
+        1099999.996,
+        10999999.996,
+        109999999.996,
+        1099999999.996,
+        -109.996,
+        -1099.996,
+        -10999.996,
+        -109999.996,
+        -1099999.996,
+        -10999999.996,
+        -109999999.996,
+        -1099999999.996,
+        1.996,
+        19.996,
+        199.996,
+        1999.996,
+        19999.996,
+        199999.996,
+        1999999.996,
+        19999999.996,
+        199999999.996,
+        1999999999.996,
+        -1.996,
+        -19.996,
+        -199.996,
+        -1999.996,
+        -19999.996,
+        -199999.996,
+        -1999999.996,
+        -19999999.996,
+        -199999999.996,
+        -1999999999.996,
+        // Testing of all nines cases
+        9.996,
+        99.996,
+        999.996,
+        9999.996,
+        99999.996,
+        999999.996,
+        9999999.996,
+        99999999.996,
+        999999999.996,
+        9.99,
+        99.99,
+        999.99,
+        9999.99,
+        99999.99,
+        999999.99,
+        9999999.99,
+        99999999.99,
+        999999999.99,
+        -9.996,
+        -99.996,
+        -999.996,
+        -9999.996,
+        -99999.996,
+        -999999.996,
+        -9999999.996,
+        -99999999.996,
+        -999999999.996,
+        -9.99,
+        -99.99,
+        -999.99,
+        -9999.99,
+        -99999.99,
+        -999999.99,
+        -9999999.99,
+        -99999999.99,
+        -999999999.99,
+        // Testing of no Fractional part cases
+        1.0,
+        12.0,
+        123.0,
+        1234.0,
+        12345.0,
+        123456.0,
+        1234567.0,
+        12345678.0,
+        123456789.0,
+        1234567890.0,
+        -1.0,
+        -12.0,
+        -123.0,
+        -1234.0,
+        -12345.0,
+        -123456.0,
+        -1234567.0,
+        -12345678.0,
+        -123456789.0,
+        -1234567890.0,
+        // Testing of tricky cases
+        -2599.399999990123,
+        -2599.339999990123,
+        -2599.333999990123,
+        1.000999999999818,
+        1.001999999999818,
+        1.002999999999818,
+        1.003999999999818,
+        1.004999999999818,
+        1.005999999999818,
+        1.006999999999818,
+        1.007999999999818,
+        1.008999999999818,
+        1.009999999999818,
+        1.224999999999980,
+        1.224999999999981,
+        1.224999999999982,
+        1.224999999999983,
+        1.224999999999984,
+        1.224999999999985,
+        1.224999999999986,
+        1.224999999999987,
+        1.224999999999988,
+        1.224999999999989,
+        1.224999999999990,
+        1.224999999999991,
+        1.224999999999992,
+        1.224999999999993,
+        1.224999999999994,
+        1.224999999999995,
+        1.224999999999996,
+        1.224999999999997,
+        1.224999999999998,
+        1.224999999999999,
+        1.225,
+        1.225000000000001,
+        1.225000000000002,
+        1.225000000000003,
+        1.225000000000004,
+        1.225000000000005,
+        1.225000000000006,
+        1.225000000000007,
+        1.225000000000008,
+        1.225000000000009,
+        1.225000000000010,
+        1.225000000000011,
+        1.225000000000012,
+        1.225000000000013,
+        1.225000000000014,
+        1.225000000000015,
+        1.225000000000016,
+        1.225000000000017,
+        1.225000000000018,
+        1.225000000000019,
+        // Tricky rounding cases around tie values
+        1009136.7050000005,
+        2518463.465,
+        2532438.825000001,
+        3650458.5349999997,
+        3147349.615,
+        5411339.755,
+        8583721.225,
+        13475057.825,
+        33588441.975,
+        99979794.085,
+        99937431.585,
+        99386719.085,
+        33853025.465,
+        34046426.605,
+        34312800.865,
+        34387564.754999997,
+        34460537.874999996,
+        34579175.125,
+        34653939.014999997,
+        34847340.154999997,
+        34920313.274999997,
+        35038950.525,
+        35113714.414999997,
+        35186687.534999996,
+        35305324.785,
+        35380088.674999997,
+        35453061.794999996,
+        35571699.045,
+        35573489.814999998,
+        35646462.934999997,
+        35839864.074999997,
+        35912837.194999997,
+        36031474.445,
+        36106238.334999997,
+        36179211.454999996,
+        36297848.705,
+        36372612.594999997,
+        36564222.965,
+        36566013.734999998,
+        36638986.854999997,
+        36757624.105,
+        36832387.994999997,
+        36905361.114999996,
+        37023998.365,
+        37098762.254999997,
+        37171735.374999996,
+        37290372.625,
+        37365136.514999997,
+        37558537.654999997,
+        37631510.774999997,
+        37750148.025,
+        37824911.914999997,
+        37897885.034999996,
+        38016522.285,
+        38091286.174999997,
+        38164259.294999996,
+        38282896.545,
+        38284687.314999998,
+        38357660.434999997,
+        38551061.574999997,
+        38624034.694999997,
+        38742671.945,
+        38817435.834999997,
+        38890408.954999996,
+        39009046.205,
+        39083810.094999997,
+        39275420.465,
+        39277211.234999998,
+        39350184.354999997,
+        39468821.605,
+        39543585.494999997,
+        39616558.614999996,
+        39735195.865,
+        39809959.754999997,
+        39882932.874999996,
+        40001570.125,
+        40076334.014999997,
+        40269735.154999997,
+        40342708.274999997,
+        40461345.525,
+        40536109.414999997,
+        40609082.534999996,
+        40727719.785,
+        40802483.674999997,
+        40875456.794999996,
+        40994094.045,
+        40995884.814999998,
+        41068857.934999997,
+        41262259.074999997,
+        41335232.194999997,
+        41453869.445,
+        41528633.334999997,
+        41601606.454999996,
+        41720243.705,
+        41795007.594999997,
+        41986617.965,
+        42034072.865,
+        42107045.985,
+        42134354.975
+    };
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/text/Format/DecimalFormat/GoldenFormattedValues.java	Thu Oct 11 16:59:50 2012 -0700
@@ -0,0 +1,868 @@
+/*
+ * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/* This is a machine generated file - Please DO NOT EDIT !
+ * Change RoundingAndPropertyTest instead,
+ * and run with "-gengold" argument to regenerate (without copyright header).
+ */
+
+/* This file contains the set of result Strings expected from calling inside
+ * RoundingAndPropertyTest the method NumberFormat.format() upon the set of
+ * double values provided in GoldenDoubleValues.java. It contains three arrays,
+ * each containing arrays of unicode values representing the expected string
+ * result when calling format() on the corresponding (i.e. same index) double
+ * value found in GoldenDoubleValues arrays :
+ * - DecimalDigitsLocalizedFormattedValues corresponds to DecimalLocalizationValues,
+ *   when using FullLocalizationTestLocale to format.
+ * - DecimalGoldenFormattedValues corresponds to DecimalGoldenValues, when used
+ *   in the decimal pattern case together with TestLocale.
+ * - CurrencyGoldenFormattedValues corresponds to CurrencyGoldenValues. when used
+ *   in the currency pattern case together with TestLocale.
+ * Please see documentation in RoundingAndPropertyTest.java for more details.
+ *
+ * This file generated by running RoundingAndPropertyTest with "-gengold" argument.
+ */
+
+class GoldenFormattedValues {
+
+    // The formatted values below were generated from golden values
+    // listed in GoldenDoubleValues.java, using the following jvm version :
+    //   Oracle Corporation Java HotSpot(TM) Server VM 1.8.0-ea
+    //   locale for golden double values : en_US
+    //   locale for testing digit localization : hi_IN
+
+    // The array of int[] unicode values storing the expected results
+    // when experiencing full localization of digits on DecimalLocalizationValues.
+    static int[][] DecimalDigitsLocalizedFormattedValues = {
+        { 2407, 46, 2407, 2408, 2409 },
+        { 2407, 2408, 46, 2407, 2408, 2409 },
+        { 2407, 2408, 2409, 46, 2407, 2408, 2409 },
+        { 2407, 44, 2408, 2409, 2410, 46, 2407, 2408, 2409 },
+        { 2407, 2408, 44, 2409, 2410, 2411, 46, 2407, 2408, 2409 },
+        { 2407, 2408, 2409, 44, 2410, 2411, 2412, 46, 2407, 2408, 2409 },
+        { 2407, 44, 2408, 2409, 2410, 44, 2411, 2412, 2413, 46, 2407, 2408, 2409 },
+        { 2407, 2408, 44, 2409, 2410, 2411, 44, 2412, 2413, 2414, 46, 2407, 2408, 2409 },
+        { 2407, 2408, 2409, 44, 2410, 2411, 2412, 44, 2413, 2414, 2415, 46, 2407, 2408, 2409 },
+        { 2407, 44, 2408, 2409, 2410, 44, 2411, 2412, 2413, 44, 2414, 2415, 2406, 46, 2407, 2408, 2409 },
+        { 2407, 44, 2408, 2409, 2410 },
+        { 2407, 44, 2408, 2409, 2410, 46, 2415 },
+        { 2407, 44, 2408, 2409, 2410, 46, 2415, 2415 },
+        { 2407, 44, 2408, 2409, 2410, 46, 2415, 2415, 2415 },
+    };
+
+    // The array of int[] unicode values storing the expected results
+    // when calling Decimal.format(double) on the decimal GoldenDoubleValues.
+    static int[][] DecimalGoldenFormattedValues = {
+        { 48 },
+        { 45, 48 },
+        { 48 },
+        { 48 },
+        { 45, 50, 44, 49, 52, 55, 44, 52, 56, 51, 44, 54, 52, 54, 46, 50, 51, 51 },
+        { 50, 44, 49, 52, 55, 44, 52, 56, 51, 44, 54, 52, 54, 46, 50, 51, 52 },
+        { 45, 50, 44, 49, 52, 55, 44, 52, 56, 51, 44, 54, 52, 56 },
+        { 50, 44, 49, 52, 55, 44, 52, 56, 51, 44, 54, 52, 56 },
+        { 45, 49, 44, 57, 57, 57, 44, 57, 57, 57, 44, 57, 57, 57, 46, 57, 57, 57 },
+        { 50, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48 },
+        { 65533 },
+        { 8734 },
+        { 45, 8734 },
+        { 49, 55, 57, 44, 55, 54, 57, 44, 51, 49, 51, 44, 52, 56, 54, 44, 50, 51, 49, 44, 53, 55, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48 },
+        { 45, 57, 44, 56, 55, 54, 44, 53, 52, 51, 44, 50, 49, 48, 46, 57, 56, 56 },
+        { 57, 44, 56, 55, 54, 44, 53, 52, 51, 44, 50, 49, 48, 46, 57, 56, 56 },
+        { 45, 49, 50, 51, 44, 52, 53, 54, 44, 55, 56, 57, 44, 48, 49, 50, 44, 51, 52, 53, 44, 54, 55, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48 },
+        { 49, 50, 51, 44, 52, 53, 54, 44, 55, 56, 57, 44, 48, 49, 50, 44, 51, 52, 53, 44, 54, 55, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48 },
+        { 49, 46, 49, 50, 51 },
+        { 49, 50, 46, 49, 50, 51 },
+        { 49, 50, 51, 46, 49, 50, 51 },
+        { 49, 44, 50, 51, 52, 46, 49, 50, 51 },
+        { 49, 50, 44, 51, 52, 53, 46, 49, 50, 51 },
+        { 49, 50, 51, 44, 52, 53, 54, 46, 49, 50, 51 },
+        { 49, 44, 50, 51, 52, 44, 53, 54, 55, 46, 49, 50, 51 },
+        { 49, 50, 44, 51, 52, 53, 44, 54, 55, 56, 46, 49, 50, 51 },
+        { 49, 50, 51, 44, 52, 53, 54, 44, 55, 56, 57, 46, 49, 50, 51 },
+        { 49, 44, 50, 51, 52, 44, 53, 54, 55, 44, 56, 57, 48, 46, 49, 50, 51 },
+        { 45, 49, 46, 49, 50, 51 },
+        { 45, 49, 50, 46, 49, 50, 51 },
+        { 45, 49, 50, 51, 46, 49, 50, 51 },
+        { 45, 49, 44, 50, 51, 52, 46, 49, 50, 51 },
+        { 45, 49, 50, 44, 51, 52, 53, 46, 49, 50, 51 },
+        { 45, 49, 50, 51, 44, 52, 53, 54, 46, 49, 50, 51 },
+        { 45, 49, 44, 50, 51, 52, 44, 53, 54, 55, 46, 49, 50, 51 },
+        { 45, 49, 50, 44, 51, 52, 53, 44, 54, 55, 56, 46, 49, 50, 51 },
+        { 45, 49, 50, 51, 44, 52, 53, 54, 44, 55, 56, 57, 46, 49, 50, 51 },
+        { 45, 49, 44, 50, 51, 52, 44, 53, 54, 55, 44, 56, 57, 48, 46, 49, 50, 51 },
+        { 48, 46, 49 },
+        { 48, 46, 49, 50 },
+        { 48, 46, 49, 50, 51 },
+        { 48, 46, 49, 50, 51 },
+        { 49, 48, 46, 49 },
+        { 49, 48, 46, 49, 50 },
+        { 49, 48, 46, 49, 50, 51 },
+        { 49, 48, 46, 49, 50, 51 },
+        { 49, 48, 48, 46, 49 },
+        { 49, 48, 48, 46, 49, 50 },
+        { 49, 48, 48, 46, 49, 50, 51 },
+        { 49, 48, 48, 46, 49, 50, 51 },
+        { 49, 44, 48, 48, 48, 46, 49 },
+        { 49, 44, 48, 48, 48, 46, 49, 50 },
+        { 49, 44, 48, 48, 48, 46, 49, 50, 51 },
+        { 49, 44, 48, 48, 48, 46, 49, 50, 51 },
+        { 49, 48, 44, 48, 48, 48, 46, 49 },
+        { 49, 48, 44, 48, 48, 48, 46, 49, 50 },
+        { 49, 48, 44, 48, 48, 48, 46, 49, 50, 51 },
+        { 49, 48, 44, 48, 48, 48, 46, 49, 50, 51 },
+        { 49, 48, 48, 44, 48, 48, 48, 46, 49 },
+        { 49, 48, 48, 44, 48, 48, 48, 46, 49, 50 },
+        { 49, 48, 48, 44, 48, 48, 48, 46, 49, 50, 51 },
+        { 49, 48, 48, 44, 48, 48, 48, 46, 49, 50, 51 },
+        { 49, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49 },
+        { 49, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 50 },
+        { 49, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 50, 51 },
+        { 49, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 50, 51 },
+        { 49, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49 },
+        { 49, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 50 },
+        { 49, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 50, 51 },
+        { 49, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 50, 51 },
+        { 49, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49 },
+        { 49, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 50 },
+        { 49, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 50, 51 },
+        { 49, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 50, 51 },
+        { 49, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49 },
+        { 49, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 50 },
+        { 49, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 50, 51 },
+        { 49, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 50, 51 },
+        { 45, 48, 46, 49 },
+        { 45, 48, 46, 49, 50 },
+        { 45, 48, 46, 49, 50, 51 },
+        { 45, 48, 46, 49, 50, 51 },
+        { 45, 49, 48, 46, 49 },
+        { 45, 49, 48, 46, 49, 50 },
+        { 45, 49, 48, 46, 49, 50, 51 },
+        { 45, 49, 48, 46, 49, 50, 51 },
+        { 45, 49, 48, 48, 46, 49 },
+        { 45, 49, 48, 48, 46, 49, 50 },
+        { 45, 49, 48, 48, 46, 49, 50, 51 },
+        { 45, 49, 48, 48, 46, 49, 50, 51 },
+        { 45, 49, 44, 48, 48, 48, 46, 49 },
+        { 45, 49, 44, 48, 48, 48, 46, 49, 50 },
+        { 45, 49, 44, 48, 48, 48, 46, 49, 50, 51 },
+        { 45, 49, 44, 48, 48, 48, 46, 49, 50, 51 },
+        { 45, 49, 48, 44, 48, 48, 48, 46, 49 },
+        { 45, 49, 48, 44, 48, 48, 48, 46, 49, 50 },
+        { 45, 49, 48, 44, 48, 48, 48, 46, 49, 50, 51 },
+        { 45, 49, 48, 44, 48, 48, 48, 46, 49, 50, 51 },
+        { 45, 49, 48, 48, 44, 48, 48, 48, 46, 49 },
+        { 45, 49, 48, 48, 44, 48, 48, 48, 46, 49, 50 },
+        { 45, 49, 48, 48, 44, 48, 48, 48, 46, 49, 50, 51 },
+        { 45, 49, 48, 48, 44, 48, 48, 48, 46, 49, 50, 51 },
+        { 45, 49, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49 },
+        { 45, 49, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 50 },
+        { 45, 49, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 50, 51 },
+        { 45, 49, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 50, 51 },
+        { 45, 49, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49 },
+        { 45, 49, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 50 },
+        { 45, 49, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 50, 51 },
+        { 45, 49, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 50, 51 },
+        { 45, 49, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49 },
+        { 45, 49, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 50 },
+        { 45, 49, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 50, 51 },
+        { 45, 49, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 50, 51 },
+        { 45, 49, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49 },
+        { 45, 49, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 50 },
+        { 45, 49, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 50, 51 },
+        { 45, 49, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 50, 51 },
+        { 49, 46, 57, 57, 57 },
+        { 49, 50, 46, 57, 57, 57 },
+        { 49, 50, 51, 46, 57, 57, 57 },
+        { 49, 44, 50, 51, 52, 46, 57, 57, 57 },
+        { 49, 50, 44, 51, 52, 53, 46, 57, 57, 57 },
+        { 49, 50, 51, 44, 52, 53, 54, 46, 57, 57, 57 },
+        { 49, 44, 50, 51, 52, 44, 53, 54, 55, 46, 57, 57, 57 },
+        { 49, 50, 44, 51, 52, 53, 44, 54, 55, 56, 46, 57, 57, 57 },
+        { 49, 50, 51, 44, 52, 53, 54, 44, 55, 56, 57, 46, 57, 57, 57 },
+        { 49, 44, 50, 51, 52, 44, 53, 54, 55, 44, 56, 57, 48, 46, 57, 57, 57 },
+        { 50 },
+        { 49, 51 },
+        { 49, 50, 52 },
+        { 49, 44, 50, 51, 53 },
+        { 49, 50, 44, 51, 52, 54 },
+        { 49, 50, 51, 44, 52, 53, 55 },
+        { 49, 44, 50, 51, 52, 44, 53, 54, 56 },
+        { 49, 50, 44, 51, 52, 53, 44, 54, 55, 57 },
+        { 49, 50, 51, 44, 52, 53, 54, 44, 55, 57, 48 },
+        { 49, 44, 50, 51, 52, 44, 53, 54, 55, 44, 56, 57, 49 },
+        { 45, 49, 46, 57, 57, 57 },
+        { 45, 49, 50, 46, 57, 57, 57 },
+        { 45, 49, 50, 51, 46, 57, 57, 57 },
+        { 45, 49, 44, 50, 51, 52, 46, 57, 57, 57 },
+        { 45, 49, 50, 44, 51, 52, 53, 46, 57, 57, 57 },
+        { 45, 49, 50, 51, 44, 52, 53, 54, 46, 57, 57, 57 },
+        { 45, 49, 44, 50, 51, 52, 44, 53, 54, 55, 46, 57, 57, 57 },
+        { 45, 49, 50, 44, 51, 52, 53, 44, 54, 55, 56, 46, 57, 57, 57 },
+        { 45, 49, 50, 51, 44, 52, 53, 54, 44, 55, 56, 57, 46, 57, 57, 57 },
+        { 45, 49, 44, 50, 51, 52, 44, 53, 54, 55, 44, 56, 57, 48, 46, 57, 57, 57 },
+        { 45, 50 },
+        { 45, 49, 51 },
+        { 45, 49, 50, 52 },
+        { 45, 49, 44, 50, 51, 53 },
+        { 45, 49, 50, 44, 51, 52, 54 },
+        { 45, 49, 50, 51, 44, 52, 53, 55 },
+        { 45, 49, 44, 50, 51, 52, 44, 53, 54, 56 },
+        { 45, 49, 50, 44, 51, 52, 53, 44, 54, 55, 57 },
+        { 45, 49, 50, 51, 44, 52, 53, 54, 44, 55, 57, 48 },
+        { 45, 49, 44, 50, 51, 52, 44, 53, 54, 55, 44, 56, 57, 49 },
+        { 49, 49, 48 },
+        { 49, 44, 49, 48, 48 },
+        { 49, 49, 44, 48, 48, 48 },
+        { 49, 49, 48, 44, 48, 48, 48 },
+        { 49, 44, 49, 48, 48, 44, 48, 48, 48 },
+        { 49, 49, 44, 48, 48, 48, 44, 48, 48, 48 },
+        { 49, 49, 48, 44, 48, 48, 48, 44, 48, 48, 48 },
+        { 49, 44, 49, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48 },
+        { 45, 49, 49, 48 },
+        { 45, 49, 44, 49, 48, 48 },
+        { 45, 49, 49, 44, 48, 48, 48 },
+        { 45, 49, 49, 48, 44, 48, 48, 48 },
+        { 45, 49, 44, 49, 48, 48, 44, 48, 48, 48 },
+        { 45, 49, 49, 44, 48, 48, 48, 44, 48, 48, 48 },
+        { 45, 49, 49, 48, 44, 48, 48, 48, 44, 48, 48, 48 },
+        { 45, 49, 44, 49, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48 },
+        { 50 },
+        { 50, 48 },
+        { 50, 48, 48 },
+        { 50, 44, 48, 48, 48 },
+        { 50, 48, 44, 48, 48, 48 },
+        { 50, 48, 48, 44, 48, 48, 48 },
+        { 50, 44, 48, 48, 48, 44, 48, 48, 48 },
+        { 50, 48, 44, 48, 48, 48, 44, 48, 48, 48 },
+        { 50, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48 },
+        { 50, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48 },
+        { 45, 50 },
+        { 45, 50, 48 },
+        { 45, 50, 48, 48 },
+        { 45, 50, 44, 48, 48, 48 },
+        { 45, 50, 48, 44, 48, 48, 48 },
+        { 45, 50, 48, 48, 44, 48, 48, 48 },
+        { 45, 50, 44, 48, 48, 48, 44, 48, 48, 48 },
+        { 45, 50, 48, 44, 48, 48, 48, 44, 48, 48, 48 },
+        { 45, 50, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48 },
+        { 45, 50, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48 },
+        { 49, 48 },
+        { 49, 48, 48 },
+        { 49, 44, 48, 48, 48 },
+        { 49, 48, 44, 48, 48, 48 },
+        { 49, 48, 48, 44, 48, 48, 48 },
+        { 49, 44, 48, 48, 48, 44, 48, 48, 48 },
+        { 49, 48, 44, 48, 48, 48, 44, 48, 48, 48 },
+        { 49, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48 },
+        { 49, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48 },
+        { 57, 46, 57, 57, 57 },
+        { 57, 57, 46, 57, 57, 57 },
+        { 57, 57, 57, 46, 57, 57, 57 },
+        { 57, 44, 57, 57, 57, 46, 57, 57, 57 },
+        { 57, 57, 44, 57, 57, 57, 46, 57, 57, 57 },
+        { 57, 57, 57, 44, 57, 57, 57, 46, 57, 57, 57 },
+        { 57, 44, 57, 57, 57, 44, 57, 57, 57, 46, 57, 57, 57 },
+        { 57, 57, 44, 57, 57, 57, 44, 57, 57, 57, 46, 57, 57, 57 },
+        { 57, 57, 57, 44, 57, 57, 57, 44, 57, 57, 57, 46, 57, 57, 57 },
+        { 45, 49, 48 },
+        { 45, 49, 48, 48 },
+        { 45, 49, 44, 48, 48, 48 },
+        { 45, 49, 48, 44, 48, 48, 48 },
+        { 45, 49, 48, 48, 44, 48, 48, 48 },
+        { 45, 49, 44, 48, 48, 48, 44, 48, 48, 48 },
+        { 45, 49, 48, 44, 48, 48, 48, 44, 48, 48, 48 },
+        { 45, 49, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48 },
+        { 45, 49, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48 },
+        { 45, 57, 46, 57, 57, 57 },
+        { 45, 57, 57, 46, 57, 57, 57 },
+        { 45, 57, 57, 57, 46, 57, 57, 57 },
+        { 45, 57, 44, 57, 57, 57, 46, 57, 57, 57 },
+        { 45, 57, 57, 44, 57, 57, 57, 46, 57, 57, 57 },
+        { 45, 57, 57, 57, 44, 57, 57, 57, 46, 57, 57, 57 },
+        { 45, 57, 44, 57, 57, 57, 44, 57, 57, 57, 46, 57, 57, 57 },
+        { 45, 57, 57, 44, 57, 57, 57, 44, 57, 57, 57, 46, 57, 57, 57 },
+        { 45, 57, 57, 57, 44, 57, 57, 57, 44, 57, 57, 57, 46, 57, 57, 57 },
+        { 49 },
+        { 49, 50 },
+        { 49, 50, 51 },
+        { 49, 44, 50, 51, 52 },
+        { 49, 50, 44, 51, 52, 53 },
+        { 49, 50, 51, 44, 52, 53, 54 },
+        { 49, 44, 50, 51, 52, 44, 53, 54, 55 },
+        { 49, 50, 44, 51, 52, 53, 44, 54, 55, 56 },
+        { 49, 50, 51, 44, 52, 53, 54, 44, 55, 56, 57 },
+        { 49, 44, 50, 51, 52, 44, 53, 54, 55, 44, 56, 57, 48 },
+        { 45, 49 },
+        { 45, 49, 50 },
+        { 45, 49, 50, 51 },
+        { 45, 49, 44, 50, 51, 52 },
+        { 45, 49, 50, 44, 51, 52, 53 },
+        { 45, 49, 50, 51, 44, 52, 53, 54 },
+        { 45, 49, 44, 50, 51, 52, 44, 53, 54, 55 },
+        { 45, 49, 50, 44, 51, 52, 53, 44, 54, 55, 56 },
+        { 45, 49, 50, 51, 44, 52, 53, 54, 44, 55, 56, 57 },
+        { 45, 49, 44, 50, 51, 52, 44, 53, 54, 55, 44, 56, 57, 48 },
+        { 45, 50, 44, 53, 57, 57, 46, 52 },
+        { 45, 50, 44, 53, 57, 57, 46, 51, 52 },
+        { 45, 50, 44, 53, 57, 57, 46, 51, 51, 52 },
+        { 49 },
+        { 49 },
+        { 49 },
+        { 49 },
+        { 49 },
+        { 49, 46, 48, 48, 49 },
+        { 49, 46, 48, 48, 49 },
+        { 49, 46, 48, 48, 49 },
+        { 49, 46, 48, 48, 49 },
+        { 49, 46, 48, 48, 49 },
+        { 49, 46, 50, 50, 50 },
+        { 49, 46, 50, 50, 50 },
+        { 49, 46, 50, 50, 50 },
+        { 49, 46, 50, 50, 50 },
+        { 49, 46, 50, 50, 50 },
+        { 49, 46, 50, 50, 50 },
+        { 49, 46, 50, 50, 50 },
+        { 49, 46, 50, 50, 50 },
+        { 49, 46, 50, 50, 50 },
+        { 49, 46, 50, 50, 50 },
+        { 49, 46, 50, 50, 50 },
+        { 49, 46, 50, 50, 50 },
+        { 49, 46, 50, 50, 50 },
+        { 49, 46, 50, 50, 50 },
+        { 49, 46, 50, 50, 50 },
+        { 49, 46, 50, 50, 50 },
+        { 49, 46, 50, 50, 50 },
+        { 49, 46, 50, 50, 50 },
+        { 49, 46, 50, 50, 50 },
+        { 49, 46, 50, 50, 50 },
+        { 49, 46, 50, 50, 51 },
+        { 49, 46, 50, 50, 51 },
+        { 49, 46, 50, 50, 51 },
+        { 49, 46, 50, 50, 51 },
+        { 49, 46, 50, 50, 51 },
+        { 49, 46, 50, 50, 51 },
+        { 49, 46, 50, 50, 51 },
+        { 49, 46, 50, 50, 51 },
+        { 49, 46, 50, 50, 51 },
+        { 49, 46, 50, 50, 51 },
+        { 49, 46, 50, 50, 51 },
+        { 49, 46, 50, 50, 51 },
+        { 49, 46, 50, 50, 51 },
+        { 49, 46, 50, 50, 51 },
+        { 49, 46, 50, 50, 51 },
+        { 49, 46, 50, 50, 51 },
+        { 49, 46, 50, 50, 51 },
+        { 49, 46, 50, 50, 51 },
+        { 49, 46, 50, 50, 51 },
+        { 49, 48, 48, 44, 57, 49, 51, 46, 54, 55, 49 },
+        { 49, 57, 57, 44, 57, 57, 57, 46, 57, 57, 57 },
+        { 50, 53, 49, 44, 56, 52, 54, 46, 51, 52, 55 },
+        { 50, 53, 51, 44, 50, 52, 51, 46, 56, 56, 51 },
+        { 51, 54, 53, 44, 48, 52, 53, 46, 56, 53, 51 },
+        { 51, 49, 52, 44, 55, 51, 52, 46, 57, 54, 49 },
+        { 53, 52, 49, 44, 49, 51, 51, 46, 57, 55, 53 },
+        { 56, 53, 56, 44, 51, 55, 50, 46, 49, 50, 51 },
+        { 49, 44, 48, 48, 49, 44, 48, 48, 48 },
+        { 49, 44, 51, 52, 55, 44, 53, 48, 53, 46, 55, 56, 50 },
+        { 51, 44, 51, 53, 56, 44, 56, 52, 52, 46, 49, 57, 55 },
+        { 57, 44, 57, 57, 55, 44, 57, 55, 57, 46, 52, 48, 57 },
+        { 57, 44, 57, 57, 51, 44, 55, 52, 51, 46, 49, 53, 57 },
+        { 57, 44, 57, 51, 56, 44, 54, 55, 49, 46, 57, 48, 57 },
+        { 51, 44, 51, 56, 53, 44, 51, 48, 50, 46, 53, 52, 55 },
+        { 51, 44, 52, 48, 52, 44, 54, 52, 50, 46, 54, 54, 49 },
+        { 51, 44, 52, 51, 49, 44, 50, 56, 48, 46, 48, 56, 55 },
+        { 51, 44, 52, 51, 56, 44, 55, 53, 54, 46, 52, 55, 53 },
+        { 51, 44, 52, 52, 54, 44, 48, 53, 51, 46, 55, 56, 55 },
+        { 51, 44, 52, 53, 55, 44, 57, 49, 55, 46, 53, 49, 51 },
+        { 51, 44, 52, 54, 53, 44, 51, 57, 51, 46, 57, 48, 49 },
+        { 51, 44, 52, 56, 52, 44, 55, 51, 52, 46, 48, 49, 53 },
+        { 51, 44, 52, 57, 50, 44, 48, 51, 49, 46, 51, 50, 55 },
+        { 51, 44, 53, 48, 51, 44, 56, 57, 53, 46, 48, 53, 51 },
+        { 51, 44, 53, 49, 49, 44, 51, 55, 49, 46, 52, 52, 49 },
+        { 51, 44, 53, 49, 56, 44, 54, 54, 56, 46, 55, 53, 51 },
+        { 51, 44, 53, 51, 48, 44, 53, 51, 50, 46, 52, 55, 57 },
+        { 51, 44, 53, 51, 56, 44, 48, 48, 56, 46, 56, 54, 55 },
+        { 51, 44, 53, 52, 53, 44, 51, 48, 54, 46, 49, 55, 57 },
+        { 51, 44, 53, 53, 55, 44, 49, 54, 57, 46, 57, 48, 53 },
+        { 51, 44, 53, 53, 55, 44, 51, 52, 56, 46, 57, 56, 49 },
+        { 51, 44, 53, 54, 52, 44, 54, 52, 54, 46, 50, 57, 51 },
+        { 51, 44, 53, 56, 51, 44, 57, 56, 54, 46, 52, 48, 55 },
+        { 51, 44, 53, 57, 49, 44, 50, 56, 51, 46, 55, 49, 57 },
+        { 51, 44, 54, 48, 51, 44, 49, 52, 55, 46, 52, 52, 53 },
+        { 51, 44, 54, 49, 48, 44, 54, 50, 51, 46, 56, 51, 51 },
+        { 51, 44, 54, 49, 55, 44, 57, 50, 49, 46, 49, 52, 53 },
+        { 51, 44, 54, 50, 57, 44, 55, 56, 52, 46, 56, 55, 49 },
+        { 51, 44, 54, 51, 55, 44, 50, 54, 49, 46, 50, 53, 57 },
+        { 51, 44, 54, 53, 54, 44, 52, 50, 50, 46, 50, 57, 55 },
+        { 51, 44, 54, 53, 54, 44, 54, 48, 49, 46, 51, 55, 51 },
+        { 51, 44, 54, 54, 51, 44, 56, 57, 56, 46, 54, 56, 53 },
+        { 51, 44, 54, 55, 53, 44, 55, 54, 50, 46, 52, 49, 49 },
+        { 51, 44, 54, 56, 51, 44, 50, 51, 56, 46, 55, 57, 57 },
+        { 51, 44, 54, 57, 48, 44, 53, 51, 54, 46, 49, 49, 49 },
+        { 51, 44, 55, 48, 50, 44, 51, 57, 57, 46, 56, 51, 55 },
+        { 51, 44, 55, 48, 57, 44, 56, 55, 54, 46, 50, 50, 53 },
+        { 51, 44, 55, 49, 55, 44, 49, 55, 51, 46, 53, 51, 55 },
+        { 51, 44, 55, 50, 57, 44, 48, 51, 55, 46, 50, 54, 51 },
+        { 51, 44, 55, 51, 54, 44, 53, 49, 51, 46, 54, 53, 49 },
+        { 51, 44, 55, 53, 53, 44, 56, 53, 51, 46, 55, 54, 53 },
+        { 51, 44, 55, 54, 51, 44, 49, 53, 49, 46, 48, 55, 55 },
+        { 51, 44, 55, 55, 53, 44, 48, 49, 52, 46, 56, 48, 51 },
+        { 51, 44, 55, 56, 50, 44, 52, 57, 49, 46, 49, 57, 49 },
+        { 51, 44, 55, 56, 57, 44, 55, 56, 56, 46, 53, 48, 51 },
+        { 51, 44, 56, 48, 49, 44, 54, 53, 50, 46, 50, 50, 57 },
+        { 51, 44, 56, 48, 57, 44, 49, 50, 56, 46, 54, 49, 55 },
+        { 51, 44, 56, 49, 54, 44, 52, 50, 53, 46, 57, 50, 57 },
+        { 51, 44, 56, 50, 56, 44, 50, 56, 57, 46, 54, 53, 53 },
+        { 51, 44, 56, 50, 56, 44, 52, 54, 56, 46, 55, 51, 49 },
+        { 51, 44, 56, 51, 53, 44, 55, 54, 54, 46, 48, 52, 51 },
+        { 51, 44, 56, 53, 53, 44, 49, 48, 54, 46, 49, 53, 55 },
+        { 51, 44, 56, 54, 50, 44, 52, 48, 51, 46, 52, 54, 57 },
+        { 51, 44, 56, 55, 52, 44, 50, 54, 55, 46, 49, 57, 53 },
+        { 51, 44, 56, 56, 49, 44, 55, 52, 51, 46, 53, 56, 51 },
+        { 51, 44, 56, 56, 57, 44, 48, 52, 48, 46, 56, 57, 53 },
+        { 51, 44, 57, 48, 48, 44, 57, 48, 52, 46, 54, 50, 49 },
+        { 51, 44, 57, 48, 56, 44, 51, 56, 49, 46, 48, 48, 57 },
+        { 51, 44, 57, 50, 55, 44, 53, 52, 50, 46, 48, 52, 55 },
+        { 51, 44, 57, 50, 55, 44, 55, 50, 49, 46, 49, 50, 51 },
+        { 51, 44, 57, 51, 53, 44, 48, 49, 56, 46, 52, 51, 53 },
+        { 51, 44, 57, 52, 54, 44, 56, 56, 50, 46, 49, 54, 49 },
+        { 51, 44, 57, 53, 52, 44, 51, 53, 56, 46, 53, 52, 57 },
+        { 51, 44, 57, 54, 49, 44, 54, 53, 53, 46, 56, 54, 49 },
+        { 51, 44, 57, 55, 51, 44, 53, 49, 57, 46, 53, 56, 55 },
+        { 51, 44, 57, 56, 48, 44, 57, 57, 53, 46, 57, 55, 53 },
+        { 51, 44, 57, 56, 56, 44, 50, 57, 51, 46, 50, 56, 55 },
+        { 52, 44, 48, 48, 48, 44, 49, 53, 55, 46, 48, 49, 51 },
+        { 52, 44, 48, 48, 55, 44, 54, 51, 51, 46, 52, 48, 49 },
+        { 52, 44, 48, 50, 54, 44, 57, 55, 51, 46, 53, 49, 53 },
+        { 52, 44, 48, 51, 52, 44, 50, 55, 48, 46, 56, 50, 55 },
+        { 52, 44, 48, 52, 54, 44, 49, 51, 52, 46, 53, 53, 51 },
+        { 52, 44, 48, 53, 51, 44, 54, 49, 48, 46, 57, 52, 49 },
+        { 52, 44, 48, 54, 48, 44, 57, 48, 56, 46, 50, 53, 51 },
+        { 52, 44, 48, 55, 50, 44, 55, 55, 49, 46, 57, 55, 57 },
+        { 52, 44, 48, 56, 48, 44, 50, 52, 56, 46, 51, 54, 55 },
+        { 52, 44, 48, 56, 55, 44, 53, 52, 53, 46, 54, 55, 57 },
+        { 52, 44, 48, 57, 57, 44, 52, 48, 57, 46, 52, 48, 53 },
+        { 52, 44, 48, 57, 57, 44, 53, 56, 56, 46, 52, 56, 49 },
+        { 52, 44, 49, 48, 54, 44, 56, 56, 53, 46, 55, 57, 51 },
+        { 52, 44, 49, 50, 54, 44, 50, 50, 53, 46, 57, 48, 55 },
+        { 52, 44, 49, 51, 51, 44, 53, 50, 51, 46, 50, 49, 57 },
+        { 52, 44, 49, 52, 53, 44, 51, 56, 54, 46, 57, 52, 53 },
+        { 52, 44, 49, 53, 50, 44, 56, 54, 51, 46, 51, 51, 51 },
+        { 52, 44, 49, 54, 48, 44, 49, 54, 48, 46, 54, 52, 53 },
+        { 52, 44, 49, 55, 50, 44, 48, 50, 52, 46, 51, 55, 49 },
+        { 52, 44, 49, 55, 57, 44, 53, 48, 48, 46, 55, 53, 57 },
+        { 52, 44, 49, 57, 56, 44, 54, 54, 49, 46, 55, 57, 55 },
+        { 52, 44, 50, 48, 51, 44, 52, 48, 55, 46, 50, 56, 55 },
+        { 52, 44, 50, 49, 48, 44, 55, 48, 52, 46, 53, 57, 57 },
+        { 52, 44, 50, 49, 51, 44, 52, 51, 53, 46, 52, 57, 55 },
+    };
+
+    // The array of int[] unicode values storing the expected results
+    // when calling Decimal.format(double) on the currency GoldenDoubleValues.
+    static int[][] CurrencyGoldenFormattedValues = {
+        { 36, 48, 46, 48, 48 },
+        { 40, 36, 48, 46, 48, 48, 41 },
+        { 36, 48, 46, 48, 48 },
+        { 36, 48, 46, 48, 48 },
+        { 40, 36, 50, 44, 49, 52, 55, 44, 52, 56, 51, 44, 54, 52, 54, 46, 50, 51, 41 },
+        { 36, 50, 44, 49, 52, 55, 44, 52, 56, 51, 44, 54, 52, 54, 46, 50, 51 },
+        { 40, 36, 50, 44, 49, 52, 55, 44, 52, 56, 51, 44, 54, 52, 56, 46, 48, 48, 41 },
+        { 36, 50, 44, 49, 52, 55, 44, 52, 56, 51, 44, 54, 52, 56, 46, 48, 48 },
+        { 40, 36, 49, 44, 57, 57, 57, 44, 57, 57, 57, 44, 57, 57, 57, 46, 57, 57, 41 },
+        { 36, 50, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 48, 48 },
+        { 65533 },
+        { 36, 8734 },
+        { 40, 36, 8734, 41 },
+        { 36, 49, 55, 57, 44, 55, 54, 57, 44, 51, 49, 51, 44, 52, 56, 54, 44, 50, 51, 49, 44, 53, 55, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 48, 48 },
+        { 40, 36, 57, 44, 56, 55, 54, 44, 53, 52, 51, 44, 50, 49, 48, 46, 57, 57, 41 },
+        { 36, 57, 44, 56, 55, 54, 44, 53, 52, 51, 44, 50, 49, 48, 46, 57, 57 },
+        { 40, 36, 49, 50, 51, 44, 52, 53, 54, 44, 55, 56, 57, 44, 48, 49, 50, 44, 51, 52, 53, 44, 54, 55, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 48, 48, 41 },
+        { 36, 49, 50, 51, 44, 52, 53, 54, 44, 55, 56, 57, 44, 48, 49, 50, 44, 51, 52, 53, 44, 54, 55, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 48, 48 },
+        { 36, 49, 46, 49, 50 },
+        { 36, 49, 50, 46, 49, 50 },
+        { 36, 49, 50, 51, 46, 49, 50 },
+        { 36, 49, 44, 50, 51, 52, 46, 49, 50 },
+        { 36, 49, 50, 44, 51, 52, 53, 46, 49, 50 },
+        { 36, 49, 50, 51, 44, 52, 53, 54, 46, 49, 50 },
+        { 36, 49, 44, 50, 51, 52, 44, 53, 54, 55, 46, 49, 50 },
+        { 36, 49, 50, 44, 51, 52, 53, 44, 54, 55, 56, 46, 49, 50 },
+        { 36, 49, 50, 51, 44, 52, 53, 54, 44, 55, 56, 57, 46, 49, 50 },
+        { 36, 49, 44, 50, 51, 52, 44, 53, 54, 55, 44, 56, 57, 48, 46, 49, 50 },
+        { 40, 36, 49, 46, 49, 50, 41 },
+        { 40, 36, 49, 50, 46, 49, 50, 41 },
+        { 40, 36, 49, 50, 51, 46, 49, 50, 41 },
+        { 40, 36, 49, 44, 50, 51, 52, 46, 49, 50, 41 },
+        { 40, 36, 49, 50, 44, 51, 52, 53, 46, 49, 50, 41 },
+        { 40, 36, 49, 50, 51, 44, 52, 53, 54, 46, 49, 50, 41 },
+        { 40, 36, 49, 44, 50, 51, 52, 44, 53, 54, 55, 46, 49, 50, 41 },
+        { 40, 36, 49, 50, 44, 51, 52, 53, 44, 54, 55, 56, 46, 49, 50, 41 },
+        { 40, 36, 49, 50, 51, 44, 52, 53, 54, 44, 55, 56, 57, 46, 49, 50, 41 },
+        { 40, 36, 49, 44, 50, 51, 52, 44, 53, 54, 55, 44, 56, 57, 48, 46, 49, 50, 41 },
+        { 36, 48, 46, 49, 48 },
+        { 36, 48, 46, 49, 50 },
+        { 36, 48, 46, 49, 50 },
+        { 36, 49, 48, 46, 49, 48 },
+        { 36, 49, 48, 46, 49, 50 },
+        { 36, 49, 48, 46, 49, 50 },
+        { 36, 49, 48, 48, 46, 49, 48 },
+        { 36, 49, 48, 48, 46, 49, 50 },
+        { 36, 49, 48, 48, 46, 49, 50 },
+        { 36, 49, 44, 48, 48, 48, 46, 49, 48 },
+        { 36, 49, 44, 48, 48, 48, 46, 49, 50 },
+        { 36, 49, 44, 48, 48, 48, 46, 49, 50 },
+        { 36, 49, 48, 44, 48, 48, 48, 46, 49, 48 },
+        { 36, 49, 48, 44, 48, 48, 48, 46, 49, 50 },
+        { 36, 49, 48, 44, 48, 48, 48, 46, 49, 50 },
+        { 36, 49, 48, 48, 44, 48, 48, 48, 46, 49, 48 },
+        { 36, 49, 48, 48, 44, 48, 48, 48, 46, 49, 50 },
+        { 36, 49, 48, 48, 44, 48, 48, 48, 46, 49, 50 },
+        { 36, 49, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 48 },
+        { 36, 49, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 50 },
+        { 36, 49, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 50 },
+        { 36, 49, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 48 },
+        { 36, 49, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 50 },
+        { 36, 49, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 50 },
+        { 36, 49, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 48 },
+        { 36, 49, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 50 },
+        { 36, 49, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 50 },
+        { 36, 49, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 48 },
+        { 36, 49, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 50 },
+        { 36, 49, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 50 },
+        { 40, 36, 48, 46, 49, 48, 41 },
+        { 40, 36, 48, 46, 49, 50, 41 },
+        { 40, 36, 48, 46, 49, 50, 41 },
+        { 40, 36, 49, 48, 46, 49, 48, 41 },
+        { 40, 36, 49, 48, 46, 49, 50, 41 },
+        { 40, 36, 49, 48, 46, 49, 50, 41 },
+        { 40, 36, 49, 48, 48, 46, 49, 48, 41 },
+        { 40, 36, 49, 48, 48, 46, 49, 50, 41 },
+        { 40, 36, 49, 48, 48, 46, 49, 50, 41 },
+        { 40, 36, 49, 44, 48, 48, 48, 46, 49, 48, 41 },
+        { 40, 36, 49, 44, 48, 48, 48, 46, 49, 50, 41 },
+        { 40, 36, 49, 44, 48, 48, 48, 46, 49, 50, 41 },
+        { 40, 36, 49, 48, 44, 48, 48, 48, 46, 49, 48, 41 },
+        { 40, 36, 49, 48, 44, 48, 48, 48, 46, 49, 50, 41 },
+        { 40, 36, 49, 48, 44, 48, 48, 48, 46, 49, 50, 41 },
+        { 40, 36, 49, 48, 48, 44, 48, 48, 48, 46, 49, 48, 41 },
+        { 40, 36, 49, 48, 48, 44, 48, 48, 48, 46, 49, 50, 41 },
+        { 40, 36, 49, 48, 48, 44, 48, 48, 48, 46, 49, 50, 41 },
+        { 40, 36, 49, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 48, 41 },
+        { 40, 36, 49, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 50, 41 },
+        { 40, 36, 49, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 50, 41 },
+        { 40, 36, 49, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 48, 41 },
+        { 40, 36, 49, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 50, 41 },
+        { 40, 36, 49, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 50, 41 },
+        { 40, 36, 49, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 48, 41 },
+        { 40, 36, 49, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 50, 41 },
+        { 40, 36, 49, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 50, 41 },
+        { 40, 36, 49, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 48, 41 },
+        { 40, 36, 49, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 50, 41 },
+        { 40, 36, 49, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 49, 50, 41 },
+        { 36, 49, 46, 57, 57 },
+        { 36, 49, 50, 46, 57, 57 },
+        { 36, 49, 50, 51, 46, 57, 57 },
+        { 36, 49, 44, 50, 51, 52, 46, 57, 57 },
+        { 36, 49, 50, 44, 51, 52, 53, 46, 57, 57 },
+        { 36, 49, 50, 51, 44, 52, 53, 54, 46, 57, 57 },
+        { 36, 49, 44, 50, 51, 52, 44, 53, 54, 55, 46, 57, 57 },
+        { 36, 49, 50, 44, 51, 52, 53, 44, 54, 55, 56, 46, 57, 57 },
+        { 36, 49, 50, 51, 44, 52, 53, 54, 44, 55, 56, 57, 46, 57, 57 },
+        { 36, 49, 44, 50, 51, 52, 44, 53, 54, 55, 44, 56, 57, 48, 46, 57, 57 },
+        { 36, 50, 46, 48, 48 },
+        { 36, 49, 51, 46, 48, 48 },
+        { 36, 49, 50, 52, 46, 48, 48 },
+        { 36, 49, 44, 50, 51, 53, 46, 48, 48 },
+        { 36, 49, 50, 44, 51, 52, 54, 46, 48, 48 },
+        { 36, 49, 50, 51, 44, 52, 53, 55, 46, 48, 48 },
+        { 36, 49, 44, 50, 51, 52, 44, 53, 54, 56, 46, 48, 48 },
+        { 36, 49, 50, 44, 51, 52, 53, 44, 54, 55, 57, 46, 48, 48 },
+        { 36, 49, 50, 51, 44, 52, 53, 54, 44, 55, 57, 48, 46, 48, 48 },
+        { 36, 49, 44, 50, 51, 52, 44, 53, 54, 55, 44, 56, 57, 49, 46, 48, 48 },
+        { 40, 36, 49, 46, 57, 57, 41 },
+        { 40, 36, 49, 50, 46, 57, 57, 41 },
+        { 40, 36, 49, 50, 51, 46, 57, 57, 41 },
+        { 40, 36, 49, 44, 50, 51, 52, 46, 57, 57, 41 },
+        { 40, 36, 49, 50, 44, 51, 52, 53, 46, 57, 57, 41 },
+        { 40, 36, 49, 50, 51, 44, 52, 53, 54, 46, 57, 57, 41 },
+        { 40, 36, 49, 44, 50, 51, 52, 44, 53, 54, 55, 46, 57, 57, 41 },
+        { 40, 36, 49, 50, 44, 51, 52, 53, 44, 54, 55, 56, 46, 57, 57, 41 },
+        { 40, 36, 49, 50, 51, 44, 52, 53, 54, 44, 55, 56, 57, 46, 57, 57, 41 },
+        { 40, 36, 49, 44, 50, 51, 52, 44, 53, 54, 55, 44, 56, 57, 48, 46, 57, 57, 41 },
+        { 40, 36, 50, 46, 48, 48, 41 },
+        { 40, 36, 49, 51, 46, 48, 48, 41 },
+        { 40, 36, 49, 50, 52, 46, 48, 48, 41 },
+        { 40, 36, 49, 44, 50, 51, 53, 46, 48, 48, 41 },
+        { 40, 36, 49, 50, 44, 51, 52, 54, 46, 48, 48, 41 },
+        { 40, 36, 49, 50, 51, 44, 52, 53, 55, 46, 48, 48, 41 },
+        { 40, 36, 49, 44, 50, 51, 52, 44, 53, 54, 56, 46, 48, 48, 41 },
+        { 40, 36, 49, 50, 44, 51, 52, 53, 44, 54, 55, 57, 46, 48, 48, 41 },
+        { 40, 36, 49, 50, 51, 44, 52, 53, 54, 44, 55, 57, 48, 46, 48, 48, 41 },
+        { 40, 36, 49, 44, 50, 51, 52, 44, 53, 54, 55, 44, 56, 57, 49, 46, 48, 48, 41 },
+        { 36, 49, 49, 48, 46, 48, 48 },
+        { 36, 49, 44, 49, 48, 48, 46, 48, 48 },
+        { 36, 49, 49, 44, 48, 48, 48, 46, 48, 48 },
+        { 36, 49, 49, 48, 44, 48, 48, 48, 46, 48, 48 },
+        { 36, 49, 44, 49, 48, 48, 44, 48, 48, 48, 46, 48, 48 },
+        { 36, 49, 49, 44, 48, 48, 48, 44, 48, 48, 48, 46, 48, 48 },
+        { 36, 49, 49, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 48, 48 },
+        { 36, 49, 44, 49, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 48, 48 },
+        { 40, 36, 49, 49, 48, 46, 48, 48, 41 },
+        { 40, 36, 49, 44, 49, 48, 48, 46, 48, 48, 41 },
+        { 40, 36, 49, 49, 44, 48, 48, 48, 46, 48, 48, 41 },
+        { 40, 36, 49, 49, 48, 44, 48, 48, 48, 46, 48, 48, 41 },
+        { 40, 36, 49, 44, 49, 48, 48, 44, 48, 48, 48, 46, 48, 48, 41 },
+        { 40, 36, 49, 49, 44, 48, 48, 48, 44, 48, 48, 48, 46, 48, 48, 41 },
+        { 40, 36, 49, 49, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 48, 48, 41 },
+        { 40, 36, 49, 44, 49, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 48, 48, 41 },
+        { 36, 50, 46, 48, 48 },
+        { 36, 50, 48, 46, 48, 48 },
+        { 36, 50, 48, 48, 46, 48, 48 },
+        { 36, 50, 44, 48, 48, 48, 46, 48, 48 },
+        { 36, 50, 48, 44, 48, 48, 48, 46, 48, 48 },
+        { 36, 50, 48, 48, 44, 48, 48, 48, 46, 48, 48 },
+        { 36, 50, 44, 48, 48, 48, 44, 48, 48, 48, 46, 48, 48 },
+        { 36, 50, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 48, 48 },
+        { 36, 50, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 48, 48 },
+        { 36, 50, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 48, 48 },
+        { 40, 36, 50, 46, 48, 48, 41 },
+        { 40, 36, 50, 48, 46, 48, 48, 41 },
+        { 40, 36, 50, 48, 48, 46, 48, 48, 41 },
+        { 40, 36, 50, 44, 48, 48, 48, 46, 48, 48, 41 },
+        { 40, 36, 50, 48, 44, 48, 48, 48, 46, 48, 48, 41 },
+        { 40, 36, 50, 48, 48, 44, 48, 48, 48, 46, 48, 48, 41 },
+        { 40, 36, 50, 44, 48, 48, 48, 44, 48, 48, 48, 46, 48, 48, 41 },
+        { 40, 36, 50, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 48, 48, 41 },
+        { 40, 36, 50, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 48, 48, 41 },
+        { 40, 36, 50, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 48, 48, 41 },
+        { 36, 49, 48, 46, 48, 48 },
+        { 36, 49, 48, 48, 46, 48, 48 },
+        { 36, 49, 44, 48, 48, 48, 46, 48, 48 },
+        { 36, 49, 48, 44, 48, 48, 48, 46, 48, 48 },
+        { 36, 49, 48, 48, 44, 48, 48, 48, 46, 48, 48 },
+        { 36, 49, 44, 48, 48, 48, 44, 48, 48, 48, 46, 48, 48 },
+        { 36, 49, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 48, 48 },
+        { 36, 49, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 48, 48 },
+        { 36, 49, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 48, 48 },
+        { 36, 57, 46, 57, 57 },
+        { 36, 57, 57, 46, 57, 57 },
+        { 36, 57, 57, 57, 46, 57, 57 },
+        { 36, 57, 44, 57, 57, 57, 46, 57, 57 },
+        { 36, 57, 57, 44, 57, 57, 57, 46, 57, 57 },
+        { 36, 57, 57, 57, 44, 57, 57, 57, 46, 57, 57 },
+        { 36, 57, 44, 57, 57, 57, 44, 57, 57, 57, 46, 57, 57 },
+        { 36, 57, 57, 44, 57, 57, 57, 44, 57, 57, 57, 46, 57, 57 },
+        { 36, 57, 57, 57, 44, 57, 57, 57, 44, 57, 57, 57, 46, 57, 57 },
+        { 40, 36, 49, 48, 46, 48, 48, 41 },
+        { 40, 36, 49, 48, 48, 46, 48, 48, 41 },
+        { 40, 36, 49, 44, 48, 48, 48, 46, 48, 48, 41 },
+        { 40, 36, 49, 48, 44, 48, 48, 48, 46, 48, 48, 41 },
+        { 40, 36, 49, 48, 48, 44, 48, 48, 48, 46, 48, 48, 41 },
+        { 40, 36, 49, 44, 48, 48, 48, 44, 48, 48, 48, 46, 48, 48, 41 },
+        { 40, 36, 49, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 48, 48, 41 },
+        { 40, 36, 49, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 48, 48, 41 },
+        { 40, 36, 49, 44, 48, 48, 48, 44, 48, 48, 48, 44, 48, 48, 48, 46, 48, 48, 41 },
+        { 40, 36, 57, 46, 57, 57, 41 },
+        { 40, 36, 57, 57, 46, 57, 57, 41 },
+        { 40, 36, 57, 57, 57, 46, 57, 57, 41 },
+        { 40, 36, 57, 44, 57, 57, 57, 46, 57, 57, 41 },
+        { 40, 36, 57, 57, 44, 57, 57, 57, 46, 57, 57, 41 },
+        { 40, 36, 57, 57, 57, 44, 57, 57, 57, 46, 57, 57, 41 },
+        { 40, 36, 57, 44, 57, 57, 57, 44, 57, 57, 57, 46, 57, 57, 41 },
+        { 40, 36, 57, 57, 44, 57, 57, 57, 44, 57, 57, 57, 46, 57, 57, 41 },
+        { 40, 36, 57, 57, 57, 44, 57, 57, 57, 44, 57, 57, 57, 46, 57, 57, 41 },
+        { 36, 49, 46, 48, 48 },
+        { 36, 49, 50, 46, 48, 48 },
+        { 36, 49, 50, 51, 46, 48, 48 },
+        { 36, 49, 44, 50, 51, 52, 46, 48, 48 },
+        { 36, 49, 50, 44, 51, 52, 53, 46, 48, 48 },
+        { 36, 49, 50, 51, 44, 52, 53, 54, 46, 48, 48 },
+        { 36, 49, 44, 50, 51, 52, 44, 53, 54, 55, 46, 48, 48 },
+        { 36, 49, 50, 44, 51, 52, 53, 44, 54, 55, 56, 46, 48, 48 },
+        { 36, 49, 50, 51, 44, 52, 53, 54, 44, 55, 56, 57, 46, 48, 48 },
+        { 36, 49, 44, 50, 51, 52, 44, 53, 54, 55, 44, 56, 57, 48, 46, 48, 48 },
+        { 40, 36, 49, 46, 48, 48, 41 },
+        { 40, 36, 49, 50, 46, 48, 48, 41 },
+        { 40, 36, 49, 50, 51, 46, 48, 48, 41 },
+        { 40, 36, 49, 44, 50, 51, 52, 46, 48, 48, 41 },
+        { 40, 36, 49, 50, 44, 51, 52, 53, 46, 48, 48, 41 },
+        { 40, 36, 49, 50, 51, 44, 52, 53, 54, 46, 48, 48, 41 },
+        { 40, 36, 49, 44, 50, 51, 52, 44, 53, 54, 55, 46, 48, 48, 41 },
+        { 40, 36, 49, 50, 44, 51, 52, 53, 44, 54, 55, 56, 46, 48, 48, 41 },
+        { 40, 36, 49, 50, 51, 44, 52, 53, 54, 44, 55, 56, 57, 46, 48, 48, 41 },
+        { 40, 36, 49, 44, 50, 51, 52, 44, 53, 54, 55, 44, 56, 57, 48, 46, 48, 48, 41 },
+        { 40, 36, 50, 44, 53, 57, 57, 46, 52, 48, 41 },
+        { 40, 36, 50, 44, 53, 57, 57, 46, 51, 52, 41 },
+        { 40, 36, 50, 44, 53, 57, 57, 46, 51, 51, 41 },
+        { 36, 49, 46, 48, 48 },
+        { 36, 49, 46, 48, 48 },
+        { 36, 49, 46, 48, 48 },
+        { 36, 49, 46, 48, 48 },
+        { 36, 49, 46, 48, 48 },
+        { 36, 49, 46, 48, 49 },
+        { 36, 49, 46, 48, 49 },
+        { 36, 49, 46, 48, 49 },
+        { 36, 49, 46, 48, 49 },
+        { 36, 49, 46, 48, 49 },
+        { 36, 49, 46, 50, 50 },
+        { 36, 49, 46, 50, 50 },
+        { 36, 49, 46, 50, 50 },
+        { 36, 49, 46, 50, 50 },
+        { 36, 49, 46, 50, 50 },
+        { 36, 49, 46, 50, 50 },
+        { 36, 49, 46, 50, 50 },
+        { 36, 49, 46, 50, 50 },
+        { 36, 49, 46, 50, 50 },
+        { 36, 49, 46, 50, 50 },
+        { 36, 49, 46, 50, 50 },
+        { 36, 49, 46, 50, 50 },
+        { 36, 49, 46, 50, 50 },
+        { 36, 49, 46, 50, 50 },
+        { 36, 49, 46, 50, 50 },
+        { 36, 49, 46, 50, 50 },
+        { 36, 49, 46, 50, 50 },
+        { 36, 49, 46, 50, 50 },
+        { 36, 49, 46, 50, 50 },
+        { 36, 49, 46, 50, 50 },
+        { 36, 49, 46, 50, 51 },
+        { 36, 49, 46, 50, 51 },
+        { 36, 49, 46, 50, 51 },
+        { 36, 49, 46, 50, 51 },
+        { 36, 49, 46, 50, 51 },
+        { 36, 49, 46, 50, 51 },
+        { 36, 49, 46, 50, 51 },
+        { 36, 49, 46, 50, 51 },
+        { 36, 49, 46, 50, 51 },
+        { 36, 49, 46, 50, 51 },
+        { 36, 49, 46, 50, 51 },
+        { 36, 49, 46, 50, 51 },
+        { 36, 49, 46, 50, 51 },
+        { 36, 49, 46, 50, 51 },
+        { 36, 49, 46, 50, 51 },
+        { 36, 49, 46, 50, 51 },
+        { 36, 49, 46, 50, 51 },
+        { 36, 49, 46, 50, 51 },
+        { 36, 49, 46, 50, 51 },
+        { 36, 49, 46, 50, 51 },
+        { 36, 49, 44, 48, 48, 57, 44, 49, 51, 54, 46, 55, 49 },
+        { 36, 50, 44, 53, 49, 56, 44, 52, 54, 51, 46, 52, 54 },
+        { 36, 50, 44, 53, 51, 50, 44, 52, 51, 56, 46, 56, 51 },
+        { 36, 51, 44, 54, 53, 48, 44, 52, 53, 56, 46, 53, 51 },
+        { 36, 51, 44, 49, 52, 55, 44, 51, 52, 57, 46, 54, 50 },
+        { 36, 53, 44, 52, 49, 49, 44, 51, 51, 57, 46, 55, 53 },
+        { 36, 56, 44, 53, 56, 51, 44, 55, 50, 49, 46, 50, 50 },
+        { 36, 49, 51, 44, 52, 55, 53, 44, 48, 53, 55, 46, 56, 50 },
+        { 36, 51, 51, 44, 53, 56, 56, 44, 52, 52, 49, 46, 57, 56 },
+        { 36, 57, 57, 44, 57, 55, 57, 44, 55, 57, 52, 46, 48, 56 },
+        { 36, 57, 57, 44, 57, 51, 55, 44, 52, 51, 49, 46, 53, 56 },
+        { 36, 57, 57, 44, 51, 56, 54, 44, 55, 49, 57, 46, 48, 56 },
+        { 36, 51, 51, 44, 56, 53, 51, 44, 48, 50, 53, 46, 52, 55 },
+        { 36, 51, 52, 44, 48, 52, 54, 44, 52, 50, 54, 46, 54, 48 },
+        { 36, 51, 52, 44, 51, 49, 50, 44, 56, 48, 48, 46, 56, 55 },
+        { 36, 51, 52, 44, 51, 56, 55, 44, 53, 54, 52, 46, 55, 53 },
+        { 36, 51, 52, 44, 52, 54, 48, 44, 53, 51, 55, 46, 56, 55 },
+        { 36, 51, 52, 44, 53, 55, 57, 44, 49, 55, 53, 46, 49, 50 },
+        { 36, 51, 52, 44, 54, 53, 51, 44, 57, 51, 57, 46, 48, 50 },
+        { 36, 51, 52, 44, 56, 52, 55, 44, 51, 52, 48, 46, 49, 53 },
+        { 36, 51, 52, 44, 57, 50, 48, 44, 51, 49, 51, 46, 50, 55 },
+        { 36, 51, 53, 44, 48, 51, 56, 44, 57, 53, 48, 46, 53, 50 },
+        { 36, 51, 53, 44, 49, 49, 51, 44, 55, 49, 52, 46, 52, 49 },
+        { 36, 51, 53, 44, 49, 56, 54, 44, 54, 56, 55, 46, 53, 51 },
+        { 36, 51, 53, 44, 51, 48, 53, 44, 51, 50, 52, 46, 55, 56 },
+        { 36, 51, 53, 44, 51, 56, 48, 44, 48, 56, 56, 46, 54, 55 },
+        { 36, 51, 53, 44, 52, 53, 51, 44, 48, 54, 49, 46, 55, 57 },
+        { 36, 51, 53, 44, 53, 55, 49, 44, 54, 57, 57, 46, 48, 53 },
+        { 36, 51, 53, 44, 53, 55, 51, 44, 52, 56, 57, 46, 56, 49 },
+        { 36, 51, 53, 44, 54, 52, 54, 44, 52, 54, 50, 46, 57, 51 },
+        { 36, 51, 53, 44, 56, 51, 57, 44, 56, 54, 52, 46, 48, 55 },
+        { 36, 51, 53, 44, 57, 49, 50, 44, 56, 51, 55, 46, 50, 48 },
+        { 36, 51, 54, 44, 48, 51, 49, 44, 52, 55, 52, 46, 52, 53 },
+        { 36, 51, 54, 44, 49, 48, 54, 44, 50, 51, 56, 46, 51, 51 },
+        { 36, 51, 54, 44, 49, 55, 57, 44, 50, 49, 49, 46, 52, 53 },
+        { 36, 51, 54, 44, 50, 57, 55, 44, 56, 52, 56, 46, 55, 48 },
+        { 36, 51, 54, 44, 51, 55, 50, 44, 54, 49, 50, 46, 53, 57 },
+        { 36, 51, 54, 44, 53, 54, 52, 44, 50, 50, 50, 46, 57, 55 },
+        { 36, 51, 54, 44, 53, 54, 54, 44, 48, 49, 51, 46, 55, 51 },
+        { 36, 51, 54, 44, 54, 51, 56, 44, 57, 56, 54, 46, 56, 53 },
+        { 36, 51, 54, 44, 55, 53, 55, 44, 54, 50, 52, 46, 49, 48 },
+        { 36, 51, 54, 44, 56, 51, 50, 44, 51, 56, 55, 46, 57, 57 },
+        { 36, 51, 54, 44, 57, 48, 53, 44, 51, 54, 49, 46, 49, 49 },
+        { 36, 51, 55, 44, 48, 50, 51, 44, 57, 57, 56, 46, 51, 55 },
+        { 36, 51, 55, 44, 48, 57, 56, 44, 55, 54, 50, 46, 50, 53 },
+        { 36, 51, 55, 44, 49, 55, 49, 44, 55, 51, 53, 46, 51, 55 },
+        { 36, 51, 55, 44, 50, 57, 48, 44, 51, 55, 50, 46, 54, 50 },
+        { 36, 51, 55, 44, 51, 54, 53, 44, 49, 51, 54, 46, 53, 50 },
+        { 36, 51, 55, 44, 53, 53, 56, 44, 53, 51, 55, 46, 54, 53 },
+        { 36, 51, 55, 44, 54, 51, 49, 44, 53, 49, 48, 46, 55, 55 },
+        { 36, 51, 55, 44, 55, 53, 48, 44, 49, 52, 56, 46, 48, 50 },
+        { 36, 51, 55, 44, 56, 50, 52, 44, 57, 49, 49, 46, 57, 49 },
+        { 36, 51, 55, 44, 56, 57, 55, 44, 56, 56, 53, 46, 48, 51 },
+        { 36, 51, 56, 44, 48, 49, 54, 44, 53, 50, 50, 46, 50, 56 },
+        { 36, 51, 56, 44, 48, 57, 49, 44, 50, 56, 54, 46, 49, 55 },
+        { 36, 51, 56, 44, 49, 54, 52, 44, 50, 53, 57, 46, 50, 57 },
+        { 36, 51, 56, 44, 50, 56, 50, 44, 56, 57, 54, 46, 53, 53 },
+        { 36, 51, 56, 44, 50, 56, 52, 44, 54, 56, 55, 46, 51, 49 },
+        { 36, 51, 56, 44, 51, 53, 55, 44, 54, 54, 48, 46, 52, 51 },
+        { 36, 51, 56, 44, 53, 53, 49, 44, 48, 54, 49, 46, 53, 55 },
+        { 36, 51, 56, 44, 54, 50, 52, 44, 48, 51, 52, 46, 55, 48 },
+        { 36, 51, 56, 44, 55, 52, 50, 44, 54, 55, 49, 46, 57, 53 },
+        { 36, 51, 56, 44, 56, 49, 55, 44, 52, 51, 53, 46, 56, 51 },
+        { 36, 51, 56, 44, 56, 57, 48, 44, 52, 48, 56, 46, 57, 53 },
+        { 36, 51, 57, 44, 48, 48, 57, 44, 48, 52, 54, 46, 50, 48 },
+        { 36, 51, 57, 44, 48, 56, 51, 44, 56, 49, 48, 46, 48, 57 },
+        { 36, 51, 57, 44, 50, 55, 53, 44, 52, 50, 48, 46, 52, 55 },
+        { 36, 51, 57, 44, 50, 55, 55, 44, 50, 49, 49, 46, 50, 51 },
+        { 36, 51, 57, 44, 51, 53, 48, 44, 49, 56, 52, 46, 51, 53 },
+        { 36, 51, 57, 44, 52, 54, 56, 44, 56, 50, 49, 46, 54, 48 },
+        { 36, 51, 57, 44, 53, 52, 51, 44, 53, 56, 53, 46, 52, 57 },
+        { 36, 51, 57, 44, 54, 49, 54, 44, 53, 53, 56, 46, 54, 49 },
+        { 36, 51, 57, 44, 55, 51, 53, 44, 49, 57, 53, 46, 56, 55 },
+        { 36, 51, 57, 44, 56, 48, 57, 44, 57, 53, 57, 46, 55, 53 },
+        { 36, 51, 57, 44, 56, 56, 50, 44, 57, 51, 50, 46, 56, 55 },
+        { 36, 52, 48, 44, 48, 48, 49, 44, 53, 55, 48, 46, 49, 50 },
+        { 36, 52, 48, 44, 48, 55, 54, 44, 51, 51, 52, 46, 48, 50 },
+        { 36, 52, 48, 44, 50, 54, 57, 44, 55, 51, 53, 46, 49, 53 },
+        { 36, 52, 48, 44, 51, 52, 50, 44, 55, 48, 56, 46, 50, 55 },
+        { 36, 52, 48, 44, 52, 54, 49, 44, 51, 52, 53, 46, 53, 50 },
+        { 36, 52, 48, 44, 53, 51, 54, 44, 49, 48, 57, 46, 52, 49 },
+        { 36, 52, 48, 44, 54, 48, 57, 44, 48, 56, 50, 46, 53, 51 },
+        { 36, 52, 48, 44, 55, 50, 55, 44, 55, 49, 57, 46, 55, 56 },
+        { 36, 52, 48, 44, 56, 48, 50, 44, 52, 56, 51, 46, 54, 55 },
+        { 36, 52, 48, 44, 56, 55, 53, 44, 52, 53, 54, 46, 55, 57 },
+        { 36, 52, 48, 44, 57, 57, 52, 44, 48, 57, 52, 46, 48, 53 },
+        { 36, 52, 48, 44, 57, 57, 53, 44, 56, 56, 52, 46, 56, 49 },
+        { 36, 52, 49, 44, 48, 54, 56, 44, 56, 53, 55, 46, 57, 51 },
+        { 36, 52, 49, 44, 50, 54, 50, 44, 50, 53, 57, 46, 48, 55 },
+        { 36, 52, 49, 44, 51, 51, 53, 44, 50, 51, 50, 46, 50, 48 },
+        { 36, 52, 49, 44, 52, 53, 51, 44, 56, 54, 57, 46, 52, 53 },
+        { 36, 52, 49, 44, 53, 50, 56, 44, 54, 51, 51, 46, 51, 51 },
+        { 36, 52, 49, 44, 54, 48, 49, 44, 54, 48, 54, 46, 52, 53 },
+        { 36, 52, 49, 44, 55, 50, 48, 44, 50, 52, 51, 46, 55, 48 },
+        { 36, 52, 49, 44, 55, 57, 53, 44, 48, 48, 55, 46, 53, 57 },
+        { 36, 52, 49, 44, 57, 56, 54, 44, 54, 49, 55, 46, 57, 55 },
+        { 36, 52, 50, 44, 48, 51, 52, 44, 48, 55, 50, 46, 56, 55 },
+        { 36, 52, 50, 44, 49, 48, 55, 44, 48, 52, 53, 46, 57, 56 },
+        { 36, 52, 50, 44, 49, 51, 52, 44, 51, 53, 52, 46, 57, 56 },
+    };
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/text/Format/DecimalFormat/RoundingAndPropertyTest.java	Thu Oct 11 16:59:50 2012 -0700
@@ -0,0 +1,795 @@
+/*
+ * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/* @test
+ * @bug 7050528
+ * @summary Test java.text.DecimalFormat fast-path for format(double...)
+ * @author Olivier Lagneau
+ * @run main RoundingAndPropertyTest
+ *
+ */
+
+/* -----------------------------------------------------------------------------
+ * Note :
+ *  Since fast-path algorithm   does not modify  any feature  of DecimalFormat,
+ *  some tests or  values in this program  may have to be adapted/added/removed
+ *  when any change has been done in the fast-path source  code, because the
+ *  conditions for exercising fast-path may change.
+ *
+ *  This is specially true if the set of constraints to fall in the fast-path
+ *  case is relaxed in any manner.
+ *
+ * Usage :
+ *  - Run main without any argument to test against a set of golden values and
+ *    associated results hard-coded in the source code. That will do the tests
+ *    described below
+ *    See below comment section named "Description".
+ *
+ *  or
+ *
+ *  - Run main with string argument "-gengold" to output source code of
+ *    GoldenFormattedValues.java class file with the jdk version used while
+ *    generating the code.
+ *    See below comment section named : "Modifying Golden Values".
+ *
+ *  In case of error while running the test, a Runtime exception is generated
+ *  providing the numbers of errors detected (format of golden values checks and
+ *  property changes checks), and the program exit.
+ *
+ * Description :
+ *
+ *  This test first checks that localization of digits is done correctly when
+ *  calling DecimalFormat.format() on the array of values DecimalLocalizationValues
+ *  found in GoldenDoubleValues, using the locale FullLocalizationTestLocale
+ *  (from GoldenDoubleValues) that implies localization of digits. it checks the
+ *  the results against expected returned string. In case of formatting error,
+ *  it provides a message informing which value was wrongly formatted.
+ *
+ *  Then it checks the results of  calling NumberFormat.format(double) on a set
+ *  of  predefined golden values and  checks results against expected returned
+ *  string.  It does this both for the  decimal case, with an instance returned
+ *  NumberFormat.getInstance() call and for the currency case, with an instance
+ *  returned by NumberFormat.getCurrencyInstance(). Almost all the tested  double
+ *  values satisfy the constraints assumed by the fast-path algorithm for
+ *  format(double ...). Some  are voluntarily outside the scope of fast-path to
+ *  check that the algorithm correctly eliminate them. In case of formatting
+ *  error a message provides information on the golden value raising the error
+ *  (value, exact decimal value (using BidDecimal), expected result, formatted result).
+ *
+ *  Last  the test checks the status and  behavior of a DecimalFormat instance
+ *  when changing  properties that  make this  instance  satisfy/invalidate its
+ *  fast-path status, depending on the predefined  set of fast-path constraints.
+ *
+ *  The golden  results are predefined arrays  of  int[] containing the unicode
+ *  ints of the chars  in  the expected  formatted  string, when  using  locale
+ *  provided in  GoldenDoubleValues class. The   results are those obtained  by
+ *  using a reference jdk  version (for example  one that does not contains the
+ *  DecimalFormat fast-path algorithm, like jdk80-b25).
+ *
+ *  The double values from which we get golden results are stored inside two
+ *  arrays of double values:
+ *  - DecimalGoldenValues  for testing NumberFormat.getInstance().
+ *  - CurrencyGoldenValues for testing NumberFormat.getCurrencyInstance().
+ *  These arrays are located in GoldenDoubleValues.java source file.
+ *
+ *  For each double value in the arrays above, there is an associated golden
+ *  result. These results are stored in arrays of int[]:
+ *  - DecimalGoldenFormattedValues  for expected decimal golden results.
+ *  - CurrencyGoldenFormattedValues for expected currency golden results.
+ *  - DecimalDigitsLocalizedFormattedValues for expected localized digit results.
+ *
+ *  We store the results in int[] arrays containing the expected unicode values
+ *  because the  compiler that will compile the  containing java file may use a
+ *  different locale than the one registered in GoldenDoubleValues.java.  These
+ *  arrays are  located in  a  separate GoldenFormattedValues.java  source file
+ *  that is generated  by  RoundingAndPropertyTest using  "-gengold"  parameter.
+ *  See below "Modifying Golden Values".
+ *
+ *  The golden value arrays can be expanded, modified ... to test additional
+ *  or different double values. In that case, the source file of class
+ *  GoldenFormattedValues must be regenerated to replace the existing one..
+ *
+ * Modifying Golden Values :
+ *
+ *  In order to ease further modification of the list of double values checked
+ *  and associated golden results, the test includes the method
+ *  generatesGoldenFormattedValuesClass() that writes on standard output stream
+ *  the source code for GoldenFormattedValues class that includes the expected
+ *  results arrays.
+ *
+ *  Here are the steps to follow for updating/modifying golden values and results:
+ *   1- Edit GoldenDoubleValues.java to add/remove/modify golden or localization
+ *      values.
+ *   2- Run main with "-gengold" string argument with a target jdk.
+ *      (at the creation of this test file, the target jdk used was jdk1.8.0-ea).
+ *   2- Copy this java code that has been writen on standard output and replace
+ *      GoldenFormattedValues.java contents by the generated output.
+ *   3- Check that this updated code compiles.
+ *  [4]- If needed replaces existing GoldenDoubleValues and GoldenFormattedValues
+ *      files in jdk/test section, respectively by the one modified at step 1 and
+ *      generated at step 2.
+ * -----------------------------------------------------------------------------
+ */
+
+import java.util.*;
+import java.text.NumberFormat;
+import java.text.DecimalFormat;
+import java.text.DecimalFormatSymbols;
+import java.math.RoundingMode;
+import java.math.BigDecimal;
+
+
+public class RoundingAndPropertyTest {
+
+
+    // Prints on standard output stream the unicode values of chars as a
+    // comma-separated list of int values
+    private static void printUnicodeValuesArray(char[] chars) {
+        for (int i = 0; i < chars.length; i++) {
+            System.out.print((int) chars[i]);
+            if (i != (chars.length - 1))
+                System.out.print(", ");
+        }
+    }
+
+    // Converts given array of unicode values as an array of chars.
+    // Returns this converted array.
+    private static char[] getCharsFromUnicodeArray(int[] unicodeValues) {
+        char[] chars = new char[unicodeValues.length];
+
+        for (int i = 0; i < unicodeValues.length; i++) {
+            chars[i] = (char) unicodeValues[i];
+        }
+        return chars;
+    }
+
+    /* Prints on standard output stream the java code of resulting
+     * GoldenFormattedValues class for the golden values found in
+     * class GoldenDoubleValues.
+     */
+    private static void generatesGoldenFormattedValuesClass() {
+
+        String fourWhiteSpaces    = "    ";
+        String eightWhiteSpaces   = "        ";
+
+        // Prints header without Copyright header.
+        System.out.println("/* This is a machine generated file - Please DO NOT EDIT !");
+        System.out.println(" * Change RoundingAndPropertyTest instead,");
+        System.out.println(" * and run with \"-gengold\" argument to regenerate (without copyright header).");
+        System.out.println(" */");
+        System.out.println();
+
+        System.out.println("/* This file contains the set of result Strings expected from calling inside");
+        System.out.println(" * RoundingAndPropertyTest the method NumberFormat.format() upon the set of");
+        System.out.println(" * double values provided in GoldenDoubleValues.java. It contains three arrays,");
+        System.out.println(" * each containing arrays of unicode values representing the expected string");
+        System.out.println(" * result when calling format() on the corresponding (i.e. same index) double");
+        System.out.println(" * value found in GoldenDoubleValues arrays :");
+        System.out.println(" * - DecimalDigitsLocalizedFormattedValues corresponds to DecimalLocalizationValues,");
+        System.out.println(" *   when using FullLocalizationTestLocale to format.");
+        System.out.println(" * - DecimalGoldenFormattedValues corresponds to DecimalGoldenValues, when used");
+        System.out.println(" *   in the decimal pattern case together with TestLocale.");
+        System.out.println(" * - CurrencyGoldenFormattedValues corresponds to CurrencyGoldenValues. when used");
+        System.out.println(" *   in the currency pattern case together with TestLocale.");
+        System.out.println(" * Please see documentation in RoundingAndPropertyTest.java for more details.");
+        System.out.println(" *");
+        System.out.println(" * This file generated by running RoundingAndPropertyTest with \"-gengold\" argument.");
+        System.out.println(" */");
+        System.out.println();
+
+        // Prints beginning of class GoldenFormattedValues.
+        System.out.println("class GoldenFormattedValues {");
+        System.out.println();
+        System.out.println(
+            fourWhiteSpaces +
+            "// The formatted values below were generated from golden values");
+        System.out.print(
+            fourWhiteSpaces +
+            "// listed in GoldenDoubleValues.java,");
+        System.out.println(" using the following jvm version :");
+        System.out.println(
+            fourWhiteSpaces + "//   " +
+            System.getProperty("java.vendor") +
+            " " +
+            System.getProperty("java.vm.name") +
+            " " +
+            System.getProperty("java.version"));
+        System.out.println(
+            fourWhiteSpaces +
+            "//   locale for golden double values : " + GoldenDoubleValues.TestLocale);
+        System.out.println(
+            fourWhiteSpaces +
+            "//   locale for testing digit localization : " + GoldenDoubleValues.FullLocalizationTestLocale);
+        System.out.println();
+
+        // Prints the expected results when digit localization happens
+        System.out.println(
+            fourWhiteSpaces +
+            "// The array of int[] unicode values storing the expected results");
+        System.out.print(
+            fourWhiteSpaces +
+            "// when experiencing full localization of digits");
+        System.out.println(" on DecimalLocalizationValues.");
+        System.out.println(
+            fourWhiteSpaces +
+            "static int[][] DecimalDigitsLocalizedFormattedValues = {");
+        NumberFormat df =
+            NumberFormat.getInstance(GoldenDoubleValues.FullLocalizationTestLocale);
+        for (int i = 0;
+             i < GoldenDoubleValues.DecimalLocalizationValues.length;
+             i++) {
+            double d = GoldenDoubleValues.DecimalLocalizationValues[i];
+            String formatted = df.format(d);
+            char[] decFmtChars = formatted.toCharArray();
+
+            System.out.print(eightWhiteSpaces + "{ ");
+            printUnicodeValuesArray(decFmtChars);
+            System.out.println(" },");
+        }
+        System.out.println(fourWhiteSpaces + "};");
+        System.out.println();
+
+        // Prints the golden expected results for the decimal pattern case
+        System.out.println(
+            fourWhiteSpaces +
+            "// The array of int[] unicode values storing the expected results");
+        System.out.print(
+            fourWhiteSpaces +
+            "// when calling Decimal.format(double)");
+        System.out.println(" on the decimal GoldenDoubleValues.");
+        System.out.println(
+            fourWhiteSpaces +
+            "static int[][] DecimalGoldenFormattedValues = {");
+        df = NumberFormat.getInstance(GoldenDoubleValues.TestLocale);
+        for (int i = 0;
+             i < GoldenDoubleValues.DecimalGoldenValues.length;
+             i++) {
+            double d = GoldenDoubleValues.DecimalGoldenValues[i];
+            String formatted = df.format(d);
+            char[] decFmtChars = formatted.toCharArray();
+
+            System.out.print(eightWhiteSpaces + "{ ");
+            printUnicodeValuesArray(decFmtChars);
+            System.out.println(" },");
+        }
+        System.out.println(fourWhiteSpaces + "};");
+        System.out.println();
+
+        // Prints the golden expected results for the currency pattern case
+        System.out.println(
+            fourWhiteSpaces +
+            "// The array of int[] unicode values storing the expected results");
+        System.out.print(
+            fourWhiteSpaces +
+            "// when calling Decimal.format(double)");
+        System.out.println(" on the currency GoldenDoubleValues.");
+        System.out.println(
+            fourWhiteSpaces +
+            "static int[][] CurrencyGoldenFormattedValues = {");
+        NumberFormat cf =
+            NumberFormat.getCurrencyInstance(GoldenDoubleValues.TestLocale);
+        for (int i = 0;
+             i < GoldenDoubleValues.CurrencyGoldenValues.length;
+             i++) {
+            double d = GoldenDoubleValues.CurrencyGoldenValues[i];
+            String formatted = cf.format(d);
+            char[] decFmtChars = formatted.toCharArray();
+
+            System.out.print(eightWhiteSpaces + "{ ");
+            printUnicodeValuesArray(decFmtChars);
+            System.out.println(" },");
+        }
+        System.out.println(fourWhiteSpaces + "};");
+        System.out.println();
+
+        // Prints end of GoldenFormattedValues class.
+        System.out.println("}");
+    }
+
+    private static int testLocalizationValues() {
+
+        DecimalFormat df = (DecimalFormat)
+            NumberFormat.getInstance(GoldenDoubleValues.FullLocalizationTestLocale);
+
+        double[] localizationValues = GoldenDoubleValues.DecimalLocalizationValues;
+        int size = localizationValues.length;
+        int successCounter = 0;
+        int failureCounter = 0;
+        for (int i = 0; i < size; i++) {
+
+            double d = localizationValues[i];
+            String formatted = df.format(d);
+
+            char[] expectedUnicodeArray =
+                getCharsFromUnicodeArray(
+                    GoldenFormattedValues.DecimalDigitsLocalizedFormattedValues[i]);
+            String expected = new String(expectedUnicodeArray);
+
+            if (!formatted.equals(expected)) {
+                failureCounter++;
+                System.out.println(
+                    "--- Localization error for value d = " + d +
+                    ". Exact value = " + new BigDecimal(d).toString() +
+                    ". Expected result = " + expected +
+                    ". Output result = " + formatted);
+            } else successCounter++;
+        }
+        System.out.println("Checked positively " + successCounter +
+                           " golden decimal values out of " + size +
+                           " tests. There were " + failureCounter +
+                           " format failure");
+
+        return failureCounter;
+    }
+
+    private static int testGoldenValues(java.text.DecimalFormat df,
+                                        java.text.DecimalFormat cf) {
+
+        double[] goldenDecimalValues = GoldenDoubleValues.DecimalGoldenValues;
+        int decimalSize = goldenDecimalValues.length;
+        int decimalSuccessCounter = 0;
+        int decimalFailureCounter = 0;
+        for (int i = 0; i < decimalSize; i++) {
+
+            double d = goldenDecimalValues[i];
+            String formatted = df.format(d);
+
+            char[] expectedUnicodeArray =
+                getCharsFromUnicodeArray(
+                    GoldenFormattedValues.DecimalGoldenFormattedValues[i]);
+            String expected = new String(expectedUnicodeArray);
+
+            if (!formatted.equals(expected)) {
+                decimalFailureCounter++;
+                System.out.println(
+                    "--- Error for golden value d = " + d +
+                    ". Exact value = " + new BigDecimal(d).toString() +
+                    ". Expected result = " + expected +
+                    ". Output result = " + formatted);
+            } else decimalSuccessCounter++;
+        }
+        System.out.println("Checked positively " + decimalSuccessCounter +
+                           " golden decimal values out of " + decimalSize +
+                           " tests. There were " + decimalFailureCounter +
+                           " format failure");
+
+        double[] goldenCurrencyValues = GoldenDoubleValues.CurrencyGoldenValues;
+        int currencySize = goldenCurrencyValues.length;
+        int currencySuccessCounter = 0;
+        int currencyFailureCounter = 0;
+        for (int i = 0; i < currencySize; i++) {
+            double d = goldenCurrencyValues[i];
+            String formatted = cf.format(d);
+
+            char[] expectedUnicodeArray =
+                getCharsFromUnicodeArray(
+                    GoldenFormattedValues.CurrencyGoldenFormattedValues[i]);
+            String expected = new String(expectedUnicodeArray);
+
+            if (!formatted.equals(expected)) {
+                currencyFailureCounter++;
+                System.out.println(
+                    "--- Error for golden value d = " + d +
+                    ". Exact value = " + new BigDecimal(d).toString() +
+                    ". Expected result = " + expected +
+                    ". Output result = " + formatted);
+            } else currencySuccessCounter++;
+        }
+        System.out.println("Checked positively " + currencySuccessCounter +
+                           " golden currency values out of " + currencySize +
+                           " tests. There were " + currencyFailureCounter +
+                           " format failure");
+
+        return (decimalFailureCounter + currencyFailureCounter);
+    }
+
+    // Checks that the two passed s1 and s2 string are equal, and prints
+    // out message in case of error.
+    private static boolean resultsEqual(String propertyName,
+                                        String s1,
+                                        String s2) {
+
+        boolean equality = s1.equals(s2);
+        if (!equality)
+            System.out.println(
+                "\n*** Error while reverting to default " +
+                propertyName + " property.\n" +
+                "    initial output = " + s1 +
+                ". reverted output = " + s2 + ".");
+        else System.out.println(" Test passed.");
+
+        return equality;
+
+    }
+
+    /* This methods checks the behaviour of the management of properties
+     * of a DecimalFormat instance that satisfies fast-path constraints.
+     *
+     * It does this by comparing the results of the format(double) output
+     * obtained from initial fast-path state with the output provided by
+     * the same instance that has been pushed and exercised outside
+     * fast-path rules and finally "reverted" to its initial fast-path state.
+     *
+     * The schema of actions is this :
+     *  - Call format(double) on a known DecimalFormat fast-path instance,
+     *    and store this result.
+     *  - Record the current state of a given property.
+     *  - Change the property to invalidate the fast-path state.
+     *  - Call again format(double) on the instance.
+     *  - Revert state of property to validate again fast-path context.
+     *  - Call format(double) again.
+     *  - Check that first and last call to format(double) provide same result
+     *  - Record failure if any.
+     *  - Do the same for another property with the same instance.
+     * So all the property changes are chained one after the other on only the
+     * same instance.
+     *
+     * Some properties that currently do not influence the fast-path state
+     * are also tested. This is not useful with current fast-path source
+     * but is here for testing the whole set of properties. This is the case
+     * for prefixes and suffixes, and parseBigDecimal properties.
+     */
+    private static int testSettersAndFastPath(DecimalFormat df,
+                                               boolean isCurrency) {
+
+        final double d1 = GoldenDoubleValues.PROPERTY_CHECK_POSITIVE_VALUE;
+        final double d2 = GoldenDoubleValues.PROPERTY_CHECK_NEGATIVE_VALUE;
+
+        int errors = 0;
+        boolean testSucceeded = false;
+        String firstFormatResult;
+        String secondFormatResult;
+        String propertyName;
+
+        // ---- positivePrefix property test ----
+        testSucceeded = false;
+        propertyName = "positivePrefix";
+        System.out.print("Checking " + propertyName + " property.");
+        String initialPrefix = df.getPositivePrefix();
+        firstFormatResult = df.format(d1);
+        df.setPositivePrefix("positivePrefix:");
+        df.format(d1);
+        df.setPositivePrefix(initialPrefix);
+        secondFormatResult = df.format(d1);
+        testSucceeded =
+            resultsEqual(propertyName, firstFormatResult, secondFormatResult);
+        if (!testSucceeded)
+            errors++;
+
+        // ---- positiveSuffix property test ----
+        testSucceeded = false;
+        propertyName = "positiveSuffix";
+        System.out.print("Checking " + propertyName + " property.");
+        String initialSuffix = df.getPositiveSuffix();
+        firstFormatResult = df.format(d1);
+        df.setPositiveSuffix("positiveSuffix:");
+        df.format(d1);
+        df.setPositiveSuffix(initialSuffix);
+        secondFormatResult = df.format(d1);
+        testSucceeded =
+            resultsEqual(propertyName,firstFormatResult, secondFormatResult);
+        if (!testSucceeded)
+            errors++;
+
+        // ---- negativePrefix property test ----
+        testSucceeded = false;
+        propertyName = "negativePrefix";
+        System.out.print("Checking " + propertyName + " property.");
+        initialPrefix = df.getNegativePrefix();
+        firstFormatResult = df.format(d1);
+        df.setNegativePrefix("negativePrefix:");
+        df.format(d1);
+        df.setNegativePrefix(initialPrefix);
+        secondFormatResult = df.format(d1);
+        testSucceeded =
+            resultsEqual(propertyName, firstFormatResult, secondFormatResult);
+        if (!testSucceeded)
+            errors++;
+
+        // ---- negativeSuffix property test ----
+        testSucceeded = false;
+        propertyName = "negativeSuffix";
+        System.out.print("Checking " + propertyName + " property.");
+        initialSuffix = df.getNegativeSuffix();
+        firstFormatResult = df.format(d1);
+        df.setNegativeSuffix("negativeSuffix:");
+        df.format(d1);
+        df.setNegativeSuffix(initialSuffix);
+        secondFormatResult = df.format(d1);
+        testSucceeded =
+            resultsEqual(propertyName, firstFormatResult, secondFormatResult);
+        if (!testSucceeded)
+            errors++;
+
+        // ---- multiplier property test ----
+        testSucceeded = false;
+        propertyName = "multiplier";
+        System.out.print("Checking " + propertyName + " property.");
+        int initialMultiplier = df.getMultiplier();
+        firstFormatResult = df.format(d1);
+        df.setMultiplier(10);
+        df.format(d1);
+        df.setMultiplier(initialMultiplier);
+        secondFormatResult = df.format(d1);
+        testSucceeded =
+            resultsEqual(propertyName, firstFormatResult, secondFormatResult);
+        if (!testSucceeded)
+            errors++;
+
+        // ---- groupingUsed property test ----
+        testSucceeded = false;
+        propertyName = "groupingUsed";
+        System.out.print("Checking " + propertyName + " property.");
+        boolean initialGroupingUsed = df.isGroupingUsed();
+        firstFormatResult = df.format(d1);
+        df.setGroupingUsed(!initialGroupingUsed);
+        df.format(d1);
+        df.setGroupingUsed(initialGroupingUsed);
+        secondFormatResult = df.format(d1);
+        testSucceeded =
+            resultsEqual(propertyName, firstFormatResult, secondFormatResult);
+        if (!testSucceeded)
+            errors++;
+
+        // ---- groupingSize property test ----
+        testSucceeded = false;
+        propertyName = "groupingSize";
+        System.out.print("Checking " + propertyName + " property.");
+        int initialGroupingSize = df.getGroupingSize();
+        firstFormatResult = df.format(d1);
+        df.setGroupingSize(initialGroupingSize + 1);
+        df.format(d1);
+        df.setGroupingSize(initialGroupingSize);
+        secondFormatResult = df.format(d1);
+        testSucceeded =
+            resultsEqual(propertyName, firstFormatResult, secondFormatResult);
+        if (!testSucceeded)
+            errors++;
+
+        // ---- decimalSeparatorAlwaysShown property test ----
+        testSucceeded = false;
+        propertyName = "decimalSeparatorAlwaysShown";
+        System.out.print("Checking " + propertyName + " property.");
+        boolean initialDSShown = df.isDecimalSeparatorAlwaysShown();
+        firstFormatResult = df.format(d1);
+        df.setDecimalSeparatorAlwaysShown(!initialDSShown);
+        df.format(d1);
+        df.setDecimalSeparatorAlwaysShown(initialDSShown);
+        secondFormatResult = df.format(d1);
+        testSucceeded =
+            resultsEqual(propertyName, firstFormatResult, secondFormatResult);
+        if (!testSucceeded)
+            errors++;
+
+        // ---- parseBigDecimal property test ----
+        testSucceeded = false;
+        propertyName = "parseBigDecimal";
+        System.out.print("Checking " + propertyName + " property.");
+        boolean initialParseBigdecimal = df.isParseBigDecimal();
+        firstFormatResult = df.format(d1);
+        df.setParseBigDecimal(!initialParseBigdecimal);
+        df.format(d1);
+        df.setParseBigDecimal(initialParseBigdecimal);
+        secondFormatResult = df.format(d1);
+        testSucceeded =
+            resultsEqual(propertyName, firstFormatResult, secondFormatResult);
+        if (!testSucceeded)
+            errors++;
+
+        // ---- maximumIntegerDigits property test ----
+        testSucceeded = false;
+        propertyName = "maximumIntegerDigits";
+        System.out.print("Checking " + propertyName + " property.");
+        int initialMaxIDs = df.getMaximumIntegerDigits();
+        firstFormatResult = df.format(d1);
+        df.setMaximumIntegerDigits(8);
+        df.format(d1);
+        df.setMaximumIntegerDigits(initialMaxIDs);
+        secondFormatResult = df.format(d1);
+        testSucceeded =
+            resultsEqual(propertyName, firstFormatResult, secondFormatResult);
+        if (!testSucceeded)
+            errors++;
+
+        // ---- minimumIntegerDigits property test ----
+        testSucceeded = false;
+        propertyName = "minimumIntegerDigits";
+        System.out.print("Checking " + propertyName + " property.");
+        int initialMinIDs = df.getMinimumIntegerDigits();
+        firstFormatResult = df.format(d1);
+        df.setMinimumIntegerDigits(2);
+        df.format(d1);
+        df.setMinimumIntegerDigits(initialMinIDs);
+        secondFormatResult = df.format(d1);
+        testSucceeded =
+            resultsEqual(propertyName, firstFormatResult, secondFormatResult);
+        if (!testSucceeded)
+            errors++;
+
+        // ---- maximumFractionDigits property test ----
+        testSucceeded = false;
+        propertyName = "maximumFractionDigits";
+        System.out.print("Checking " + propertyName + " property.");
+        firstFormatResult = df.format(d1);
+        df.setMaximumFractionDigits(8);
+        df.format(d1);
+        if (isCurrency) {
+            df.setMinimumFractionDigits(2);
+            df.setMaximumFractionDigits(2);
+        } else {
+            df.setMinimumFractionDigits(0);
+            df.setMaximumFractionDigits(3);
+        }
+        secondFormatResult = df.format(d1);
+        testSucceeded =
+            resultsEqual(propertyName, firstFormatResult, secondFormatResult);
+        if (!testSucceeded)
+            errors++;
+
+        // ---- minimumFractionDigits property test ----
+        testSucceeded = false;
+        propertyName = "minimumFractionDigits";
+        System.out.print("Checking " + propertyName + " property.");
+        firstFormatResult = df.format(d1);
+        df.setMinimumFractionDigits(1);
+        df.format(d1);
+        if (isCurrency) {
+            df.setMinimumFractionDigits(2);
+            df.setMaximumFractionDigits(2);
+        } else {
+            df.setMinimumFractionDigits(0);
+            df.setMaximumFractionDigits(3);
+        }
+        secondFormatResult = df.format(d1);
+        testSucceeded =
+            resultsEqual(propertyName, firstFormatResult, secondFormatResult);
+        if (!testSucceeded)
+            errors++;
+
+        // ---- currency property test ----
+        testSucceeded = false;
+        propertyName = "currency";
+        System.out.print("Checking " + propertyName + " property.");
+        Currency initialCurrency = df.getCurrency();
+        Currency japanCur = java.util.Currency.getInstance(Locale.JAPAN);
+        firstFormatResult = df.format(d1);
+        df.setCurrency(japanCur);
+        df.format(d1);
+        df.setCurrency(initialCurrency);
+        secondFormatResult = df.format(d1);
+        testSucceeded =
+            resultsEqual(propertyName, firstFormatResult, secondFormatResult);
+        if (!testSucceeded)
+            errors++;
+
+        // ---- roundingMode property test ----
+        testSucceeded = false;
+        propertyName = "roundingMode";
+        System.out.print("Checking " + propertyName + " property.");
+        RoundingMode initialRMode = df.getRoundingMode();
+        firstFormatResult = df.format(d1);
+        df.setRoundingMode(RoundingMode.HALF_UP);
+        df.format(d1);
+        df.setRoundingMode(RoundingMode.HALF_EVEN);
+        secondFormatResult = df.format(d1);
+        testSucceeded =
+            resultsEqual(propertyName, firstFormatResult, secondFormatResult);
+        if (!testSucceeded)
+            errors++;
+
+        // ---- decimalFormatSymbols property test ----
+        testSucceeded = false;
+        propertyName = "decimalFormatSymbols";
+        System.out.print("Checking " + propertyName + " property.");
+        DecimalFormatSymbols initialDecimalFormatSymbols = df.getDecimalFormatSymbols();
+        firstFormatResult = df.format(d1);
+        Locale bizarreLocale = new Locale("fr", "FR");
+        DecimalFormatSymbols unusualSymbols = new DecimalFormatSymbols(bizarreLocale);
+        unusualSymbols.setDecimalSeparator('@');
+        unusualSymbols.setGroupingSeparator('|');
+        df.setDecimalFormatSymbols(unusualSymbols);
+        df.format(d1);
+        df.setDecimalFormatSymbols(initialDecimalFormatSymbols);
+        secondFormatResult = df.format(d1);
+        testSucceeded =
+            resultsEqual(propertyName, firstFormatResult, secondFormatResult);
+        if (!testSucceeded)
+            errors++;
+
+        testSucceeded = false;
+        System.out.print("Checking " + propertyName + " property.");
+        initialDecimalFormatSymbols = df.getDecimalFormatSymbols();
+        firstFormatResult = df.format(d1);
+        Locale japanLocale = Locale.JAPAN;
+        unusualSymbols = new DecimalFormatSymbols(japanLocale);
+        unusualSymbols.setDecimalSeparator('9');
+        unusualSymbols.setGroupingSeparator('0');
+        df.setDecimalFormatSymbols(unusualSymbols);
+        df.format(d1);
+        df.setDecimalFormatSymbols(initialDecimalFormatSymbols);
+        secondFormatResult = df.format(d1);
+        testSucceeded =
+            resultsEqual(propertyName, firstFormatResult, secondFormatResult);
+        if (!testSucceeded)
+            errors++;
+
+        return errors;
+    }
+
+    // Main for RoundingAndPropertyTest. We test first the golden values,
+    // and then the property setters and getters.
+    public static void main(String[] args) {
+
+        if ((args.length >= 1) &&
+            (args[0].equals("-gengold")))
+            generatesGoldenFormattedValuesClass();
+        else {
+            System.out.println("\nChecking correctness of formatting with digit localization.");
+            System.out.println("=============================================================");
+            int localizationErrors = testLocalizationValues();
+            if (localizationErrors != 0)
+                System.out.println("*** Failure in localization tests : " +
+                                   localizationErrors + " errors detected ");
+            else System.out.println(" Tests for full localization of digits all passed.");
+
+            DecimalFormat df = (DecimalFormat)
+                NumberFormat.getInstance(GoldenDoubleValues.TestLocale);
+            DecimalFormat cf = (DecimalFormat)
+                NumberFormat.getCurrencyInstance(GoldenDoubleValues.TestLocale);
+
+            System.out.println("\nChecking correctness of formating for golden values.");
+            System.out.println("=============================================================");
+            int goldenValuesErrors = testGoldenValues(df,cf);
+            if (goldenValuesErrors != 0)
+                System.out.println("*** Failure in goldenValues tests : " +
+                                   goldenValuesErrors + " errors detected ");
+            else System.out.println(" Tests for golden values all passed.");
+
+            System.out.println("\nChecking behavior of property changes for decimal case.");
+            System.out.println("=============================================================");
+            int decimalTestsErrors = testSettersAndFastPath(df, false);
+            if (decimalTestsErrors != 0)
+                System.out.println("*** Failure in decimal property changes tests : " +
+                                   decimalTestsErrors + " errors detected ");
+            else System.out.println(" Tests for decimal property changes all passed.");
+
+            System.out.println("\nChecking behavior of property changes for currency case.");
+            System.out.println("=============================================================");
+            int currencyTestsErrors = testSettersAndFastPath(cf, true);
+            if (currencyTestsErrors != 0)
+                System.out.println("*** Failure in currency property changes tests : " +
+                                   currencyTestsErrors + " errors detected ");
+            else System.out.println(" Tests for currency property chamges all passed.");
+
+            if ((localizationErrors > 0) ||
+                (goldenValuesErrors > 0) ||
+                (decimalTestsErrors > 0) ||
+                (currencyTestsErrors > 0))
+                throw new RuntimeException(
+                    "Failed with " +
+                    (localizationErrors + goldenValuesErrors +
+                     decimalTestsErrors + currencyTestsErrors) +
+                    " error(s).");
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/util/Locale/Bug7069824.java	Thu Oct 11 16:59:50 2012 -0700
@@ -0,0 +1,1006 @@
+/*
+ * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 7069824
+ * @summary Verify implementation for Locale matching.
+ * @run main Bug7069824
+ */
+
+import java.util.*;
+import java.util.Locale.*;
+import static java.util.Locale.FilteringMode.*;
+import static java.util.Locale.LanguageRange.*;
+
+public class Bug7069824 {
+
+    static boolean err = false;
+
+    public static void main(String[] args) {
+        testLanguageRange();
+        testLocale();
+
+        if (err) {
+            throw new RuntimeException("Failed.");
+        }
+    }
+
+    private static void testLanguageRange() {
+        System.out.println("Test LanguageRange class...");
+        testConstants();
+        testConstructors();
+        testMethods();
+    }
+
+    private static void testLocale() {
+        System.out.println("Test Locale class...");
+        test_filter();
+        test_filterTags();
+        test_lookup();
+        test_lookupTag();
+    }
+
+    private static void testConstants() {
+        boolean error = false;
+
+        if (MIN_WEIGHT != 0.0) {
+            error = true;
+            System.err.println("    MIN_WEIGHT should be 0.0 but got "
+                + MIN_WEIGHT);
+        }
+
+        if (MAX_WEIGHT != 1.0) {
+            error = true;
+            System.err.println("    MAX_WEIGHT should be 1.0 but got "
+                + MAX_WEIGHT);
+        }
+
+        if (error) {
+            err = true;
+            System.err.println("  testConstants() failed.");
+        } else {
+            System.out.println("  testConstants() passed.");
+        }
+    }
+
+    private static void testConstructors() {
+        boolean error = false;
+
+        LanguageRange lr;
+        String range;
+        double weight;
+
+        range = null;
+        try {
+            lr = new LanguageRange(range);
+            error = true;
+            System.err.println("    NPE should be thrown for LanguageRange("
+                + range + ").");
+        }
+        catch (NullPointerException ex) {
+        }
+
+        range = null;
+        weight = 0.8;
+        try {
+            lr = new LanguageRange(range, weight);
+            error = true;
+            System.err.println("    NPE should be thrown for LanguageRange("
+                + range + ", " + weight + ").");
+        }
+        catch (NullPointerException ex) {
+        }
+
+        range = "elvish";
+        try {
+            lr = new LanguageRange(range);
+        }
+        catch (Exception ex) {
+            error = true;
+            System.err.println("    " + ex
+                + " should not be thrown for LanguageRange(" + range + ").");
+        }
+
+        range = "de-DE";
+        try {
+            lr = new LanguageRange(range);
+        }
+        catch (Exception ex) {
+            error = true;
+            System.err.println("    " + ex
+                + " should not be thrown for LanguageRange(" + range + ").");
+        }
+
+        range = "ar";
+        weight = 0.8;
+        try {
+            lr = new LanguageRange(range, weight);
+        }
+        catch (Exception ex) {
+            error = true;
+            System.err.println("    " + ex
+                + " should not be thrown for LanguageRange(" + range + ", "
+                + weight + ").");
+        }
+
+        range = "ja";
+        weight = -0.8;
+        try {
+            lr = new LanguageRange(range, weight);
+            error = true;
+            System.err.println("    IAE should be thrown for LanguageRange("
+                + range + ", " + weight + ").");
+        }
+        catch (IllegalArgumentException ex) {
+        }
+
+        range = "Elvish";
+        weight = 3.0;
+        try {
+            lr = new LanguageRange(range, weight);
+            error = true;
+            System.err.println("    IAE should be thrown for LanguageRange("
+                + range + ", " + weight + ").");
+        }
+        catch (IllegalArgumentException ex) {
+        }
+
+        String[] illformedRanges = {"-ja", "ja--JP", "en-US-", "a4r", "ar*",
+            "ar-*EG", "", "abcdefghijklmn", "ja-J=", "ja-opqrstuvwxyz"};
+        for (String r : illformedRanges) {
+            try {
+                lr = new LanguageRange(r);
+                error = true;
+                System.err.println("    IAE should be thrown for LanguageRange("
+                    + r + ").");
+            }
+            catch (IllegalArgumentException ex) {
+            }
+        }
+
+
+        if (error) {
+            err = true;
+            System.err.println("  testConstructors() failed.");
+        } else {
+            System.out.println("  testConstructors() passed.");
+        }
+    }
+
+    private static void testMethods() {
+        test_getRange();
+        test_getWeight();
+        test_equals();
+        test_parse();
+        test_mapEquivalents();
+    }
+
+    private static void test_getRange() {
+        boolean error = false;
+
+        String range = "ja";
+        double weight = 0.5;
+        LanguageRange lr = new LanguageRange(range, weight);
+        if (!lr.getRange().equals(range)) {
+             error = true;
+             System.err.println("    LanguageRange.getRange() returned unexpected value. Expected: "
+                 + range + ", got: " + lr.getRange());
+        }
+
+        range = "en-US";
+        weight = 0.5;
+        lr = new LanguageRange(range, weight);
+        if (!lr.getRange().equals(range.toLowerCase())) {
+             error = true;
+             System.err.println("    LanguageRange.getRange() returned unexpected value. Expected: "
+                 + range + ", got: " + lr.getRange());
+        }
+
+        if (error) {
+            err = true;
+            System.err.println("  test_getRange() failed.");
+        } else {
+            System.out.println("  test_getRange() passed.");
+        }
+    }
+
+    private static void test_getWeight() {
+        boolean error = false;
+
+        String range = "ja";
+        double weight = 0.5;
+        LanguageRange lr = new LanguageRange(range, weight);
+        if (lr.getWeight() != weight) {
+             error = true;
+             System.err.println("    LanguageRange.getWeight() returned unexpected value. Expected: "
+                 + weight + ", got: " + lr.getWeight());
+        }
+
+        range = "ja";
+        weight = MAX_WEIGHT; // default
+        lr = new LanguageRange(range);
+        if (!lr.getRange().equals(range) || lr.getWeight() != MAX_WEIGHT) {
+             error = true;
+             System.err.println("    LanguageRange.getWeight() returned unexpected value. Expected: "
+                 + weight + ", got: " + lr.getWeight());
+        }
+
+        if (error) {
+            err = true;
+            System.err.println("  test_getWeight() failed.");
+        } else {
+            System.out.println("  test_getWeight() passed.");
+        }
+    }
+
+    private static void test_equals() {
+        boolean error = false;
+
+        LanguageRange lr1 = new LanguageRange("ja", 1.0);
+        LanguageRange lr2 = new LanguageRange("ja");
+        LanguageRange lr3 = new LanguageRange("ja", 0.1);
+        LanguageRange lr4 = new LanguageRange("en", 1.0);
+
+        if (!lr1.equals(lr2)) {
+            error = true;
+            System.err.println("    LanguageRange(LR(ja, 1.0)).equals(LR(ja)) should return true.");
+        }
+
+        if (lr1.equals(lr3)) {
+            error = true;
+            System.err.println("    LanguageRange(LR(ja, 1.0)).equals(LR(ja, 0.1)) should return false.");
+        }
+
+        if (lr1.equals(lr4)) {
+            error = true;
+            System.err.println("    LanguageRange(LR(ja, 1.0)).equals(LR(en, 1.0)) should return false.");
+        }
+
+        if (lr1.equals(null)) {
+            error = true;
+            System.err.println("    LanguageRange(LR(ja, 1.0)).equals(null) should return false.");
+        }
+
+        if (lr1.equals("")) {
+            error = true;
+            System.err.println("    LanguageRange(LR(ja, 1.0)).equals(\"\") should return false.");
+
+        }
+
+        if (error) {
+            err = true;
+            System.err.println("  test_equals() failed.");
+        } else {
+            System.out.println("  test_equals() passed.");
+        }
+    }
+
+    private static void test_parse() {
+        boolean error = false;
+
+        List<LanguageRange> list;
+        String str = null;
+        try {
+            list = LanguageRange.parse(str);
+            error = true;
+            System.err.println("    NPE should be thrown for parse("
+                + str + ").");
+        }
+        catch (NullPointerException ex) {
+        }
+
+        str = "";
+        try {
+            list = LanguageRange.parse("");
+            error = true;
+            System.err.println("    IAE should be thrown for parse("
+                + str + ").");
+        }
+        catch (IllegalArgumentException ex) {
+        }
+
+        str = "ja;q=3";
+        try {
+            list = LanguageRange.parse(str);
+            error = true;
+            System.err.println("IAE should be thrown for parse("
+                 + str + ").");
+        }
+        catch (IllegalArgumentException ex) {
+        }
+
+        str = "Accept-Language: fr-FX,de-DE;q=0.5, fr-tp-x-FOO;q=0.1,"
+                  + "en-X-tp;q=0.6,en-FR;q=.7,de-de;q=0.8, iw;q=0.4, "
+                  + "he;q=0.4, de-de;q=0.5,ja, in-tpp, in-tp;q=0.2";
+        ArrayList<LanguageRange> expected = new ArrayList<>();
+        expected.add(new LanguageRange("fr-fx", 1.0));
+        expected.add(new LanguageRange("fr-fr", 1.0));
+        expected.add(new LanguageRange("ja", 1.0));
+        expected.add(new LanguageRange("in-tpp", 1.0));
+        expected.add(new LanguageRange("id-tpp", 1.0));
+        expected.add(new LanguageRange("en-fr", 0.7));
+        expected.add(new LanguageRange("en-fx", 0.7));
+        expected.add(new LanguageRange("en-x-tp", 0.6));
+        expected.add(new LanguageRange("de-de", 0.5));
+        expected.add(new LanguageRange("de-dd", 0.5));
+        expected.add(new LanguageRange("iw", 0.4));
+        expected.add(new LanguageRange("he", 0.4));
+        expected.add(new LanguageRange("in-tp", 0.2));
+        expected.add(new LanguageRange("id-tl", 0.2));
+        expected.add(new LanguageRange("id-tp", 0.2));
+        expected.add(new LanguageRange("in-tl", 0.2));
+        expected.add(new LanguageRange("fr-tp-x-foo", 0.1));
+        expected.add(new LanguageRange("fr-tl-x-foo", 0.1));
+        List<LanguageRange> got = LanguageRange.parse(str);
+        if (!areEqual(expected, got)) {
+            error = true;
+            System.err.println("    #1 parse() test failed.");
+        }
+
+        str = "Accept-Language: hak-CN;q=0.8, no-bok-NO;q=0.9, no-nyn, cmn-CN;q=0.1";
+        expected = new ArrayList<>();
+        expected.add(new LanguageRange("no-nyn", 1.0));
+        expected.add(new LanguageRange("nn", 1.0));
+        expected.add(new LanguageRange("no-bok-no", 0.9));
+        expected.add(new LanguageRange("nb-no", 0.9));
+        expected.add(new LanguageRange("hak-CN", 0.8));
+        expected.add(new LanguageRange("zh-hakka-CN", 0.8));
+        expected.add(new LanguageRange("i-hak-CN", 0.8));
+        expected.add(new LanguageRange("cmn-CN", 0.1));
+        expected.add(new LanguageRange("zh-cmn-CN", 0.1));
+        expected.add(new LanguageRange("zh-guoyu-CN", 0.1));
+        got = LanguageRange.parse(str);
+        if (!areEqual(expected, got)) {
+            error = true;
+            System.err.println("    #2 parse() test failed.");
+        }
+
+        str = "Accept-Language: rki;q=0.4, no-bok-NO;q=0.9, ccq;q=0.5";
+        expected = new ArrayList<>();
+        expected.add(new LanguageRange("no-bok-no", 0.9));
+        expected.add(new LanguageRange("nb-no", 0.9));
+        expected.add(new LanguageRange("rki", 0.4));
+        expected.add(new LanguageRange("ybd", 0.4));
+        expected.add(new LanguageRange("ccq", 0.4));
+        got = LanguageRange.parse(str);
+        if (!areEqual(expected, got)) {
+            error = true;
+            System.err.println("    #3 parse() test failed.");
+        }
+
+        if (error) {
+            err = true;
+            System.err.println("  test_parse() failed.");
+        } else {
+            System.out.println("  test_parse() passed.");
+        }
+    }
+
+    private static boolean areEqual(List<LanguageRange> expected,
+                                    List<LanguageRange> got) {
+        boolean error = false;
+
+        int expectedSize = expected.size();
+        int actualSize = got.size();
+
+        if (expectedSize != actualSize) {
+            error = true;
+
+            System.err.println("  Expected size=" + expectedSize);
+            for (LanguageRange lr : expected) {
+                System.err.println("    range=" + lr.getRange()
+                    + ", weight=" + lr.getWeight());
+            }
+
+            System.out.println("  Actual size=" + actualSize);
+            for (LanguageRange lr : got) {
+                System.err.println("    range=" + lr.getRange()
+                    + ", weight=" + lr.getWeight());
+            }
+        } else {
+            for (int i = 0; i < expectedSize; i++) {
+                LanguageRange lr1 = expected.get(i);
+                LanguageRange lr2 = got.get(i);
+
+                if (!lr1.getRange().equals(lr2.getRange())
+                    || lr1.getWeight() != lr2.getWeight()) {
+                    error = true;
+                    System.err.println("  " + i + ": Expected: range=" + lr1.getRange()
+                        + ", weight=" + lr1.getWeight());
+                    System.err.println("  " + i + ": Actual:   range=" + lr2.getRange()
+                        + ", weight=" + lr2.getWeight());
+                }
+            }
+        }
+
+        return !error;
+    }
+
+    private static void test_mapEquivalents() {
+        boolean error = false;
+
+        String ranges = "zh, zh-TW;q=0.8, ar;q=0.9, EN, zh-HK, ja-JP;q=0.2, es;q=0.4";
+        List<LanguageRange> priorityList = LanguageRange.parse(ranges);
+        HashMap<String, List<String>> map = null;
+
+        try {
+            List<LanguageRange> list =
+                LanguageRange.mapEquivalents(priorityList, null);
+        }
+        catch (Exception ex) {
+             error = true;
+             System.err.println(ex
+                 + " should not be thrown for mapEquivalents(priorityList, null).");
+        }
+
+        map = new HashMap<>();
+        try {
+            List<LanguageRange> list =
+                LanguageRange.mapEquivalents(priorityList, map);
+        }
+        catch (Exception ex) {
+             error = true;
+             System.err.println(ex
+                 + " should not be thrown for mapEquivalents(priorityList, empty map).");
+        }
+
+        ArrayList<String> equivalentList = new ArrayList<>();
+        equivalentList.add("ja");
+        equivalentList.add("ja-Hira");
+        map.put("ja", equivalentList);
+        try {
+            List<LanguageRange> list = LanguageRange.mapEquivalents(null, map);
+             error = true;
+             System.err.println("NPE should be thrown for mapEquivalents(null, map).");
+        }
+        catch (NullPointerException ex) {
+        }
+
+        map = new LinkedHashMap<>();
+        ArrayList<String> equivalentList1 = new ArrayList<>();
+        equivalentList1.add("ja");
+        equivalentList1.add("ja-Hira");
+        map.put("ja", equivalentList1);
+        ArrayList<String> equivalentList2 = new ArrayList<>();
+        equivalentList2.add("zh-Hans");
+        equivalentList2.add("zh-Hans-CN");
+        equivalentList2.add("zh-CN");
+        map.put("zh", equivalentList2);
+        ArrayList<String> equivalentList3 = new ArrayList<>();
+        equivalentList3.add("zh-TW");
+        equivalentList3.add("zh-Hant");
+        map.put("zh-TW", equivalentList3);
+        map.put("es", null);
+        ArrayList<String> equivalentList4 = new ArrayList<>();
+        map.put("en", equivalentList4);
+        ArrayList<String> equivalentList5 = new ArrayList<>();
+        equivalentList5.add("de");
+        map.put("zh-HK", equivalentList5);
+
+        ArrayList<LanguageRange> expected = new ArrayList<>();
+        expected.add(new LanguageRange("zh-hans", 1.0));
+        expected.add(new LanguageRange("zh-hans-cn", 1.0));
+        expected.add(new LanguageRange("zh-cn", 1.0));
+        expected.add(new LanguageRange("de", 1.0));
+        expected.add(new LanguageRange("ar", 0.9));
+        expected.add(new LanguageRange("zh-tw", 0.8));
+        expected.add(new LanguageRange("zh-hant", 0.8));
+        expected.add(new LanguageRange("ja-jp", 0.2));
+        expected.add(new LanguageRange("ja-hira-jp", 0.2));
+        List<LanguageRange> got =
+            LanguageRange.mapEquivalents(priorityList, map);
+
+        if (!areEqual(expected, got)) {
+            error = true;
+        }
+
+        if (error) {
+            err = true;
+            System.err.println("  test_mapEquivalents() failed.");
+        } else {
+            System.out.println("  test_mapEquivalents() passed.");
+        }
+    }
+
+    private static void test_filter() {
+        boolean error = false;
+
+        String ranges = "ja-JP, fr-FR";
+        String tags = "de-DE, en, ja-JP-hepburn, fr, he, ja-Latn-JP";
+        FilteringMode mode = EXTENDED_FILTERING;
+
+        List<LanguageRange> priorityList = LanguageRange.parse(ranges);
+        List<Locale> tagList = generateLocales(tags);
+        String actualLocales =
+            showLocales(Locale.filter(priorityList, tagList, mode));
+        String expectedLocales = "ja-JP-hepburn, ja-Latn-JP";
+
+        if (!expectedLocales.equals(actualLocales)) {
+            error = true;
+            showErrorMessage("#1 filter(" + mode + ")",
+                             ranges, tags, expectedLocales, actualLocales);
+        }
+
+
+        ranges = "ja-*-JP, fr-FR";
+        tags = "de-DE, en, ja-JP-hepburn, fr, he, ja-Latn-JP";
+        mode = EXTENDED_FILTERING;
+
+        priorityList = LanguageRange.parse(ranges);
+        tagList = generateLocales(tags);
+        actualLocales = showLocales(Locale.filter(priorityList, tagList, mode));
+        expectedLocales = "ja-JP-hepburn, ja-Latn-JP";
+
+        if (!expectedLocales.equals(actualLocales)) {
+            error = true;
+            showErrorMessage("#2 filter(" + mode + ")",
+                             ranges, tags, expectedLocales, actualLocales);
+        }
+
+
+        ranges = "ja-*-JP, fr-FR, de-de;q=0.2";
+        tags = "de-DE, en, ja-JP-hepburn, de-de, fr, he, ja-Latn-JP";
+        mode = AUTOSELECT_FILTERING;
+
+        priorityList = LanguageRange.parse(ranges);
+        tagList = generateLocales(tags);
+        actualLocales = showLocales(Locale.filter(priorityList, tagList, mode));
+        expectedLocales = "ja-JP-hepburn, ja-Latn-JP, de-DE";
+
+        if (!expectedLocales.equals(actualLocales)) {
+            error = true;
+            showErrorMessage("#3 filter(" + mode + ")",
+                             ranges, tags,expectedLocales, actualLocales);
+        }
+
+        ranges = "ja-JP, fr-FR, de-de;q=0.2";
+        tags = "de-DE, en, ja-JP-hepburn, de-de, fr, he, ja-Latn-JP";
+        mode = AUTOSELECT_FILTERING;
+
+        priorityList = LanguageRange.parse(ranges);
+        tagList = generateLocales(tags);
+        actualLocales = showLocales(Locale.filter(priorityList, tagList, mode));
+        expectedLocales = "ja-JP-hepburn, de-DE";
+
+        if (!expectedLocales.equals(actualLocales)) {
+            error = true;
+            showErrorMessage("#4 filter(" + mode + ")",
+                             ranges, tags, expectedLocales, actualLocales);
+        }
+
+
+        ranges = "en;q=0.2, ja-*-JP, fr-JP";
+        tags = "de-DE, en, ja-JP-hepburn, fr, he, ja-Latn-JP";
+        mode = IGNORE_EXTENDED_RANGES;
+
+        priorityList = LanguageRange.parse(ranges);
+        tagList = generateLocales(tags);
+        actualLocales = showLocales(Locale.filter(priorityList, tagList, mode));
+        expectedLocales = "en";
+
+        if (!expectedLocales.equals(actualLocales)) {
+            error = true;
+            showErrorMessage("#5 filter(" + mode + ")",
+                             ranges, tags, expectedLocales, actualLocales);
+        }
+
+
+        ranges = "en;q=0.2, ja-*-JP, fr-JP";
+        tags = "de-DE, en, ja-JP-hepburn, fr, he, ja-Latn-JP";
+        mode = MAP_EXTENDED_RANGES;
+
+        priorityList = LanguageRange.parse(ranges);
+        tagList = generateLocales(tags);
+        actualLocales = showLocales(Locale.filter(priorityList, tagList, mode));
+        expectedLocales = "ja-JP-hepburn, en";
+
+        if (!expectedLocales.equals(actualLocales)) {
+            error = true;
+            showErrorMessage("#6 filter(" + mode + ")",
+                             ranges, tags, expectedLocales, actualLocales);
+        }
+
+
+        ranges = "en;q=0.2, ja-JP, fr-JP";
+        tags = "de-DE, en, ja-JP-hepburn, fr, he, ja-Latn-JP";
+        mode = REJECT_EXTENDED_RANGES;
+
+        priorityList = LanguageRange.parse(ranges);
+        tagList = generateLocales(tags);
+        actualLocales = showLocales(Locale.filter(priorityList, tagList, mode));
+        expectedLocales = "ja-JP-hepburn, en";
+
+        if (!expectedLocales.equals(actualLocales)) {
+            error = true;
+            showErrorMessage("#7 filter(" + mode + ")",
+                             ranges, tags, expectedLocales, actualLocales);
+        }
+
+
+        ranges = "en;q=0.2, ja-*-JP, fr-JP";
+        tags = "de-DE, en, ja-JP-hepburn, fr, he, ja-Latn-JP";
+        mode = REJECT_EXTENDED_RANGES;
+
+        priorityList = LanguageRange.parse(ranges);
+        tagList = generateLocales(tags);
+        try {
+            actualLocales =
+                showLocales(Locale.filter(priorityList, tagList, mode));
+            error = true;
+            System.out.println("IAE should be thrown for filter("
+                + mode + ").");
+        }
+        catch (IllegalArgumentException ex) {
+        }
+
+
+        ranges = "en;q=0.2, ja-*-JP, fr-JP";
+        tags = null;
+        mode = REJECT_EXTENDED_RANGES;
+
+        priorityList = LanguageRange.parse(ranges);
+        tagList = generateLocales(tags);
+        try {
+            actualLocales =
+                showLocales(Locale.filter(priorityList, tagList, mode));
+            error = true;
+            System.out.println("NPE should be thrown for filter(tags=null).");
+        }
+        catch (NullPointerException ex) {
+        }
+
+
+        ranges = null;
+        tags = "de-DE, en, ja-JP-hepburn, fr, he, ja-Latn-JP";
+        mode = REJECT_EXTENDED_RANGES;
+
+        try {
+            priorityList = LanguageRange.parse(ranges);
+            tagList = generateLocales(tags);
+            actualLocales =
+                showLocales(Locale.filter(priorityList, tagList, mode));
+            error = true;
+            System.out.println("NPE should be thrown for filter(ranges=null).");
+        }
+        catch (NullPointerException ex) {
+        }
+
+
+        ranges = "en;q=0.2, ja-*-JP, fr-JP";
+        tags = "";
+        mode = REJECT_EXTENDED_RANGES;
+
+        priorityList = LanguageRange.parse(ranges);
+        tagList = generateLocales(tags);
+        try {
+            actualLocales =
+                showLocales(Locale.filter(priorityList, tagList, mode));
+        }
+        catch (Exception ex) {
+            error = true;
+            System.out.println(ex
+                + " should not be thrown for filter(" + ranges + ", \"\").");
+        }
+
+
+        if (error) {
+            err = true;
+            System.out.println("  test_filter() failed.");
+        } else {
+            System.out.println("  test_filter() passed.");
+        }
+    }
+
+    private static void test_filterTags() {
+        boolean error = false;
+
+        String ranges = "en;q=0.2, *;q=0.6, ja";
+        String tags = "de-DE, en, ja-JP-hepburn, fr-JP, he";
+
+        List<LanguageRange> priorityList = LanguageRange.parse(ranges);
+        List<String> tagList = generateLanguageTags(tags);
+        String actualTags =
+            showLanguageTags(Locale.filterTags(priorityList, tagList));
+        String expectedTags = tags;
+
+        if (!expectedTags.equals(actualTags)) {
+            error = true;
+            showErrorMessage("#1 filterTags()",
+                             ranges, tags, expectedTags, actualTags);
+        }
+
+
+        ranges = "en;q=0.2, ja-JP, fr-JP";
+        tags = "de-DE, en, ja-JP-hepburn, fr, he";
+        priorityList = LanguageRange.parse(ranges);
+        tagList = generateLanguageTags(tags);
+        actualTags = showLanguageTags(Locale.filterTags(priorityList, tagList));
+        expectedTags = "ja-jp-hepburn, en";
+
+        if (!expectedTags.equals(actualTags)) {
+            error = true;
+            showErrorMessage("#2 filterTags()",
+                             ranges, tags, expectedTags, actualTags);
+        }
+
+
+        ranges = "de-DE";
+        tags = "de-DE, de-de, de-Latn-DE, de-Latf-DE, de-DE-x-goethe, "
+               + "de-Latn-DE-1996, de-Deva-DE, de, de-x-DE, de-Deva";
+        FilteringMode mode = MAP_EXTENDED_RANGES;
+        priorityList = LanguageRange.parse(ranges);
+        tagList = generateLanguageTags(tags);
+        actualTags = showLanguageTags(Locale.filterTags(priorityList, tagList, mode));
+        expectedTags = "de-de, de-de-x-goethe";
+
+        if (!expectedTags.equals(actualTags)) {
+            error = true;
+            showErrorMessage("#3 filterTags(" + mode + ")",
+                             ranges, tags, expectedTags, actualTags);
+        }
+
+
+        ranges = "de-DE";
+        tags = "de-DE, de-de, de-Latn-DE, de-Latf-DE, de-DE-x-goethe, "
+               + "de-Latn-DE-1996, de-Deva-DE, de, de-x-DE, de-Deva";
+        mode = EXTENDED_FILTERING;
+        priorityList = LanguageRange.parse(ranges);
+        tagList = generateLanguageTags(tags);
+        actualTags = showLanguageTags(Locale.filterTags(priorityList, tagList, mode));
+        expectedTags = "de-de, de-latn-de, de-latf-de, de-de-x-goethe, "
+                       + "de-latn-de-1996, de-deva-de";
+
+        if (!expectedTags.equals(actualTags)) {
+            error = true;
+            showErrorMessage("#4 filterTags(" + mode + ")",
+                             ranges, tags, expectedTags, actualTags);
+        }
+
+
+        ranges = "de-*-DE";
+        tags = "de-DE, de-de, de-Latn-DE, de-Latf-DE, de-DE-x-goethe, "
+               + "de-Latn-DE-1996, de-Deva-DE, de, de-x-DE, de-Deva";
+        mode = EXTENDED_FILTERING;
+        priorityList = LanguageRange.parse(ranges);
+        tagList = generateLanguageTags(tags);
+        actualTags = showLanguageTags(Locale.filterTags(priorityList, tagList, mode));
+        expectedTags = "de-de, de-latn-de, de-latf-de, de-de-x-goethe, "
+                       + "de-latn-de-1996, de-deva-de";
+
+        if (!expectedTags.equals(actualTags)) {
+            error = true;
+            showErrorMessage("#5 filterTags(" + mode + ")",
+                             ranges, tags, expectedTags, actualTags);
+        }
+
+        if (error) {
+            err = true;
+            System.out.println("  test_filterTags() failed.");
+        } else {
+            System.out.println("  test_filterTags() passed.");
+        }
+    }
+
+    private static void test_lookup() {
+        boolean error = false;
+
+        String ranges = "en;q=0.2, *-JP;q=0.6, iw";
+        String tags = "de-DE, en, ja-JP-hepburn, fr-JP, he";
+        List<LanguageRange> priorityList = LanguageRange.parse(ranges);
+        List<Locale> localeList = generateLocales(tags);
+        String actualLocale =
+            Locale.lookup(priorityList, localeList).toLanguageTag();
+        String expectedLocale ="he";
+
+        if (!expectedLocale.equals(actualLocale)) {
+            error = true;
+            showErrorMessage("#1 lookup()", ranges, tags, expectedLocale, actualLocale);
+        }
+
+
+        ranges = "en;q=0.2, *-JP;q=0.6, iw";
+        tags = "de-DE, he-IL, en, iw";
+        priorityList = LanguageRange.parse(ranges);
+        localeList = generateLocales(tags);
+        actualLocale = Locale.lookup(priorityList, localeList).toLanguageTag();
+        expectedLocale = "he";
+
+        if (!expectedLocale.equals(actualLocale)) {
+            error = true;
+            showErrorMessage("#2 lookup()", ranges, tags, expectedLocale, actualLocale);
+        }
+
+
+        ranges = "en;q=0.2, ja-*-JP-x-foo;q=0.6, iw";
+        tags = "de-DE, fr, en, ja-Latn-JP";
+        priorityList = LanguageRange.parse(ranges);
+        localeList = generateLocales(tags);
+        actualLocale = Locale.lookup(priorityList, localeList).toLanguageTag();
+        expectedLocale = "ja-Latn-JP";
+
+        if (!expectedLocale.equals(actualLocale)) {
+            error = true;
+            showErrorMessage("#3 lookup()", ranges, tags, expectedLocale, actualLocale);
+        }
+
+        if (error) {
+            err = true;
+            System.out.println("  test_lookup() failed.");
+        } else {
+            System.out.println("  test_lookup() passed.");
+        }
+    }
+
+    private static void test_lookupTag() {
+        boolean error = false;
+
+        String ranges = "en, *";
+        String tags = "es, de, ja-JP";
+        List<LanguageRange> priorityList = LanguageRange.parse(ranges);
+        List<String> tagList = generateLanguageTags(tags);
+        String actualTag = Locale.lookupTag(priorityList, tagList);
+        String expectedTag = null;
+
+        if (actualTag != null) {
+            error = true;
+            showErrorMessage("#1 lookupTag()", ranges, tags, expectedTag, actualTag);
+        }
+
+
+        ranges= "en;q=0.2, *-JP";
+        tags = "de-DE, en, ja-JP-hepburn, fr-JP, en-JP";
+        priorityList = LanguageRange.parse(ranges);
+        tagList = generateLanguageTags(tags);
+        actualTag = Locale.lookupTag(priorityList, tagList);
+        expectedTag = "fr-jp";
+
+        if (!expectedTag.equals(actualTag)) {
+            error = true;
+            showErrorMessage("#2 lookupTag()", ranges, tags, expectedTag, actualTag);
+        }
+
+
+        ranges = "en;q=0.2, ar-MO, iw";
+        tags = "de-DE, he, fr-JP";
+        priorityList = LanguageRange.parse(ranges);
+        tagList = generateLanguageTags(tags);
+        actualTag = Locale.lookupTag(priorityList, tagList);
+        expectedTag = "he";
+
+        if (!expectedTag.equals(actualTag)) {
+            error = true;
+            showErrorMessage("#3 lookupTag()", ranges, tags, expectedTag, actualTag);
+        }
+
+
+        ranges = "en;q=0.2, ar-MO, he";
+        tags = "de-DE, iw, fr-JP";
+        priorityList = LanguageRange.parse(ranges);
+        tagList = generateLanguageTags(tags);
+        actualTag = Locale.lookupTag(priorityList, tagList);
+        expectedTag = "iw";
+
+        if (!expectedTag.equals(actualTag)) {
+            error = true;
+            showErrorMessage("#4 lookupTag()", ranges, tags, expectedTag, actualTag);
+        }
+
+        if (error) {
+            err = true;
+            System.out.println("  test_lookupTag() failed.");
+        } else {
+            System.out.println("  test_lookupTag() passed.");
+        }
+    }
+
+    private static List<Locale> generateLocales(String tags) {
+        if (tags == null) {
+            return null;
+        }
+
+        List<Locale> localeList = new ArrayList<>();
+        if (tags.equals("")) {
+            return localeList;
+        }
+        String[] t = tags.split(", ");
+        for (String tag : t) {
+            localeList.add(Locale.forLanguageTag(tag));
+        }
+        return localeList;
+    }
+
+    private static List<String> generateLanguageTags(String tags) {
+        List<String> tagList = new ArrayList<>();
+        String[] t = tags.split(", ");
+        for (String tag : t) {
+            tagList.add(tag);
+        }
+        return tagList;
+    }
+
+    private static String showPriorityList(List<LanguageRange> priorityList) {
+        StringBuilder sb = new StringBuilder();
+
+        Iterator<LanguageRange> itr = priorityList.iterator();
+        LanguageRange lr;
+        if (itr.hasNext()) {
+            lr = itr.next();
+            sb.append(lr.getRange());
+            sb.append(";q=");
+            sb.append(lr.getWeight());
+        }
+        while (itr.hasNext()) {
+            sb.append(", ");
+            lr = itr.next();
+            sb.append(lr.getRange());
+            sb.append(";q=");
+            sb.append(lr.getWeight());
+        }
+
+        return sb.toString();
+    }
+
+    private static String showLanguageTags(List<String> tags) {
+        StringBuilder sb = new StringBuilder();
+
+        Iterator<String> itr = tags.iterator();
+        if (itr.hasNext()) {
+            sb.append(itr.next());
+        }
+        while (itr.hasNext()) {
+            sb.append(", ");
+            sb.append(itr.next());
+        }
+
+        return sb.toString().trim();
+    }
+
+    private static String showLocales(List<Locale> locales) {
+        StringBuilder sb = new StringBuilder();
+
+        Iterator<Locale> itr = locales.iterator();
+        if (itr.hasNext()) {
+            sb.append(itr.next().toLanguageTag());
+        }
+        while (itr.hasNext()) {
+            sb.append(", ");
+            sb.append(itr.next().toLanguageTag());
+        }
+
+        return sb.toString().trim();
+    }
+
+    private static void showErrorMessage(String methodName,
+                                         String priorityList,
+                                         String tags,
+                                         String expectedTags,
+                                         String actualTags) {
+        System.out.println("\nIncorrect " + methodName + " result.");
+        System.out.println("  Priority list  :  " + priorityList);
+        System.out.println("  Language tags  :  " + tags);
+        System.out.println("  Expected value : " + expectedTags);
+        System.out.println("  Actual value   : " + actualTags);
+    }
+
+}
--- a/jdk/test/java/util/Locale/LocaleProviders.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/test/java/util/Locale/LocaleProviders.java	Thu Oct 11 16:59:50 2012 -0700
@@ -20,15 +20,45 @@
  * or visit www.oracle.com if you need additional information or have any
  * questions.
  */
-import java.text.spi.DateFormatProvider;
-import java.util.Locale;
+import java.text.*;
+import java.text.spi.*;
+import java.util.*;
 import sun.util.locale.provider.LocaleProviderAdapter;
 
 public class LocaleProviders {
 
     public static void main(String[] args) {
-        String expected = args[0];
-        Locale testLocale = new Locale(args[1], args[2]);
+        String methodName = args[0];
+
+        switch (methodName) {
+            case "getPlatformLocale":
+                if (args[1].equals("format")) {
+                    getPlatformLocale(Locale.Category.FORMAT);
+                } else {
+                    getPlatformLocale(Locale.Category.DISPLAY);
+                }
+                break;
+
+            case "adapterTest":
+                adapterTest(args[1], args[2], (args.length >= 4 ? args[3] : ""));
+                break;
+
+            case "bug7198834Test":
+                bug7198834Test();
+                break;
+
+            default:
+                throw new RuntimeException("Test method '"+methodName+"' not found.");
+        }
+    }
+
+    static void getPlatformLocale(Locale.Category cat) {
+        Locale defloc = Locale.getDefault(cat);
+        System.out.printf("%s,%s\n", defloc.getLanguage(), defloc.getCountry());
+    }
+
+    static void adapterTest(String expected, String lang, String ctry) {
+        Locale testLocale = new Locale(lang, ctry);
         String preference = System.getProperty("java.locale.providers", "");
         LocaleProviderAdapter lda = LocaleProviderAdapter.getAdapter(DateFormatProvider.class, testLocale);
         LocaleProviderAdapter.Type type = lda.getAdapterType();
@@ -37,4 +67,18 @@
             throw new RuntimeException("Returned locale data adapter is not correct.");
         }
     }
+
+    static void bug7198834Test() {
+        LocaleProviderAdapter lda = LocaleProviderAdapter.getAdapter(DateFormatProvider.class, Locale.US);
+        LocaleProviderAdapter.Type type = lda.getAdapterType();
+        if (type == LocaleProviderAdapter.Type.HOST && System.getProperty("os.name").startsWith("Windows")) {
+            DateFormat df = DateFormat.getDateInstance(DateFormat.FULL, Locale.US);
+            String date = df.format(new Date());
+            if (date.charAt(date.length()-1) == ' ') {
+                throw new RuntimeException("Windows Host Locale Provider returns a trailing space.");
+            }
+        } else {
+            System.out.println("Windows HOST locale adapter not found. Ignoring this test.");
+        }
+    }
 }
--- a/jdk/test/java/util/Locale/LocaleProviders.sh	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/test/java/util/Locale/LocaleProviders.sh	Thu Oct 11 16:59:50 2012 -0700
@@ -23,7 +23,7 @@
 #!/bin/sh
 #
 # @test
-# @bug 6336885
+# @bug 6336885 7196799 7197573 7198834
 # @summary tests for "java.locale.providers" system property
 # @compile -XDignore.symbol.file LocaleProviders.java
 # @run shell/timeout=600 LocaleProviders.sh
@@ -65,9 +65,21 @@
     ;;
 esac
 
+# get the platform default locales
+PLATDEF=`${TESTJAVA}${FS}bin${FS}java -classpath ${TESTCLASSES} LocaleProviders getPlatformLocale display`
+DEFLANG=`echo ${PLATDEF} | sed -e "s/,.*//"`
+DEFCTRY=`echo ${PLATDEF} | sed -e "s/.*,//"`
+echo "DEFLANG=${DEFLANG}"
+echo "DEFCTRY=${DEFCTRY}"
+PLATDEF=`${TESTJAVA}${FS}bin${FS}java -classpath ${TESTCLASSES} LocaleProviders getPlatformLocale format`
+DEFFMTLANG=`echo ${PLATDEF} | sed -e "s/,.*//"`
+DEFFMTCTRY=`echo ${PLATDEF} | sed -e "s/.*,//"`
+echo "DEFFMTLANG=${DEFFMTLANG}"
+echo "DEFFMTCTRY=${DEFFMTCTRY}"
+
 runTest()
 {
-    RUNCMD="${TESTJAVA}${FS}bin${FS}java -classpath ${TESTCLASSES} -Duser.language=$DEFLANG -Duser.country=$DEFCTRY -Djava.locale.providers=$PREFLIST LocaleProviders $EXPECTED $TESTLANG $TESTCTRY"
+    RUNCMD="${TESTJAVA}${FS}bin${FS}java -classpath ${TESTCLASSES} -Djava.locale.providers=$PREFLIST LocaleProviders $METHODNAME $PARAM1 $PARAM2 $PARAM3"
     echo ${RUNCMD}
     ${RUNCMD}
     result=$?
@@ -81,65 +93,110 @@
 }
 
 # testing HOST is selected for the default locale, if specified on Windows or MacOSX
-DEFLANG=en
-DEFCTRY=US
-PREFLIST=HOST
+METHODNAME=adapterTest
+PREFLIST=HOST,JRE
 case "$OS" in
   Windows_NT* )
     WINVER=`uname -r`
     if [ "${WINVER}" = "5" ]
     then
-      EXPECTED=JRE
+      PARAM1=JRE
     else
-      EXPECTED=HOST
+      PARAM1=HOST
     fi
     ;;
   CYGWIN_NT-6* | Darwin )
-    EXPECTED=HOST
+    PARAM1=HOST
     ;;
   * )
-    EXPECTED=JRE
+    PARAM1=JRE
     ;;
 esac
-TESTLANG=en
-TESTCTRY=US
+PARAM2=${DEFLANG}
+PARAM3=${DEFCTRY}
 runTest
 
 # testing HOST is NOT selected for the non-default locale, if specified
-DEFLANG=en
-DEFCTRY=US
-PREFLIST=HOST
-EXPECTED=JRE
-TESTLANG=en
-TESTCTRY=GB
+METHODNAME=adapterTest
+PREFLIST=HOST,JRE
+PARAM1=JRE
+# Try to find the locale JRE supports which is not the platform default (HOST supports that one)
+if [ "${DEFLANG}" != "en" ] && [ "${DEFFMTLANG}" != "en" ]; then
+  PARAM2=en
+  PARAM3=US
+elif [ "${DEFLANG}" != "ja" ] && [ "${DEFFMTLANG}" != "ja" ]; then 
+  PARAM2=ja
+  PARAM3=JP
+else
+  PARAM2=zh
+  PARAM3=CN
+fi
 runTest
 
 # testing SPI is NOT selected, as there is none.
-PREFLIST=SPI
-EXPECTED=JRE
-TESTLANG=en
-TESTCTRY=US
+METHODNAME=adapterTest
+PREFLIST=SPI,JRE
+PARAM1=JRE
+PARAM2=en
+PARAM3=US
 runTest
 
 # testing the order, variaton #1. This assumes en_GB DateFormat data are available both in JRE & CLDR
-PREFLIST=CLDR
-EXPECTED=CLDR
-TESTLANG=en
-TESTCTRY=GB
+METHODNAME=adapterTest
+PREFLIST=CLDR,JRE
+PARAM1=CLDR
+PARAM2=en
+PARAM3=GB
 runTest
 
 # testing the order, variaton #2. This assumes en_GB DateFormat data are available both in JRE & CLDR
+METHODNAME=adapterTest
 PREFLIST=JRE,CLDR
-EXPECTED=JRE
-TESTLANG=en
-TESTCTRY=GB
+PARAM1=JRE
+PARAM2=en
+PARAM3=GB
 runTest
 
 # testing the order, variaton #3 for non-existent locale in JRE assuming "haw" is not in JRE.
+METHODNAME=adapterTest
 PREFLIST=JRE,CLDR
-EXPECTED=CLDR
-TESTLANG=haw
-TESTCTRY=GB
+PARAM1=CLDR
+PARAM2=haw
+PARAM3=GB
+runTest
+
+# testing the order, variaton #4 for the bug 7196799. CLDR's "zh" data should be used in "zh_CN"
+METHODNAME=adapterTest
+PREFLIST=CLDR
+PARAM1=CLDR
+PARAM2=zh
+PARAM3=CN
+runTest
+
+# testing FALLBACK provider. SPI and invalid one cases.
+METHODNAME=adapterTest
+PREFLIST=SPI
+PARAM1=FALLBACK
+PARAM2=en
+PARAM3=US
+runTest
+PREFLIST=FOO
+PARAM1=JRE
+PARAM2=en
+PARAM3=US
+runTest
+PREFLIST=BAR,SPI
+PARAM1=FALLBACK
+PARAM2=en
+PARAM3=US
+runTest
+
+# testing 7198834 fix. Only works on Windows Vista or upper.
+METHODNAME=bug7198834Test
+PREFLIST=HOST
+PARAM1=
+PARAM2=
+PARAM3=
 runTest
 
 exit $result
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/util/Locale/tools/EquivMapsGenerator.java	Thu Oct 11 16:59:50 2012 -0700
@@ -0,0 +1,251 @@
+/*
+ * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import java.io.*;
+import java.nio.charset.*;
+import java.nio.file.*;
+import java.util.*;
+
+public class EquivMapsGenerator {
+
+    /*
+     * IANA Language Subtag Registry file downloaded from
+     *     http://www.iana.org/assignments/language-subtag-registry
+     */
+    private static final String DEFAULT_LSR_FILE =
+        "language-subtag-registry.txt";
+
+    private static boolean verbose = false;
+
+    public static void main(String[] args) throws Exception {
+        String fileLSR = DEFAULT_LSR_FILE;
+
+        for (int i = 0; i < args.length; i++) {
+            String s = args[i];
+            if (s.equals("-lsr")) {
+                fileLSR = args[++i];
+            } else if (s.equals("-verbose")) {
+                verbose = true;
+            }
+        }
+
+        readLSRfile(fileLSR);
+        generateEquivalentMap();
+        generateSourceCode();
+    }
+
+    private static String LSRrevisionDate;
+    private static Map<String, StringBuilder> initialLanguageMap =
+        new TreeMap<>();
+    private static Map<String, StringBuilder> initialRegionVariantMap =
+        new TreeMap<>();
+
+    private static Map<String, String> sortedLanguageMap1 = new TreeMap<>();
+    private static Map<String, String[]> sortedLanguageMap2 = new TreeMap<>();
+    private static Map<String, String> sortedRegionVariantMap =
+        new TreeMap<>();
+
+    private static void readLSRfile(String filename) throws Exception {
+        String type = null;
+        String tag = null;
+        String preferred = null;
+        int mappingNum = 0;
+
+        for (String line : Files.readAllLines(Paths.get(filename),
+                                              Charset.forName("UTF-8"))) {
+            line = line.toLowerCase();
+            int index = line.indexOf(' ')+1;
+            if (line.startsWith("file-date:")) {
+                LSRrevisionDate = line.substring(index);
+                if (verbose) {
+                    System.out.println("LSR revision date=" + LSRrevisionDate);
+                }
+            } else if (line.startsWith("type:")) {
+                type = line.substring(index);
+            } else if (line.startsWith("tag:") || line.startsWith("subtag:")) {
+                tag = line.substring(index);
+            } else if (line.startsWith("preferred-value:")
+                       && !type.equals("extlang")) {
+                preferred = line.substring(index);
+                mappingNum++;
+                processDeprecatedData(type, tag, preferred);
+            } else if (line.equals("%%")) {
+                type = null;
+                tag = null;
+                preferred = null;
+            }
+        }
+
+        if (verbose) {
+            System.out.println("readLSRfile(" + filename + ")");
+            System.out.println("  Total number of mapping=" + mappingNum);
+            System.out.println("\n  Map for language. Size="
+                + initialLanguageMap.size());
+
+            for (String key : initialLanguageMap.keySet()) {
+                System.out.println("    " + key + ": \""
+                    + initialLanguageMap.get(key) + "\"");
+            }
+
+            System.out.println("\n  Map for region and variant. Size="
+                + initialRegionVariantMap.size());
+
+            for (String key : initialRegionVariantMap.keySet()) {
+                System.out.println("    " + key + ": \""
+                    + initialRegionVariantMap.get(key) + "\"");
+            }
+        }
+    }
+
+    private static void processDeprecatedData(String type,
+                                              String tag,
+                                              String preferred) {
+        StringBuilder sb;
+        if (type.equals("region") || type.equals("variant")) {
+            if (!initialRegionVariantMap.containsKey(preferred)) {
+                sb = new StringBuilder("-");
+                sb.append(preferred);
+                sb.append(",-");
+                sb.append(tag);
+                initialRegionVariantMap.put("-"+preferred, sb);
+            } else {
+                throw new RuntimeException("New case, need implementation."
+                    + " A region/variant subtag \"" + preferred
+                    + "\" is registered for more than one subtags.");
+            }
+        } else { // language, grandfahered, and redundant
+            if (!initialLanguageMap.containsKey(preferred)) {
+                sb = new StringBuilder(preferred);
+                sb.append(',');
+                sb.append(tag);
+                initialLanguageMap.put(preferred, sb);
+            } else {
+                sb = initialLanguageMap.get(preferred);
+                sb.append(',');
+                sb.append(tag);
+                initialLanguageMap.put(preferred, sb);
+            }
+        }
+    }
+
+    private static void generateEquivalentMap() {
+        String[] subtags;
+        for (String preferred : initialLanguageMap.keySet()) {
+            subtags = initialLanguageMap.get(preferred).toString().split(",");
+
+            if (subtags.length == 2) {
+                sortedLanguageMap1.put(subtags[0], subtags[1]);
+                sortedLanguageMap1.put(subtags[1], subtags[0]);
+            } else if (subtags.length == 3) {
+                sortedLanguageMap2.put(subtags[0],
+                                     new String[]{subtags[1], subtags[2]});
+                sortedLanguageMap2.put(subtags[1],
+                                     new String[]{subtags[0], subtags[2]});
+                sortedLanguageMap2.put(subtags[2],
+                                     new String[]{subtags[0], subtags[1]});
+            } else {
+                    throw new RuntimeException("New case, need implementation."
+                        + " A language subtag \"" + preferred
+                        + "\" is registered for more than two subtags. ");
+            }
+        }
+
+        for (String preferred : initialRegionVariantMap.keySet()) {
+            subtags =
+                initialRegionVariantMap.get(preferred).toString().split(",");
+
+            sortedRegionVariantMap.put(subtags[0], subtags[1]);
+            sortedRegionVariantMap.put(subtags[1], subtags[0]);
+        }
+
+        if (verbose) {
+            System.out.println("generateEquivalentMap()");
+            System.out.println("  \nSorted map for language subtags which have only one equivalent. Size="
+                + sortedLanguageMap1.size());
+            for (String key : sortedLanguageMap1.keySet()) {
+                System.out.println("    " + key + ": \""
+                    + sortedLanguageMap1.get(key) + "\"");
+            }
+
+            System.out.println("\n  Sorted map for language subtags which have multiple equivalents. Size="
+                + sortedLanguageMap2.size());
+            for (String key : sortedLanguageMap2.keySet()) {
+                String[] s = sortedLanguageMap2.get(key);
+                System.out.println("    " + key + ": \""
+                    + s[0] + "\", \"" + s[1] + "\"");
+            }
+
+            System.out.println("\n  Sorted map for region and variant subtags. Size="
+                + sortedRegionVariantMap.size());
+            for (String key : sortedRegionVariantMap.keySet()) {
+                System.out.println("    " + key + ": \""
+                    + sortedRegionVariantMap.get(key) + "\"");
+            }
+        }
+        System.out.println();
+    }
+
+    private final static String headerText =
+        "final class LocaleEquivalentMaps {\n\n"
+        + "    static final Map<String, String> singleEquivMap;\n"
+        + "    static final Map<String, String[]> multiEquivsMap;\n"
+        + "    static final Map<String, String> regionVariantEquivMap;\n\n"
+        + "    static {\n"
+        + "        singleEquivMap = new HashMap<>();\n"
+        + "        multiEquivsMap = new HashMap<>();\n"
+        + "        regionVariantEquivMap = new HashMap<>();\n\n"
+        + "        // This is an auto-generated file and should not be manually edited.\n";
+
+    private final static String footerText =
+        "    }\n\n"
+        + "}";
+
+    private static void generateSourceCode() {
+        System.out.println(headerText
+            + "        //   LSR Revision: " + LSRrevisionDate);
+
+        for (String key : sortedLanguageMap1.keySet()) {
+            String value = sortedLanguageMap1.get(key);
+            System.out.println("        singleEquivMap.put(\""
+                + key + "\", \"" + value + "\");");
+        }
+        System.out.println();
+        for (String key : sortedLanguageMap2.keySet()) {
+            String[] values = sortedLanguageMap2.get(key);
+            System.out.println("        multiEquivsMap.put(\""
+                + key + "\", new String[] {\"" + values[0] + "\", \""
+                + values[1] + "\"});");
+        }
+        System.out.println();
+        for (String key : sortedRegionVariantMap.keySet()) {
+            String value = sortedRegionVariantMap.get(key);
+            System.out.println("        regionVariantEquivMap.put(\""
+                + key + "\", \"" + value + "\");");
+        }
+
+        System.out.println(footerText);
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/util/Locale/tools/language-subtag-registry.txt	Thu Oct 11 16:59:50 2012 -0700
@@ -0,0 +1,45975 @@
+File-Date: 2012-09-04
+%%
+Type: language
+Subtag: aa
+Description: Afar
+Added: 2005-10-16
+%%
+Type: language
+Subtag: ab
+Description: Abkhazian
+Added: 2005-10-16
+Suppress-Script: Cyrl
+%%
+Type: language
+Subtag: ae
+Description: Avestan
+Added: 2005-10-16
+%%
+Type: language
+Subtag: af
+Description: Afrikaans
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: ak
+Description: Akan
+Added: 2005-10-16
+Scope: macrolanguage
+%%
+Type: language
+Subtag: am
+Description: Amharic
+Added: 2005-10-16
+Suppress-Script: Ethi
+%%
+Type: language
+Subtag: an
+Description: Aragonese
+Added: 2005-10-16
+%%
+Type: language
+Subtag: ar
+Description: Arabic
+Added: 2005-10-16
+Suppress-Script: Arab
+Scope: macrolanguage
+%%
+Type: language
+Subtag: as
+Description: Assamese
+Added: 2005-10-16
+Suppress-Script: Beng
+%%
+Type: language
+Subtag: av
+Description: Avaric
+Added: 2005-10-16
+%%
+Type: language
+Subtag: ay
+Description: Aymara
+Added: 2005-10-16
+Suppress-Script: Latn
+Scope: macrolanguage
+%%
+Type: language
+Subtag: az
+Description: Azerbaijani
+Added: 2005-10-16
+Scope: macrolanguage
+%%
+Type: language
+Subtag: ba
+Description: Bashkir
+Added: 2005-10-16
+%%
+Type: language
+Subtag: be
+Description: Belarusian
+Added: 2005-10-16
+Suppress-Script: Cyrl
+%%
+Type: language
+Subtag: bg
+Description: Bulgarian
+Added: 2005-10-16
+Suppress-Script: Cyrl
+%%
+Type: language
+Subtag: bh
+Description: Bihari languages
+Added: 2005-10-16
+Scope: collection
+%%
+Type: language
+Subtag: bi
+Description: Bislama
+Added: 2005-10-16
+%%
+Type: language
+Subtag: bm
+Description: Bambara
+Added: 2005-10-16
+%%
+Type: language
+Subtag: bn
+Description: Bengali
+Added: 2005-10-16
+Suppress-Script: Beng
+%%
+Type: language
+Subtag: bo
+Description: Tibetan
+Added: 2005-10-16
+%%
+Type: language
+Subtag: br
+Description: Breton
+Added: 2005-10-16
+%%
+Type: language
+Subtag: bs
+Description: Bosnian
+Added: 2005-10-16
+Suppress-Script: Latn
+Macrolanguage: sh
+%%
+Type: language
+Subtag: ca
+Description: Catalan
+Description: Valencian
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: ce
+Description: Chechen
+Added: 2005-10-16
+%%
+Type: language
+Subtag: ch
+Description: Chamorro
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: co
+Description: Corsican
+Added: 2005-10-16
+%%
+Type: language
+Subtag: cr
+Description: Cree
+Added: 2005-10-16
+Scope: macrolanguage
+%%
+Type: language
+Subtag: cs
+Description: Czech
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: cu
+Description: Church Slavic
+Description: Church Slavonic
+Description: Old Bulgarian
+Description: Old Church Slavonic
+Description: Old Slavonic
+Added: 2005-10-16
+%%
+Type: language
+Subtag: cv
+Description: Chuvash
+Added: 2005-10-16
+%%
+Type: language
+Subtag: cy
+Description: Welsh
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: da
+Description: Danish
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: de
+Description: German
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: dv
+Description: Dhivehi
+Description: Divehi
+Description: Maldivian
+Added: 2005-10-16
+Suppress-Script: Thaa
+%%
+Type: language
+Subtag: dz
+Description: Dzongkha
+Added: 2005-10-16
+Suppress-Script: Tibt
+%%
+Type: language
+Subtag: ee
+Description: Ewe
+Added: 2005-10-16
+%%
+Type: language
+Subtag: el
+Description: Modern Greek (1453-)
+Added: 2005-10-16
+Suppress-Script: Grek
+%%
+Type: language
+Subtag: en
+Description: English
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: eo
+Description: Esperanto
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: es
+Description: Spanish
+Description: Castilian
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: et
+Description: Estonian
+Added: 2005-10-16
+Suppress-Script: Latn
+Scope: macrolanguage
+%%
+Type: language
+Subtag: eu
+Description: Basque
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: fa
+Description: Persian
+Added: 2005-10-16
+Suppress-Script: Arab
+Scope: macrolanguage
+%%
+Type: language
+Subtag: ff
+Description: Fulah
+Added: 2005-10-16
+Scope: macrolanguage
+%%
+Type: language
+Subtag: fi
+Description: Finnish
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: fj
+Description: Fijian
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: fo
+Description: Faroese
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: fr
+Description: French
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: fy
+Description: Western Frisian
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: ga
+Description: Irish
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: gd
+Description: Scottish Gaelic
+Description: Gaelic
+Added: 2005-10-16
+%%
+Type: language
+Subtag: gl
+Description: Galician
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: gn
+Description: Guarani
+Added: 2005-10-16
+Suppress-Script: Latn
+Scope: macrolanguage
+%%
+Type: language
+Subtag: gu
+Description: Gujarati
+Added: 2005-10-16
+Suppress-Script: Gujr
+%%
+Type: language
+Subtag: gv
+Description: Manx
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: ha
+Description: Hausa
+Added: 2005-10-16
+%%
+Type: language
+Subtag: he
+Description: Hebrew
+Added: 2005-10-16
+Suppress-Script: Hebr
+%%
+Type: language
+Subtag: hi
+Description: Hindi
+Added: 2005-10-16
+Suppress-Script: Deva
+%%
+Type: language
+Subtag: ho
+Description: Hiri Motu
+Added: 2005-10-16
+%%
+Type: language
+Subtag: hr
+Description: Croatian
+Added: 2005-10-16
+Suppress-Script: Latn
+Macrolanguage: sh
+%%
+Type: language
+Subtag: ht
+Description: Haitian
+Description: Haitian Creole
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: hu
+Description: Hungarian
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: hy
+Description: Armenian
+Added: 2005-10-16
+Suppress-Script: Armn
+%%
+Type: language
+Subtag: hz
+Description: Herero
+Added: 2005-10-16
+%%
+Type: language
+Subtag: ia
+Description: Interlingua (International Auxiliary Language
+  Association)
+Added: 2005-10-16
+%%
+Type: language
+Subtag: id
+Description: Indonesian
+Added: 2005-10-16
+Suppress-Script: Latn
+Macrolanguage: ms
+%%
+Type: language
+Subtag: ie
+Description: Interlingue
+Description: Occidental
+Added: 2005-10-16
+%%
+Type: language
+Subtag: ig
+Description: Igbo
+Added: 2005-10-16
+%%
+Type: language
+Subtag: ii
+Description: Sichuan Yi
+Description: Nuosu
+Added: 2005-10-16
+%%
+Type: language
+Subtag: ik
+Description: Inupiaq
+Added: 2005-10-16
+Scope: macrolanguage
+%%
+Type: language
+Subtag: in
+Description: Indonesian
+Added: 2005-10-16
+Deprecated: 1989-01-01
+Preferred-Value: id
+Suppress-Script: Latn
+Macrolanguage: ms
+%%
+Type: language
+Subtag: io
+Description: Ido
+Added: 2005-10-16
+%%
+Type: language
+Subtag: is
+Description: Icelandic
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: it
+Description: Italian
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: iu
+Description: Inuktitut
+Added: 2005-10-16
+Scope: macrolanguage
+%%
+Type: language
+Subtag: iw
+Description: Hebrew
+Added: 2005-10-16
+Deprecated: 1989-01-01
+Preferred-Value: he
+Suppress-Script: Hebr
+%%
+Type: language
+Subtag: ja
+Description: Japanese
+Added: 2005-10-16
+Suppress-Script: Jpan
+%%
+Type: language
+Subtag: ji
+Description: Yiddish
+Added: 2005-10-16
+Deprecated: 1989-01-01
+Preferred-Value: yi
+%%
+Type: language
+Subtag: jv
+Description: Javanese
+Added: 2005-10-16
+%%
+Type: language
+Subtag: jw
+Description: Javanese
+Added: 2005-10-16
+Deprecated: 2001-08-13
+Preferred-Value: jv
+Comments: published by error in Table 1 of ISO 639:1988
+%%
+Type: language
+Subtag: ka
+Description: Georgian
+Added: 2005-10-16
+Suppress-Script: Geor
+%%
+Type: language
+Subtag: kg
+Description: Kongo
+Added: 2005-10-16
+Scope: macrolanguage
+%%
+Type: language
+Subtag: ki
+Description: Kikuyu
+Description: Gikuyu
+Added: 2005-10-16
+%%
+Type: language
+Subtag: kj
+Description: Kuanyama
+Description: Kwanyama
+Added: 2005-10-16
+%%
+Type: language
+Subtag: kk
+Description: Kazakh
+Added: 2005-10-16
+Suppress-Script: Cyrl
+%%
+Type: language
+Subtag: kl
+Description: Kalaallisut
+Description: Greenlandic
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: km
+Description: Central Khmer
+Added: 2005-10-16
+Suppress-Script: Khmr
+%%
+Type: language
+Subtag: kn
+Description: Kannada
+Added: 2005-10-16
+Suppress-Script: Knda
+%%
+Type: language
+Subtag: ko
+Description: Korean
+Added: 2005-10-16
+Suppress-Script: Kore
+%%
+Type: language
+Subtag: kr
+Description: Kanuri
+Added: 2005-10-16
+Scope: macrolanguage
+%%
+Type: language
+Subtag: ks
+Description: Kashmiri
+Added: 2005-10-16
+%%
+Type: language
+Subtag: ku
+Description: Kurdish
+Added: 2005-10-16
+Scope: macrolanguage
+%%
+Type: language
+Subtag: kv
+Description: Komi
+Added: 2005-10-16
+Scope: macrolanguage
+%%
+Type: language
+Subtag: kw
+Description: Cornish
+Added: 2005-10-16
+%%
+Type: language
+Subtag: ky
+Description: Kirghiz
+Description: Kyrgyz
+Added: 2005-10-16
+%%
+Type: language
+Subtag: la
+Description: Latin
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: lb
+Description: Luxembourgish
+Description: Letzeburgesch
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: lg
+Description: Ganda
+Added: 2005-10-16
+%%
+Type: language
+Subtag: li
+Description: Limburgan
+Description: Limburger
+Description: Limburgish
+Added: 2005-10-16
+%%
+Type: language
+Subtag: ln
+Description: Lingala
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: lo
+Description: Lao
+Added: 2005-10-16
+Suppress-Script: Laoo
+%%
+Type: language
+Subtag: lt
+Description: Lithuanian
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: lu
+Description: Luba-Katanga
+Added: 2005-10-16
+%%
+Type: language
+Subtag: lv
+Description: Latvian
+Added: 2005-10-16
+Suppress-Script: Latn
+Scope: macrolanguage
+%%
+Type: language
+Subtag: mg
+Description: Malagasy
+Added: 2005-10-16
+Suppress-Script: Latn
+Scope: macrolanguage
+%%
+Type: language
+Subtag: mh
+Description: Marshallese
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: mi
+Description: Maori
+Added: 2005-10-16
+%%
+Type: language
+Subtag: mk
+Description: Macedonian
+Added: 2005-10-16
+Suppress-Script: Cyrl
+%%
+Type: language
+Subtag: ml
+Description: Malayalam
+Added: 2005-10-16
+Suppress-Script: Mlym
+%%
+Type: language
+Subtag: mn
+Description: Mongolian
+Added: 2005-10-16
+Scope: macrolanguage
+%%
+Type: language
+Subtag: mo
+Description: Moldavian
+Description: Moldovan
+Added: 2005-10-16
+Deprecated: 2008-11-22
+Preferred-Value: ro
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: mr
+Description: Marathi
+Added: 2005-10-16
+Suppress-Script: Deva
+%%
+Type: language
+Subtag: ms
+Description: Malay (macrolanguage)
+Added: 2005-10-16
+Suppress-Script: Latn
+Scope: macrolanguage
+%%
+Type: language
+Subtag: mt
+Description: Maltese
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: my
+Description: Burmese
+Added: 2005-10-16
+Suppress-Script: Mymr
+%%
+Type: language
+Subtag: na
+Description: Nauru
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: nb
+Description: Norwegian Bokmål
+Added: 2005-10-16
+Suppress-Script: Latn
+Macrolanguage: no
+%%
+Type: language
+Subtag: nd
+Description: North Ndebele
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: ne
+Description: Nepali (macrolanguage)
+Added: 2005-10-16
+Suppress-Script: Deva
+Scope: macrolanguage
+%%
+Type: language
+Subtag: ng
+Description: Ndonga
+Added: 2005-10-16
+%%
+Type: language
+Subtag: nl
+Description: Dutch
+Description: Flemish
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: nn
+Description: Norwegian Nynorsk
+Added: 2005-10-16
+Suppress-Script: Latn
+Macrolanguage: no
+%%
+Type: language
+Subtag: no
+Description: Norwegian
+Added: 2005-10-16
+Suppress-Script: Latn
+Scope: macrolanguage
+%%
+Type: language
+Subtag: nr
+Description: South Ndebele
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: nv
+Description: Navajo
+Description: Navaho
+Added: 2005-10-16
+%%
+Type: language
+Subtag: ny
+Description: Nyanja
+Description: Chewa
+Description: Chichewa
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: oc
+Description: Occitan (post 1500)
+Added: 2005-10-16
+%%
+Type: language
+Subtag: oj
+Description: Ojibwa
+Added: 2005-10-16
+Scope: macrolanguage
+%%
+Type: language
+Subtag: om
+Description: Oromo
+Added: 2005-10-16
+Suppress-Script: Latn
+Scope: macrolanguage
+%%
+Type: language
+Subtag: or
+Description: Oriya (macrolanguage)
+Added: 2005-10-16
+Suppress-Script: Orya
+Scope: macrolanguage
+%%
+Type: language
+Subtag: os
+Description: Ossetian
+Description: Ossetic
+Added: 2005-10-16
+%%
+Type: language
+Subtag: pa
+Description: Panjabi
+Description: Punjabi
+Added: 2005-10-16
+Suppress-Script: Guru
+%%
+Type: language
+Subtag: pi
+Description: Pali
+Added: 2005-10-16
+%%
+Type: language
+Subtag: pl
+Description: Polish
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: ps
+Description: Pushto
+Description: Pashto
+Added: 2005-10-16
+Suppress-Script: Arab
+Scope: macrolanguage
+%%
+Type: language
+Subtag: pt
+Description: Portuguese
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: qu
+Description: Quechua
+Added: 2005-10-16
+Suppress-Script: Latn
+Scope: macrolanguage
+%%
+Type: language
+Subtag: rm
+Description: Romansh
+Suppress-Script: Latn
+Added: 2005-10-16
+%%
+Type: language
+Subtag: rn
+Description: Rundi
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: ro
+Description: Romanian
+Description: Moldavian
+Description: Moldovan
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: ru
+Description: Russian
+Added: 2005-10-16
+Suppress-Script: Cyrl
+%%
+Type: language
+Subtag: rw
+Description: Kinyarwanda
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: sa
+Description: Sanskrit
+Added: 2005-10-16
+%%
+Type: language
+Subtag: sc
+Description: Sardinian
+Added: 2005-10-16
+Scope: macrolanguage
+%%
+Type: language
+Subtag: sd
+Description: Sindhi
+Added: 2005-10-16
+%%
+Type: language
+Subtag: se
+Description: Northern Sami
+Added: 2005-10-16
+%%
+Type: language
+Subtag: sg
+Description: Sango
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: sh
+Description: Serbo-Croatian
+Added: 2005-10-16
+Scope: macrolanguage
+Comments: sr, hr, bs are preferred for most modern uses
+%%
+Type: language
+Subtag: si
+Description: Sinhala
+Description: Sinhalese
+Added: 2005-10-16
+Suppress-Script: Sinh
+%%
+Type: language
+Subtag: sk
+Description: Slovak
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: sl
+Description: Slovenian
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: sm
+Description: Samoan
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: sn
+Description: Shona
+Added: 2005-10-16
+%%
+Type: language
+Subtag: so
+Description: Somali
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: sq
+Description: Albanian
+Added: 2005-10-16
+Suppress-Script: Latn
+Scope: macrolanguage
+%%
+Type: language
+Subtag: sr
+Description: Serbian
+Added: 2005-10-16
+Macrolanguage: sh
+%%
+Type: language
+Subtag: ss
+Description: Swati
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: st
+Description: Southern Sotho
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: su
+Description: Sundanese
+Added: 2005-10-16
+%%
+Type: language
+Subtag: sv
+Description: Swedish
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: sw
+Description: Swahili (macrolanguage)
+Added: 2005-10-16
+Suppress-Script: Latn
+Scope: macrolanguage
+%%
+Type: language
+Subtag: ta
+Description: Tamil
+Added: 2005-10-16
+Suppress-Script: Taml
+%%
+Type: language
+Subtag: te
+Description: Telugu
+Added: 2005-10-16
+Suppress-Script: Telu
+%%
+Type: language
+Subtag: tg
+Description: Tajik
+Added: 2005-10-16
+%%
+Type: language
+Subtag: th
+Description: Thai
+Added: 2005-10-16
+Suppress-Script: Thai
+%%
+Type: language
+Subtag: ti
+Description: Tigrinya
+Added: 2005-10-16
+Suppress-Script: Ethi
+%%
+Type: language
+Subtag: tk
+Description: Turkmen
+Added: 2005-10-16
+%%
+Type: language
+Subtag: tl
+Description: Tagalog
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: tn
+Description: Tswana
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: to
+Description: Tonga (Tonga Islands)
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: tr
+Description: Turkish
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: ts
+Description: Tsonga
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: tt
+Description: Tatar
+Added: 2005-10-16
+%%
+Type: language
+Subtag: tw
+Description: Twi
+Added: 2005-10-16
+Macrolanguage: ak
+%%
+Type: language
+Subtag: ty
+Description: Tahitian
+Added: 2005-10-16
+%%
+Type: language
+Subtag: ug
+Description: Uighur
+Description: Uyghur
+Added: 2005-10-16
+%%
+Type: language
+Subtag: uk
+Description: Ukrainian
+Added: 2005-10-16
+Suppress-Script: Cyrl
+%%
+Type: language
+Subtag: ur
+Description: Urdu
+Added: 2005-10-16
+Suppress-Script: Arab
+%%
+Type: language
+Subtag: uz
+Description: Uzbek
+Added: 2005-10-16
+Scope: macrolanguage
+%%
+Type: language
+Subtag: ve
+Description: Venda
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: vi
+Description: Vietnamese
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: vo
+Description: Volapük
+Added: 2005-10-16
+%%
+Type: language
+Subtag: wa
+Description: Walloon
+Added: 2005-10-16
+%%
+Type: language
+Subtag: wo
+Description: Wolof
+Added: 2005-10-16
+%%
+Type: language
+Subtag: xh
+Description: Xhosa
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: yi
+Description: Yiddish
+Added: 2005-10-16
+Suppress-Script: Hebr
+Scope: macrolanguage
+%%
+Type: language
+Subtag: yo
+Description: Yoruba
+Added: 2005-10-16
+%%
+Type: language
+Subtag: za
+Description: Zhuang
+Description: Chuang
+Added: 2005-10-16
+Scope: macrolanguage
+%%
+Type: language
+Subtag: zh
+Description: Chinese
+Added: 2005-10-16
+Scope: macrolanguage
+%%
+Type: language
+Subtag: zu
+Description: Zulu
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: aaa
+Description: Ghotuo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aab
+Description: Alumu-Tesu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aac
+Description: Ari
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aad
+Description: Amal
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aae
+Description: Arbëreshë Albanian
+Added: 2009-07-29
+Macrolanguage: sq
+%%
+Type: language
+Subtag: aaf
+Description: Aranadan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aag
+Description: Ambrak
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aah
+Description: Abu' Arapesh
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aai
+Description: Arifama-Miniafia
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aak
+Description: Ankave
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aal
+Description: Afade
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aam
+Description: Aramanik
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aan
+Description: Anambé
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aao
+Description: Algerian Saharan Arabic
+Added: 2009-07-29
+Macrolanguage: ar
+%%
+Type: language
+Subtag: aap
+Description: Pará Arára
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aaq
+Description: Eastern Abnaki
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aas
+Description: Aasáx
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aat
+Description: Arvanitika Albanian
+Added: 2009-07-29
+Macrolanguage: sq
+%%
+Type: language
+Subtag: aau
+Description: Abau
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aav
+Description: Austro-Asiatic languages
+Added: 2009-07-29
+Scope: collection
+%%
+Type: language
+Subtag: aaw
+Description: Solong
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aax
+Description: Mandobo Atas
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aaz
+Description: Amarasi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aba
+Description: Abé
+Added: 2009-07-29
+%%
+Type: language
+Subtag: abb
+Description: Bankon
+Added: 2009-07-29
+%%
+Type: language
+Subtag: abc
+Description: Ambala Ayta
+Added: 2009-07-29
+%%
+Type: language
+Subtag: abd
+Description: Manide
+Added: 2009-07-29
+%%
+Type: language
+Subtag: abe
+Description: Western Abnaki
+Added: 2009-07-29
+%%
+Type: language
+Subtag: abf
+Description: Abai Sungai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: abg
+Description: Abaga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: abh
+Description: Tajiki Arabic
+Added: 2009-07-29
+Macrolanguage: ar
+%%
+Type: language
+Subtag: abi
+Description: Abidji
+Added: 2009-07-29
+%%
+Type: language
+Subtag: abj
+Description: Aka-Bea
+Added: 2009-07-29
+%%
+Type: language
+Subtag: abl
+Description: Lampung Nyo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: abm
+Description: Abanyom
+Added: 2009-07-29
+%%
+Type: language
+Subtag: abn
+Description: Abua
+Added: 2009-07-29
+%%
+Type: language
+Subtag: abo
+Description: Abon
+Added: 2009-07-29
+%%
+Type: language
+Subtag: abp
+Description: Abellen Ayta
+Added: 2009-07-29
+%%
+Type: language
+Subtag: abq
+Description: Abaza
+Added: 2009-07-29
+%%
+Type: language
+Subtag: abr
+Description: Abron
+Added: 2009-07-29
+%%
+Type: language
+Subtag: abs
+Description: Ambonese Malay
+Added: 2009-07-29
+%%
+Type: language
+Subtag: abt
+Description: Ambulas
+Added: 2009-07-29
+%%
+Type: language
+Subtag: abu
+Description: Abure
+Added: 2009-07-29
+%%
+Type: language
+Subtag: abv
+Description: Baharna Arabic
+Added: 2009-07-29
+Macrolanguage: ar
+%%
+Type: language
+Subtag: abw
+Description: Pal
+Added: 2009-07-29
+%%
+Type: language
+Subtag: abx
+Description: Inabaknon
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aby
+Description: Aneme Wake
+Added: 2009-07-29
+%%
+Type: language
+Subtag: abz
+Description: Abui
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aca
+Description: Achagua
+Added: 2009-07-29
+%%
+Type: language
+Subtag: acb
+Description: Áncá
+Added: 2009-07-29
+%%
+Type: language
+Subtag: acd
+Description: Gikyode
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ace
+Description: Achinese
+Added: 2005-10-16
+%%
+Type: language
+Subtag: acf
+Description: Saint Lucian Creole French
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ach
+Description: Acoli
+Added: 2005-10-16
+%%
+Type: language
+Subtag: aci
+Description: Aka-Cari
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ack
+Description: Aka-Kora
+Added: 2009-07-29
+%%
+Type: language
+Subtag: acl
+Description: Akar-Bale
+Added: 2009-07-29
+%%
+Type: language
+Subtag: acm
+Description: Mesopotamian Arabic
+Added: 2009-07-29
+Macrolanguage: ar
+%%
+Type: language
+Subtag: acn
+Description: Achang
+Added: 2009-07-29
+%%
+Type: language
+Subtag: acp
+Description: Eastern Acipa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: acq
+Description: Ta'izzi-Adeni Arabic
+Added: 2009-07-29
+Macrolanguage: ar
+%%
+Type: language
+Subtag: acr
+Description: Achi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: acs
+Description: Acroá
+Added: 2009-07-29
+%%
+Type: language
+Subtag: act
+Description: Achterhoeks
+Added: 2009-07-29
+%%
+Type: language
+Subtag: acu
+Description: Achuar-Shiwiar
+Added: 2009-07-29
+%%
+Type: language
+Subtag: acv
+Description: Achumawi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: acw
+Description: Hijazi Arabic
+Added: 2009-07-29
+Macrolanguage: ar
+%%
+Type: language
+Subtag: acx
+Description: Omani Arabic
+Added: 2009-07-29
+Macrolanguage: ar
+%%
+Type: language
+Subtag: acy
+Description: Cypriot Arabic
+Added: 2009-07-29
+Macrolanguage: ar
+%%
+Type: language
+Subtag: acz
+Description: Acheron
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ada
+Description: Adangme
+Added: 2005-10-16
+%%
+Type: language
+Subtag: adb
+Description: Adabe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: add
+Description: Dzodinka
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ade
+Description: Adele
+Added: 2009-07-29
+%%
+Type: language
+Subtag: adf
+Description: Dhofari Arabic
+Added: 2009-07-29
+Macrolanguage: ar
+%%
+Type: language
+Subtag: adg
+Description: Andegerebinha
+Added: 2009-07-29
+%%
+Type: language
+Subtag: adh
+Description: Adhola
+Added: 2009-07-29
+%%
+Type: language
+Subtag: adi
+Description: Adi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: adj
+Description: Adioukrou
+Added: 2009-07-29
+%%
+Type: language
+Subtag: adl
+Description: Galo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: adn
+Description: Adang
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ado
+Description: Abu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: adp
+Description: Adap
+Added: 2009-07-29
+%%
+Type: language
+Subtag: adq
+Description: Adangbe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: adr
+Description: Adonara
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ads
+Description: Adamorobe Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: adt
+Description: Adnyamathanha
+Added: 2009-07-29
+%%
+Type: language
+Subtag: adu
+Description: Aduge
+Added: 2009-07-29
+%%
+Type: language
+Subtag: adw
+Description: Amundava
+Added: 2009-07-29
+%%
+Type: language
+Subtag: adx
+Description: Amdo Tibetan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ady
+Description: Adyghe
+Description: Adygei
+Added: 2005-10-16
+%%
+Type: language
+Subtag: adz
+Description: Adzera
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aea
+Description: Areba
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aeb
+Description: Tunisian Arabic
+Added: 2009-07-29
+Macrolanguage: ar
+%%
+Type: language
+Subtag: aec
+Description: Saidi Arabic
+Added: 2009-07-29
+Macrolanguage: ar
+%%
+Type: language
+Subtag: aed
+Description: Argentine Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aee
+Description: Northeast Pashayi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aek
+Description: Haeke
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ael
+Description: Ambele
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aem
+Description: Arem
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aen
+Description: Armenian Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aeq
+Description: Aer
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aer
+Description: Eastern Arrernte
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aes
+Description: Alsea
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aeu
+Description: Akeu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aew
+Description: Ambakich
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aey
+Description: Amele
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aez
+Description: Aeka
+Added: 2009-07-29
+%%
+Type: language
+Subtag: afa
+Description: Afro-Asiatic languages
+Added: 2005-10-16
+Scope: collection
+%%
+Type: language
+Subtag: afb
+Description: Gulf Arabic
+Added: 2009-07-29
+Macrolanguage: ar
+%%
+Type: language
+Subtag: afd
+Description: Andai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: afe
+Description: Putukwam
+Added: 2009-07-29
+%%
+Type: language
+Subtag: afg
+Description: Afghan Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: afh
+Description: Afrihili
+Added: 2005-10-16
+%%
+Type: language
+Subtag: afi
+Description: Akrukay
+Added: 2009-07-29
+%%
+Type: language
+Subtag: afk
+Description: Nanubae
+Added: 2009-07-29
+%%
+Type: language
+Subtag: afn
+Description: Defaka
+Added: 2009-07-29
+%%
+Type: language
+Subtag: afo
+Description: Eloyi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: afp
+Description: Tapei
+Added: 2009-07-29
+%%
+Type: language
+Subtag: afs
+Description: Afro-Seminole Creole
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aft
+Description: Afitti
+Added: 2009-07-29
+%%
+Type: language
+Subtag: afu
+Description: Awutu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: afz
+Description: Obokuitai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aga
+Description: Aguano
+Added: 2009-07-29
+%%
+Type: language
+Subtag: agb
+Description: Legbo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: agc
+Description: Agatu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: agd
+Description: Agarabi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: age
+Description: Angal
+Added: 2009-07-29
+%%
+Type: language
+Subtag: agf
+Description: Arguni
+Added: 2009-07-29
+%%
+Type: language
+Subtag: agg
+Description: Angor
+Added: 2009-07-29
+%%
+Type: language
+Subtag: agh
+Description: Ngelima
+Added: 2009-07-29
+%%
+Type: language
+Subtag: agi
+Description: Agariya
+Added: 2009-07-29
+%%
+Type: language
+Subtag: agj
+Description: Argobba
+Added: 2009-07-29
+%%
+Type: language
+Subtag: agk
+Description: Isarog Agta
+Added: 2009-07-29
+%%
+Type: language
+Subtag: agl
+Description: Fembe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: agm
+Description: Angaataha
+Added: 2009-07-29
+%%
+Type: language
+Subtag: agn
+Description: Agutaynen
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ago
+Description: Tainae
+Added: 2009-07-29
+%%
+Type: language
+Subtag: agp
+Description: Paranan
+Added: 2009-07-29
+Deprecated: 2010-03-11
+Comments: see apf, prf
+%%
+Type: language
+Subtag: agq
+Description: Aghem
+Added: 2009-07-29
+%%
+Type: language
+Subtag: agr
+Description: Aguaruna
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ags
+Description: Esimbi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: agt
+Description: Central Cagayan Agta
+Added: 2009-07-29
+%%
+Type: language
+Subtag: agu
+Description: Aguacateco
+Added: 2009-07-29
+%%
+Type: language
+Subtag: agv
+Description: Remontado Dumagat
+Added: 2009-07-29
+%%
+Type: language
+Subtag: agw
+Description: Kahua
+Added: 2009-07-29
+%%
+Type: language
+Subtag: agx
+Description: Aghul
+Added: 2009-07-29
+%%
+Type: language
+Subtag: agy
+Description: Southern Alta
+Added: 2009-07-29
+%%
+Type: language
+Subtag: agz
+Description: Mt. Iriga Agta
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aha
+Description: Ahanta
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ahb
+Description: Axamb
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ahg
+Description: Qimant
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ahh
+Description: Aghu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ahi
+Description: Tiagbamrin Aizi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ahk
+Description: Akha
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ahl
+Description: Igo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ahm
+Description: Mobumrin Aizi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ahn
+Description: Àhàn
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aho
+Description: Ahom
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ahp
+Description: Aproumu Aizi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ahr
+Description: Ahirani
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ahs
+Description: Ashe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aht
+Description: Ahtena
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aia
+Description: Arosi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aib
+Description: Ainu (China)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aic
+Description: Ainbai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aid
+Description: Alngith
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aie
+Description: Amara
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aif
+Description: Agi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aig
+Description: Antigua and Barbuda Creole English
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aih
+Description: Ai-Cham
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aii
+Description: Assyrian Neo-Aramaic
+Added: 2009-07-29
+Macrolanguage: syr
+%%
+Type: language
+Subtag: aij
+Description: Lishanid Noshan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aik
+Description: Ake
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ail
+Description: Aimele
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aim
+Description: Aimol
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ain
+Description: Ainu (Japan)
+Added: 2005-10-16
+%%
+Type: language
+Subtag: aio
+Description: Aiton
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aip
+Description: Burumakok
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aiq
+Description: Aimaq
+Added: 2009-07-29
+%%
+Type: language
+Subtag: air
+Description: Airoran
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ais
+Description: Nataoran Amis
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ait
+Description: Arikem
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aiw
+Description: Aari
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aix
+Description: Aighon
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aiy
+Description: Ali
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aja
+Description: Aja (Sudan)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ajg
+Description: Aja (Benin)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aji
+Description: Ajië
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ajn
+Description: Andajin
+Added: 2012-08-12
+%%
+Type: language
+Subtag: ajp
+Description: South Levantine Arabic
+Added: 2009-07-29
+Macrolanguage: ar
+%%
+Type: language
+Subtag: ajt
+Description: Judeo-Tunisian Arabic
+Added: 2009-07-29
+Macrolanguage: jrb
+%%
+Type: language
+Subtag: aju
+Description: Judeo-Moroccan Arabic
+Added: 2009-07-29
+Macrolanguage: jrb
+%%
+Type: language
+Subtag: ajw
+Description: Ajawa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ajz
+Description: Amri Karbi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: akb
+Description: Batak Angkola
+Added: 2009-07-29
+%%
+Type: language
+Subtag: akc
+Description: Mpur
+Added: 2009-07-29
+%%
+Type: language
+Subtag: akd
+Description: Ukpet-Ehom
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ake
+Description: Akawaio
+Added: 2009-07-29
+%%
+Type: language
+Subtag: akf
+Description: Akpa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: akg
+Description: Anakalangu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: akh
+Description: Angal Heneng
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aki
+Description: Aiome
+Added: 2009-07-29
+%%
+Type: language
+Subtag: akj
+Description: Aka-Jeru
+Added: 2009-07-29
+%%
+Type: language
+Subtag: akk
+Description: Akkadian
+Added: 2005-10-16
+%%
+Type: language
+Subtag: akl
+Description: Aklanon
+Added: 2009-07-29
+%%
+Type: language
+Subtag: akm
+Description: Aka-Bo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ako
+Description: Akurio
+Added: 2009-07-29
+%%
+Type: language
+Subtag: akp
+Description: Siwu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: akq
+Description: Ak
+Added: 2009-07-29
+%%
+Type: language
+Subtag: akr
+Description: Araki
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aks
+Description: Akaselem
+Added: 2009-07-29
+%%
+Type: language
+Subtag: akt
+Description: Akolet
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aku
+Description: Akum
+Added: 2009-07-29
+%%
+Type: language
+Subtag: akv
+Description: Akhvakh
+Added: 2009-07-29
+%%
+Type: language
+Subtag: akw
+Description: Akwa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: akx
+Description: Aka-Kede
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aky
+Description: Aka-Kol
+Added: 2009-07-29
+%%
+Type: language
+Subtag: akz
+Description: Alabama
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ala
+Description: Alago
+Added: 2009-07-29
+%%
+Type: language
+Subtag: alc
+Description: Qawasqar
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ald
+Description: Alladian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ale
+Description: Aleut
+Added: 2005-10-16
+%%
+Type: language
+Subtag: alf
+Description: Alege
+Added: 2009-07-29
+%%
+Type: language
+Subtag: alg
+Description: Algonquian languages
+Added: 2005-10-16
+Scope: collection
+%%
+Type: language
+Subtag: alh
+Description: Alawa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ali
+Description: Amaimon
+Added: 2009-07-29
+%%
+Type: language
+Subtag: alj
+Description: Alangan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: alk
+Description: Alak
+Added: 2009-07-29
+%%
+Type: language
+Subtag: all
+Description: Allar
+Added: 2009-07-29
+%%
+Type: language
+Subtag: alm
+Description: Amblong
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aln
+Description: Gheg Albanian
+Added: 2009-07-29
+Macrolanguage: sq
+%%
+Type: language
+Subtag: alo
+Description: Larike-Wakasihu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: alp
+Description: Alune
+Added: 2009-07-29
+%%
+Type: language
+Subtag: alq
+Description: Algonquin
+Added: 2009-07-29
+%%
+Type: language
+Subtag: alr
+Description: Alutor
+Added: 2009-07-29
+%%
+Type: language
+Subtag: als
+Description: Tosk Albanian
+Added: 2009-07-29
+Macrolanguage: sq
+%%
+Type: language
+Subtag: alt
+Description: Southern Altai
+Added: 2005-10-16
+%%
+Type: language
+Subtag: alu
+Description: 'Are'are
+Added: 2009-07-29
+%%
+Type: language
+Subtag: alv
+Description: Atlantic-Congo languages
+Added: 2009-07-29
+Scope: collection
+%%
+Type: language
+Subtag: alw
+Description: Alaba-K’abeena
+Description: Wanbasana
+Added: 2009-07-29
+%%
+Type: language
+Subtag: alx
+Description: Amol
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aly
+Description: Alyawarr
+Added: 2009-07-29
+%%
+Type: language
+Subtag: alz
+Description: Alur
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ama
+Description: Amanayé
+Added: 2009-07-29
+%%
+Type: language
+Subtag: amb
+Description: Ambo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: amc
+Description: Amahuaca
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ame
+Description: Yanesha'
+Added: 2009-07-29
+%%
+Type: language
+Subtag: amf
+Description: Hamer-Banna
+Added: 2009-07-29
+%%
+Type: language
+Subtag: amg
+Description: Amurdak
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ami
+Description: Amis
+Added: 2009-07-29
+%%
+Type: language
+Subtag: amj
+Description: Amdang
+Added: 2009-07-29
+%%
+Type: language
+Subtag: amk
+Description: Ambai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aml
+Description: War-Jaintia
+Added: 2009-07-29
+%%
+Type: language
+Subtag: amm
+Description: Ama (Papua New Guinea)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: amn
+Description: Amanab
+Added: 2009-07-29
+%%
+Type: language
+Subtag: amo
+Description: Amo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: amp
+Description: Alamblak
+Added: 2009-07-29
+%%
+Type: language
+Subtag: amq
+Description: Amahai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: amr
+Description: Amarakaeri
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ams
+Description: Southern Amami-Oshima
+Added: 2009-07-29
+%%
+Type: language
+Subtag: amt
+Description: Amto
+Added: 2009-07-29
+%%
+Type: language
+Subtag: amu
+Description: Guerrero Amuzgo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: amv
+Description: Ambelau
+Added: 2009-07-29
+%%
+Type: language
+Subtag: amw
+Description: Western Neo-Aramaic
+Added: 2009-07-29
+%%
+Type: language
+Subtag: amx
+Description: Anmatyerre
+Added: 2009-07-29
+%%
+Type: language
+Subtag: amy
+Description: Ami
+Added: 2009-07-29
+%%
+Type: language
+Subtag: amz
+Description: Atampaya
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ana
+Description: Andaqui
+Added: 2009-07-29
+%%
+Type: language
+Subtag: anb
+Description: Andoa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: anc
+Description: Ngas
+Added: 2009-07-29
+%%
+Type: language
+Subtag: and
+Description: Ansus
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ane
+Description: Xârâcùù
+Added: 2009-07-29
+%%
+Type: language
+Subtag: anf
+Description: Animere
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ang
+Description: Old English (ca. 450-1100)
+Added: 2005-10-16
+%%
+Type: language
+Subtag: anh
+Description: Nend
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ani
+Description: Andi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: anj
+Description: Anor
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ank
+Description: Goemai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: anl
+Description: Anu-Hkongso Chin
+Added: 2009-07-29
+%%
+Type: language
+Subtag: anm
+Description: Anal
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ann
+Description: Obolo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ano
+Description: Andoque
+Added: 2009-07-29
+%%
+Type: language
+Subtag: anp
+Description: Angika
+Added: 2006-03-08
+%%
+Type: language
+Subtag: anq
+Description: Jarawa (India)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: anr
+Description: Andh
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ans
+Description: Anserma
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ant
+Description: Antakarinya
+Added: 2009-07-29
+%%
+Type: language
+Subtag: anu
+Description: Anuak
+Added: 2009-07-29
+%%
+Type: language
+Subtag: anv
+Description: Denya
+Added: 2009-07-29
+%%
+Type: language
+Subtag: anw
+Description: Anaang
+Added: 2009-07-29
+%%
+Type: language
+Subtag: anx
+Description: Andra-Hus
+Added: 2009-07-29
+%%
+Type: language
+Subtag: any
+Description: Anyin
+Added: 2009-07-29
+%%
+Type: language
+Subtag: anz
+Description: Anem
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aoa
+Description: Angolar
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aob
+Description: Abom
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aoc
+Description: Pemon
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aod
+Description: Andarum
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aoe
+Description: Angal Enen
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aof
+Description: Bragat
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aog
+Description: Angoram
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aoh
+Description: Arma
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aoi
+Description: Anindilyakwa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aoj
+Description: Mufian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aok
+Description: Arhö
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aol
+Description: Alor
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aom
+Description: Ömie
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aon
+Description: Bumbita Arapesh
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aor
+Description: Aore
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aos
+Description: Taikat
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aot
+Description: A'tong
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aou
+Description: A'ou
+Added: 2012-08-12
+%%
+Type: language
+Subtag: aox
+Description: Atorada
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aoz
+Description: Uab Meto
+Added: 2009-07-29
+%%
+Type: language
+Subtag: apa
+Description: Apache languages
+Added: 2005-10-16
+Scope: collection
+%%
+Type: language
+Subtag: apb
+Description: Sa'a
+Added: 2009-07-29
+%%
+Type: language
+Subtag: apc
+Description: North Levantine Arabic
+Added: 2009-07-29
+Macrolanguage: ar
+%%
+Type: language
+Subtag: apd
+Description: Sudanese Arabic
+Added: 2009-07-29
+Macrolanguage: ar
+%%
+Type: language
+Subtag: ape
+Description: Bukiyip
+Added: 2009-07-29
+%%
+Type: language
+Subtag: apf
+Description: Pahanan Agta
+Added: 2010-03-11
+%%
+Type: language
+Subtag: apg
+Description: Ampanang
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aph
+Description: Athpariya
+Added: 2009-07-29
+%%
+Type: language
+Subtag: api
+Description: Apiaká
+Added: 2009-07-29
+%%
+Type: language
+Subtag: apj
+Description: Jicarilla Apache
+Added: 2009-07-29
+%%
+Type: language
+Subtag: apk
+Description: Kiowa Apache
+Added: 2009-07-29
+%%
+Type: language
+Subtag: apl
+Description: Lipan Apache
+Added: 2009-07-29
+%%
+Type: language
+Subtag: apm
+Description: Mescalero-Chiricahua Apache
+Added: 2009-07-29
+%%
+Type: language
+Subtag: apn
+Description: Apinayé
+Added: 2009-07-29
+%%
+Type: language
+Subtag: apo
+Description: Ambul
+Added: 2009-07-29
+%%
+Type: language
+Subtag: app
+Description: Apma
+Added: 2009-07-29
+%%
+Type: language
+Subtag: apq
+Description: A-Pucikwar
+Added: 2009-07-29
+%%
+Type: language
+Subtag: apr
+Description: Arop-Lokep
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aps
+Description: Arop-Sissano
+Added: 2009-07-29
+%%
+Type: language
+Subtag: apt
+Description: Apatani
+Added: 2009-07-29
+%%
+Type: language
+Subtag: apu
+Description: Apurinã
+Added: 2009-07-29
+%%
+Type: language
+Subtag: apv
+Description: Alapmunte
+Added: 2009-07-29
+%%
+Type: language
+Subtag: apw
+Description: Western Apache
+Added: 2009-07-29
+%%
+Type: language
+Subtag: apx
+Description: Aputai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: apy
+Description: Apalaí
+Added: 2009-07-29
+%%
+Type: language
+Subtag: apz
+Description: Safeyoka
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aqa
+Description: Alacalufan languages
+Added: 2009-07-29
+Scope: collection
+%%
+Type: language
+Subtag: aqc
+Description: Archi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aqd
+Description: Ampari Dogon
+Added: 2011-08-16
+%%
+Type: language
+Subtag: aqg
+Description: Arigidi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aql
+Description: Algic languages
+Added: 2009-07-29
+Scope: collection
+%%
+Type: language
+Subtag: aqm
+Description: Atohwaim
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aqn
+Description: Northern Alta
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aqp
+Description: Atakapa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aqr
+Description: Arhâ
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aqz
+Description: Akuntsu
+Added: 2010-03-11
+%%
+Type: language
+Subtag: arb
+Description: Standard Arabic
+Added: 2009-07-29
+Macrolanguage: ar
+%%
+Type: language
+Subtag: arc
+Description: Official Aramaic (700-300 BCE)
+Description: Imperial Aramaic (700-300 BCE)
+Added: 2005-10-16
+%%
+Type: language
+Subtag: ard
+Description: Arabana
+Added: 2009-07-29
+%%
+Type: language
+Subtag: are
+Description: Western Arrarnta
+Added: 2009-07-29
+%%
+Type: language
+Subtag: arh
+Description: Arhuaco
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ari
+Description: Arikara
+Added: 2009-07-29
+%%
+Type: language
+Subtag: arj
+Description: Arapaso
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ark
+Description: Arikapú
+Added: 2009-07-29
+%%
+Type: language
+Subtag: arl
+Description: Arabela
+Added: 2009-07-29
+%%
+Type: language
+Subtag: arn
+Description: Mapudungun
+Description: Mapuche
+Added: 2005-10-16
+%%
+Type: language
+Subtag: aro
+Description: Araona
+Added: 2009-07-29
+%%
+Type: language
+Subtag: arp
+Description: Arapaho
+Added: 2005-10-16
+%%
+Type: language
+Subtag: arq
+Description: Algerian Arabic
+Added: 2009-07-29
+Macrolanguage: ar
+%%
+Type: language
+Subtag: arr
+Description: Karo (Brazil)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ars
+Description: Najdi Arabic
+Added: 2009-07-29
+Macrolanguage: ar
+%%
+Type: language
+Subtag: art
+Description: Artificial languages
+Added: 2005-10-16
+Scope: collection
+%%
+Type: language
+Subtag: aru
+Description: Aruá (Amazonas State)
+Description: Arawá
+Added: 2009-07-29
+%%
+Type: language
+Subtag: arv
+Description: Arbore
+Added: 2009-07-29
+%%
+Type: language
+Subtag: arw
+Description: Arawak
+Added: 2005-10-16
+%%
+Type: language
+Subtag: arx
+Description: Aruá (Rodonia State)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ary
+Description: Moroccan Arabic
+Added: 2009-07-29
+Macrolanguage: ar
+%%
+Type: language
+Subtag: arz
+Description: Egyptian Arabic
+Added: 2009-07-29
+Macrolanguage: ar
+%%
+Type: language
+Subtag: asa
+Description: Asu (Tanzania)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: asb
+Description: Assiniboine
+Added: 2009-07-29
+%%
+Type: language
+Subtag: asc
+Description: Casuarina Coast Asmat
+Added: 2009-07-29
+%%
+Type: language
+Subtag: asd
+Description: Asas
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ase
+Description: American Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: asf
+Description: Australian Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: asg
+Description: Cishingini
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ash
+Description: Abishira
+Added: 2009-07-29
+%%
+Type: language
+Subtag: asi
+Description: Buruwai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: asj
+Description: Nsari
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ask
+Description: Ashkun
+Added: 2009-07-29
+%%
+Type: language
+Subtag: asl
+Description: Asilulu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: asn
+Description: Xingú Asuriní
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aso
+Description: Dano
+Added: 2009-07-29
+%%
+Type: language
+Subtag: asp
+Description: Algerian Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: asq
+Description: Austrian Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: asr
+Description: Asuri
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ass
+Description: Ipulo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ast
+Description: Asturian
+Description: Asturleonese
+Description: Bable
+Description: Leonese
+Added: 2005-10-16
+%%
+Type: language
+Subtag: asu
+Description: Tocantins Asurini
+Added: 2009-07-29
+%%
+Type: language
+Subtag: asv
+Description: Asoa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: asw
+Description: Australian Aborigines Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: asx
+Description: Muratayak
+Added: 2009-07-29
+%%
+Type: language
+Subtag: asy
+Description: Yaosakor Asmat
+Added: 2009-07-29
+%%
+Type: language
+Subtag: asz
+Description: As
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ata
+Description: Pele-Ata
+Added: 2009-07-29
+%%
+Type: language
+Subtag: atb
+Description: Zaiwa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: atc
+Description: Atsahuaca
+Added: 2009-07-29
+%%
+Type: language
+Subtag: atd
+Description: Ata Manobo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ate
+Description: Atemble
+Added: 2009-07-29
+%%
+Type: language
+Subtag: atg
+Description: Ivbie North-Okpela-Arhe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ath
+Description: Athapascan languages
+Added: 2005-10-16
+Scope: collection
+%%
+Type: language
+Subtag: ati
+Description: Attié
+Added: 2009-07-29
+%%
+Type: language
+Subtag: atj
+Description: Atikamekw
+Added: 2009-07-29
+%%
+Type: language
+Subtag: atk
+Description: Ati
+Added: 2009-07-29
+%%
+Type: language
+Subtag: atl
+Description: Mt. Iraya Agta
+Added: 2009-07-29
+%%
+Type: language
+Subtag: atm
+Description: Ata
+Added: 2009-07-29
+%%
+Type: language
+Subtag: atn
+Description: Ashtiani
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ato
+Description: Atong
+Added: 2009-07-29
+%%
+Type: language
+Subtag: atp
+Description: Pudtol Atta
+Added: 2009-07-29
+%%
+Type: language
+Subtag: atq
+Description: Aralle-Tabulahan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: atr
+Description: Waimiri-Atroari
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ats
+Description: Gros Ventre
+Added: 2009-07-29
+%%
+Type: language
+Subtag: att
+Description: Pamplona Atta
+Added: 2009-07-29
+%%
+Type: language
+Subtag: atu
+Description: Reel
+Added: 2009-07-29
+%%
+Type: language
+Subtag: atv
+Description: Northern Altai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: atw
+Description: Atsugewi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: atx
+Description: Arutani
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aty
+Description: Aneityum
+Added: 2009-07-29
+%%
+Type: language
+Subtag: atz
+Description: Arta
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aua
+Description: Asumboa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aub
+Description: Alugu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: auc
+Description: Waorani
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aud
+Description: Anuta
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aue
+Description: =/Kx'au//'ein
+Added: 2009-07-29
+%%
+Type: language
+Subtag: auf
+Description: Arauan languages
+Added: 2009-07-29
+Scope: collection
+%%
+Type: language
+Subtag: aug
+Description: Aguna
+Added: 2009-07-29
+%%
+Type: language
+Subtag: auh
+Description: Aushi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aui
+Description: Anuki
+Added: 2009-07-29
+%%
+Type: language
+Subtag: auj
+Description: Awjilah
+Added: 2009-07-29
+%%
+Type: language
+Subtag: auk
+Description: Heyo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aul
+Description: Aulua
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aum
+Description: Asu (Nigeria)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aun
+Description: Molmo One
+Added: 2009-07-29
+%%
+Type: language
+Subtag: auo
+Description: Auyokawa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aup
+Description: Makayam
+Added: 2009-07-29
+%%
+Type: language
+Subtag: auq
+Description: Anus
+Description: Korur
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aur
+Description: Aruek
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aus
+Description: Australian languages
+Added: 2005-10-16
+Scope: collection
+%%
+Type: language
+Subtag: aut
+Description: Austral
+Added: 2009-07-29
+%%
+Type: language
+Subtag: auu
+Description: Auye
+Added: 2009-07-29
+%%
+Type: language
+Subtag: auw
+Description: Awyi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aux
+Description: Aurá
+Added: 2009-07-29
+%%
+Type: language
+Subtag: auy
+Description: Awiyaana
+Added: 2009-07-29
+%%
+Type: language
+Subtag: auz
+Description: Uzbeki Arabic
+Added: 2009-07-29
+Macrolanguage: ar
+%%
+Type: language
+Subtag: avb
+Description: Avau
+Added: 2009-07-29
+%%
+Type: language
+Subtag: avd
+Description: Alviri-Vidari
+Added: 2009-07-29
+%%
+Type: language
+Subtag: avi
+Description: Avikam
+Added: 2009-07-29
+%%
+Type: language
+Subtag: avk
+Description: Kotava
+Added: 2009-07-29
+%%
+Type: language
+Subtag: avl
+Description: Eastern Egyptian Bedawi Arabic
+Added: 2009-07-29
+Macrolanguage: ar
+%%
+Type: language
+Subtag: avm
+Description: Angkamuthi
+Added: 2012-08-12
+%%
+Type: language
+Subtag: avn
+Description: Avatime
+Added: 2009-07-29
+%%
+Type: language
+Subtag: avo
+Description: Agavotaguerra
+Added: 2009-07-29
+%%
+Type: language
+Subtag: avs
+Description: Aushiri
+Added: 2009-07-29
+%%
+Type: language
+Subtag: avt
+Description: Au
+Added: 2009-07-29
+%%
+Type: language
+Subtag: avu
+Description: Avokaya
+Added: 2009-07-29
+%%
+Type: language
+Subtag: avv
+Description: Avá-Canoeiro
+Added: 2009-07-29
+%%
+Type: language
+Subtag: awa
+Description: Awadhi
+Added: 2005-10-16
+%%
+Type: language
+Subtag: awb
+Description: Awa (Papua New Guinea)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: awc
+Description: Cicipu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: awd
+Description: Arawakan languages
+Added: 2009-07-29
+Scope: collection
+%%
+Type: language
+Subtag: awe
+Description: Awetí
+Added: 2009-07-29
+%%
+Type: language
+Subtag: awg
+Description: Anguthimri
+Added: 2012-08-12
+%%
+Type: language
+Subtag: awh
+Description: Awbono
+Added: 2009-07-29
+%%
+Type: language
+Subtag: awi
+Description: Aekyom
+Added: 2009-07-29
+%%
+Type: language
+Subtag: awk
+Description: Awabakal
+Added: 2009-07-29
+%%
+Type: language
+Subtag: awm
+Description: Arawum
+Added: 2009-07-29
+%%
+Type: language
+Subtag: awn
+Description: Awngi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: awo
+Description: Awak
+Added: 2009-07-29
+%%
+Type: language
+Subtag: awr
+Description: Awera
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aws
+Description: South Awyu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: awt
+Description: Araweté
+Added: 2009-07-29
+%%
+Type: language
+Subtag: awu
+Description: Central Awyu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: awv
+Description: Jair Awyu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aww
+Description: Awun
+Added: 2009-07-29
+%%
+Type: language
+Subtag: awx
+Description: Awara
+Added: 2009-07-29
+%%
+Type: language
+Subtag: awy
+Description: Edera Awyu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: axb
+Description: Abipon
+Added: 2009-07-29
+%%
+Type: language
+Subtag: axe
+Description: Ayerrerenge
+Added: 2012-08-12
+%%
+Type: language
+Subtag: axg
+Description: Mato Grosso Arára
+Added: 2009-07-29
+%%
+Type: language
+Subtag: axk
+Description: Yaka (Central African Republic)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: axm
+Description: Middle Armenian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: axx
+Description: Xaragure
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aya
+Description: Awar
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ayb
+Description: Ayizo Gbe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ayc
+Description: Southern Aymara
+Added: 2009-07-29
+Macrolanguage: ay
+%%
+Type: language
+Subtag: ayd
+Description: Ayabadhu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aye
+Description: Ayere
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ayg
+Description: Ginyanga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ayh
+Description: Hadrami Arabic
+Added: 2009-07-29
+Macrolanguage: ar
+%%
+Type: language
+Subtag: ayi
+Description: Leyigha
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ayk
+Description: Akuku
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ayl
+Description: Libyan Arabic
+Added: 2009-07-29
+Macrolanguage: ar
+%%
+Type: language
+Subtag: ayn
+Description: Sanaani Arabic
+Added: 2009-07-29
+Macrolanguage: ar
+%%
+Type: language
+Subtag: ayo
+Description: Ayoreo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ayp
+Description: North Mesopotamian Arabic
+Added: 2009-07-29
+Macrolanguage: ar
+%%
+Type: language
+Subtag: ayq
+Description: Ayi (Papua New Guinea)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ayr
+Description: Central Aymara
+Added: 2009-07-29
+Macrolanguage: ay
+%%
+Type: language
+Subtag: ays
+Description: Sorsogon Ayta
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ayt
+Description: Magbukun Ayta
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ayu
+Description: Ayu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ayx
+Description: Ayi (China)
+Added: 2009-07-29
+Deprecated: 2011-08-16
+Preferred-Value: nun
+%%
+Type: language
+Subtag: ayy
+Description: Tayabas Ayta
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ayz
+Description: Mai Brat
+Added: 2009-07-29
+%%
+Type: language
+Subtag: aza
+Description: Azha
+Added: 2009-07-29
+%%
+Type: language
+Subtag: azb
+Description: South Azerbaijani
+Added: 2009-07-29
+Macrolanguage: az
+%%
+Type: language
+Subtag: azc
+Description: Uto-Aztecan languages
+Added: 2009-07-29
+Scope: collection
+%%
+Type: language
+Subtag: azd
+Description: Eastern Durango Nahuatl
+Added: 2012-08-12
+%%
+Type: language
+Subtag: azg
+Description: San Pedro Amuzgos Amuzgo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: azj
+Description: North Azerbaijani
+Added: 2009-07-29
+Macrolanguage: az
+%%
+Type: language
+Subtag: azm
+Description: Ipalapa Amuzgo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: azn
+Description: Western Durango Nahuatl
+Added: 2012-08-12
+%%
+Type: language
+Subtag: azo
+Description: Awing
+Added: 2009-07-29
+%%
+Type: language
+Subtag: azt
+Description: Faire Atta
+Added: 2009-07-29
+%%
+Type: language
+Subtag: azz
+Description: Highland Puebla Nahuatl
+Added: 2009-07-29
+%%
+Type: language
+Subtag: baa
+Description: Babatana
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bab
+Description: Bainouk-Gunyuño
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bac
+Description: Badui
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bad
+Description: Banda languages
+Added: 2005-10-16
+Scope: collection
+%%
+Type: language
+Subtag: bae
+Description: Baré
+Added: 2009-07-29
+%%
+Type: language
+Subtag: baf
+Description: Nubaca
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bag
+Description: Tuki
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bah
+Description: Bahamas Creole English
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bai
+Description: Bamileke languages
+Added: 2005-10-16
+Scope: collection
+%%
+Type: language
+Subtag: baj
+Description: Barakai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bal
+Description: Baluchi
+Added: 2005-10-16
+Scope: macrolanguage
+%%
+Type: language
+Subtag: ban
+Description: Balinese
+Added: 2005-10-16
+%%
+Type: language
+Subtag: bao
+Description: Waimaha
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bap
+Description: Bantawa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bar
+Description: Bavarian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bas
+Description: Basa (Cameroon)
+Added: 2005-10-16
+%%
+Type: language
+Subtag: bat
+Description: Baltic languages
+Added: 2005-10-16
+Scope: collection
+%%
+Type: language
+Subtag: bau
+Description: Bada (Nigeria)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bav
+Description: Vengo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: baw
+Description: Bambili-Bambui
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bax
+Description: Bamun
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bay
+Description: Batuley
+Added: 2009-07-29
+%%
+Type: language
+Subtag: baz
+Description: Tunen
+Added: 2009-07-29
+Deprecated: 2012-08-12
+Comments: see nvo, tvu
+%%
+Type: language
+Subtag: bba
+Description: Baatonum
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bbb
+Description: Barai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bbc
+Description: Batak Toba
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bbd
+Description: Bau
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bbe
+Description: Bangba
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bbf
+Description: Baibai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bbg
+Description: Barama
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bbh
+Description: Bugan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bbi
+Description: Barombi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bbj
+Description: Ghomálá'
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bbk
+Description: Babanki
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bbl
+Description: Bats
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bbm
+Description: Babango
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bbn
+Description: Uneapa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bbo
+Description: Northern Bobo Madaré
+Description: Konabéré
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bbp
+Description: West Central Banda
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bbq
+Description: Bamali
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bbr
+Description: Girawa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bbs
+Description: Bakpinka
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bbt
+Description: Mburku
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bbu
+Description: Kulung (Nigeria)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bbv
+Description: Karnai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bbw
+Description: Baba
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bbx
+Description: Bubia
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bby
+Description: Befang
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bbz
+Description: Babalia Creole Arabic
+Added: 2009-07-29
+Macrolanguage: ar
+%%
+Type: language
+Subtag: bca
+Description: Central Bai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bcb
+Description: Bainouk-Samik
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bcc
+Description: Southern Balochi
+Added: 2009-07-29
+Macrolanguage: bal
+%%
+Type: language
+Subtag: bcd
+Description: North Babar
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bce
+Description: Bamenyam
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bcf
+Description: Bamu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bcg
+Description: Baga Binari
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bch
+Description: Bariai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bci
+Description: Baoulé
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bcj
+Description: Bardi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bck
+Description: Bunaba
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bcl
+Description: Central Bikol
+Added: 2009-07-29
+Macrolanguage: bik
+%%
+Type: language
+Subtag: bcm
+Description: Bannoni
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bcn
+Description: Bali (Nigeria)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bco
+Description: Kaluli
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bcp
+Description: Bali (Democratic Republic of Congo)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bcq
+Description: Bench
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bcr
+Description: Babine
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bcs
+Description: Kohumono
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bct
+Description: Bendi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bcu
+Description: Awad Bing
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bcv
+Description: Shoo-Minda-Nye
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bcw
+Description: Bana
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bcy
+Description: Bacama
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bcz
+Description: Bainouk-Gunyaamolo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bda
+Description: Bayot
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bdb
+Description: Basap
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bdc
+Description: Emberá-Baudó
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bdd
+Description: Bunama
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bde
+Description: Bade
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bdf
+Description: Biage
+Added: 2010-03-11
+%%
+Type: language
+Subtag: bdg
+Description: Bonggi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bdh
+Description: Baka (Sudan)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bdi
+Description: Burun
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bdj
+Description: Bai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bdk
+Description: Budukh
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bdl
+Description: Indonesian Bajau
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bdm
+Description: Buduma
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bdn
+Description: Baldemu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bdo
+Description: Morom
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bdp
+Description: Bende
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bdq
+Description: Bahnar
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bdr
+Description: West Coast Bajau
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bds
+Description: Burunge
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bdt
+Description: Bokoto
+Added: 2009-07-29
+Macrolanguage: gba
+%%
+Type: language
+Subtag: bdu
+Description: Oroko
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bdv
+Description: Bodo Parja
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bdw
+Description: Baham
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bdx
+Description: Budong-Budong
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bdy
+Description: Bandjalang
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bdz
+Description: Badeshi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bea
+Description: Beaver
+Added: 2009-07-29
+%%
+Type: language
+Subtag: beb
+Description: Bebele
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bec
+Description: Iceve-Maci
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bed
+Description: Bedoanas
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bee
+Description: Byangsi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bef
+Description: Benabena
+Added: 2009-07-29
+%%
+Type: language
+Subtag: beg
+Description: Belait
+Added: 2009-07-29
+%%
+Type: language
+Subtag: beh
+Description: Biali
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bei
+Description: Bekati'
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bej
+Description: Beja
+Description: Bedawiyet
+Added: 2005-10-16
+%%
+Type: language
+Subtag: bek
+Description: Bebeli
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bem
+Description: Bemba (Zambia)
+Added: 2005-10-16
+%%
+Type: language
+Subtag: beo
+Description: Beami
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bep
+Description: Besoa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: beq
+Description: Beembe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ber
+Description: Berber languages
+Added: 2005-10-16
+Scope: collection
+%%
+Type: language
+Subtag: bes
+Description: Besme
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bet
+Description: Guiberoua Béte
+Added: 2009-07-29
+%%
+Type: language
+Subtag: beu
+Description: Blagar
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bev
+Description: Daloa Bété
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bew
+Description: Betawi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bex
+Description: Jur Modo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bey
+Description: Beli (Papua New Guinea)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bez
+Description: Bena (Tanzania)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bfa
+Description: Bari
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bfb
+Description: Pauri Bareli
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bfc
+Description: Northern Bai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bfd
+Description: Bafut
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bfe
+Description: Betaf
+Description: Tena
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bff
+Description: Bofi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bfg
+Description: Busang Kayan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bfh
+Description: Blafe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bfi
+Description: British Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bfj
+Description: Bafanji
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bfk
+Description: Ban Khor Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bfl
+Description: Banda-Ndélé
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bfm
+Description: Mmen
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bfn
+Description: Bunak
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bfo
+Description: Malba Birifor
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bfp
+Description: Beba
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bfq
+Description: Badaga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bfr
+Description: Bazigar
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bfs
+Description: Southern Bai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bft
+Description: Balti
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bfu
+Description: Gahri
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bfw
+Description: Bondo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bfx
+Description: Bantayanon
+Added: 2010-03-11
+%%
+Type: language
+Subtag: bfy
+Description: Bagheli
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bfz
+Description: Mahasu Pahari
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bga
+Description: Gwamhi-Wuri
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bgb
+Description: Bobongko
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bgc
+Description: Haryanvi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bgd
+Description: Rathwi Bareli
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bge
+Description: Bauria
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bgf
+Description: Bangandu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bgg
+Description: Bugun
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bgi
+Description: Giangan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bgj
+Description: Bangolan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bgk
+Description: Bit
+Description: Buxinhua
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bgl
+Description: Bo (Laos)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bgm
+Description: Baga Mboteni
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bgn
+Description: Western Balochi
+Added: 2009-07-29
+Macrolanguage: bal
+%%
+Type: language
+Subtag: bgo
+Description: Baga Koga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bgp
+Description: Eastern Balochi
+Added: 2009-07-29
+Macrolanguage: bal
+%%
+Type: language
+Subtag: bgq
+Description: Bagri
+Added: 2009-07-29
+Macrolanguage: raj
+%%
+Type: language
+Subtag: bgr
+Description: Bawm Chin
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bgs
+Description: Tagabawa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bgt
+Description: Bughotu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bgu
+Description: Mbongno
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bgv
+Description: Warkay-Bipim
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bgw
+Description: Bhatri
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bgx
+Description: Balkan Gagauz Turkish
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bgy
+Description: Benggoi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bgz
+Description: Banggai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bha
+Description: Bharia
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bhb
+Description: Bhili
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bhc
+Description: Biga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bhd
+Description: Bhadrawahi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bhe
+Description: Bhaya
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bhf
+Description: Odiai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bhg
+Description: Binandere
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bhh
+Description: Bukharic
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bhi
+Description: Bhilali
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bhj
+Description: Bahing
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bhk
+Description: Albay Bicolano
+Added: 2009-07-29
+Deprecated: 2010-03-11
+Macrolanguage: bik
+Comments: see fbl, lbl, rbl, ubl
+%%
+Type: language
+Subtag: bhl
+Description: Bimin
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bhm
+Description: Bathari
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bhn
+Description: Bohtan Neo-Aramaic
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bho
+Description: Bhojpuri
+Added: 2005-10-16
+%%
+Type: language
+Subtag: bhp
+Description: Bima
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bhq
+Description: Tukang Besi South
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bhr
+Description: Bara Malagasy
+Added: 2009-07-29
+Macrolanguage: mg
+%%
+Type: language
+Subtag: bhs
+Description: Buwal
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bht
+Description: Bhattiyali
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bhu
+Description: Bhunjia
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bhv
+Description: Bahau
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bhw
+Description: Biak
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bhx
+Description: Bhalay
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bhy
+Description: Bhele
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bhz
+Description: Bada (Indonesia)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bia
+Description: Badimaya
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bib
+Description: Bissa
+Description: Bisa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bic
+Description: Bikaru
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bid
+Description: Bidiyo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bie
+Description: Bepour
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bif
+Description: Biafada
+Added: 2009-07-29
+%%
+Type: language
+Subtag: big
+Description: Biangai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bij
+Description: Vaghat-Ya-Bijim-Legeri
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bik
+Description: Bikol
+Added: 2005-10-16
+Scope: macrolanguage
+%%
+Type: language
+Subtag: bil
+Description: Bile
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bim
+Description: Bimoba
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bin
+Description: Bini
+Description: Edo
+Added: 2005-10-16
+%%
+Type: language
+Subtag: bio
+Description: Nai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bip
+Description: Bila
+Added: 2009-07-29
+%%
+Type: language
+Subtag: biq
+Description: Bipi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bir
+Description: Bisorio
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bit
+Description: Berinomo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: biu
+Description: Biete
+Added: 2009-07-29
+%%
+Type: language
+Subtag: biv
+Description: Southern Birifor
+Added: 2009-07-29
+%%
+Type: language
+Subtag: biw
+Description: Kol (Cameroon)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bix
+Description: Bijori
+Added: 2009-07-29
+%%
+Type: language
+Subtag: biy
+Description: Birhor
+Added: 2009-07-29
+%%
+Type: language
+Subtag: biz
+Description: Baloi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bja
+Description: Budza
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bjb
+Description: Banggarla
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bjc
+Description: Bariji
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bjd
+Description: Bandjigali
+Added: 2009-07-29
+Deprecated: 2012-08-12
+Preferred-Value: drl
+%%
+Type: language
+Subtag: bje
+Description: Biao-Jiao Mien
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bjf
+Description: Barzani Jewish Neo-Aramaic
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bjg
+Description: Bidyogo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bjh
+Description: Bahinemo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bji
+Description: Burji
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bjj
+Description: Kanauji
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bjk
+Description: Barok
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bjl
+Description: Bulu (Papua New Guinea)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bjm
+Description: Bajelani
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bjn
+Description: Banjar
+Added: 2009-07-29
+Macrolanguage: ms
+%%
+Type: language
+Subtag: bjo
+Description: Mid-Southern Banda
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bjq
+Description: Southern Betsimisaraka Malagasy
+Added: 2009-07-29
+Deprecated: 2011-08-16
+Macrolanguage: mg
+Comments: see bzc, tkg
+%%
+Type: language
+Subtag: bjr
+Description: Binumarien
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bjs
+Description: Bajan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bjt
+Description: Balanta-Ganja
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bju
+Description: Busuu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bjv
+Description: Bedjond
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bjw
+Description: Bakwé
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bjx
+Description: Banao Itneg
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bjy
+Description: Bayali
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bjz
+Description: Baruga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bka
+Description: Kyak
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bkb
+Description: Finallig
+Added: 2009-07-29
+Deprecated: 2010-03-11
+Comments: see ebk, obk
+%%
+Type: language
+Subtag: bkc
+Description: Baka (Cameroon)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bkd
+Description: Binukid
+Description: Talaandig
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bkf
+Description: Beeke
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bkg
+Description: Buraka
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bkh
+Description: Bakoko
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bki
+Description: Baki
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bkj
+Description: Pande
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bkk
+Description: Brokskat
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bkl
+Description: Berik
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bkm
+Description: Kom (Cameroon)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bkn
+Description: Bukitan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bko
+Description: Kwa'
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bkp
+Description: Boko (Democratic Republic of Congo)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bkq
+Description: Bakairí
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bkr
+Description: Bakumpai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bks
+Description: Northern Sorsoganon
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bkt
+Description: Boloki
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bku
+Description: Buhid
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bkv
+Description: Bekwarra
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bkw
+Description: Bekwel
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bkx
+Description: Baikeno
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bky
+Description: Bokyi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bkz
+Description: Bungku
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bla
+Description: Siksika
+Added: 2005-10-16
+%%
+Type: language
+Subtag: blb
+Description: Bilua
+Added: 2009-07-29
+%%
+Type: language
+Subtag: blc
+Description: Bella Coola
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bld
+Description: Bolango
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ble
+Description: Balanta-Kentohe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: blf
+Description: Buol
+Added: 2009-07-29
+%%
+Type: language
+Subtag: blg
+Description: Balau
+Added: 2009-07-29
+%%
+Type: language
+Subtag: blh
+Description: Kuwaa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bli
+Description: Bolia
+Added: 2009-07-29
+%%
+Type: language
+Subtag: blj
+Description: Bolongan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: blk
+Description: Pa'o Karen
+Description: Pa'O
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bll
+Description: Biloxi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: blm
+Description: Beli (Sudan)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bln
+Description: Southern Catanduanes Bikol
+Added: 2009-07-29
+Macrolanguage: bik
+%%
+Type: language
+Subtag: blo
+Description: Anii
+Added: 2009-07-29
+%%
+Type: language
+Subtag: blp
+Description: Blablanga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: blq
+Description: Baluan-Pam
+Added: 2009-07-29
+%%
+Type: language
+Subtag: blr
+Description: Blang
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bls
+Description: Balaesang
+Added: 2009-07-29
+%%
+Type: language
+Subtag: blt
+Description: Tai Dam
+Added: 2009-07-29
+%%
+Type: language
+Subtag: blv
+Description: Bolo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: blw
+Description: Balangao
+Added: 2009-07-29
+%%
+Type: language
+Subtag: blx
+Description: Mag-Indi Ayta
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bly
+Description: Notre
+Added: 2009-07-29
+%%
+Type: language
+Subtag: blz
+Description: Balantak
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bma
+Description: Lame
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bmb
+Description: Bembe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bmc
+Description: Biem
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bmd
+Description: Baga Manduri
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bme
+Description: Limassa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bmf
+Description: Bom
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bmg
+Description: Bamwe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bmh
+Description: Kein
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bmi
+Description: Bagirmi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bmj
+Description: Bote-Majhi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bmk
+Description: Ghayavi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bml
+Description: Bomboli
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bmm
+Description: Northern Betsimisaraka Malagasy
+Added: 2009-07-29
+Macrolanguage: mg
+%%
+Type: language
+Subtag: bmn
+Description: Bina (Papua New Guinea)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bmo
+Description: Bambalang
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bmp
+Description: Bulgebi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bmq
+Description: Bomu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bmr
+Description: Muinane
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bms
+Description: Bilma Kanuri
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bmt
+Description: Biao Mon
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bmu
+Description: Somba-Siawari
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bmv
+Description: Bum
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bmw
+Description: Bomwali
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bmx
+Description: Baimak
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bmy
+Description: Bemba (Democratic Republic of Congo)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bmz
+Description: Baramu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bna
+Description: Bonerate
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bnb
+Description: Bookan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bnc
+Description: Bontok
+Added: 2009-07-29
+Scope: macrolanguage
+%%
+Type: language
+Subtag: bnd
+Description: Banda (Indonesia)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bne
+Description: Bintauna
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bnf
+Description: Masiwang
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bng
+Description: Benga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bni
+Description: Bangi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bnj
+Description: Eastern Tawbuid
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bnk
+Description: Bierebo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bnl
+Description: Boon
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bnm
+Description: Batanga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bnn
+Description: Bunun
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bno
+Description: Bantoanon
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bnp
+Description: Bola
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bnq
+Description: Bantik
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bnr
+Description: Butmas-Tur
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bns
+Description: Bundeli
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bnt
+Description: Bantu languages
+Added: 2005-10-16
+Scope: collection
+%%
+Type: language
+Subtag: bnu
+Description: Bentong
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bnv
+Description: Bonerif
+Description: Beneraf
+Description: Edwas
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bnw
+Description: Bisis
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bnx
+Description: Bangubangu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bny
+Description: Bintulu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bnz
+Description: Beezen
+Added: 2009-07-29
+%%
+Type: language
+Subtag: boa
+Description: Bora
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bob
+Description: Aweer
+Added: 2009-07-29
+%%
+Type: language
+Subtag: boe
+Description: Mundabli
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bof
+Description: Bolon
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bog
+Description: Bamako Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: boh
+Description: Boma
+Added: 2009-07-29
+%%
+Type: language
+Subtag: boi
+Description: Barbareño
+Added: 2009-07-29
+%%
+Type: language
+Subtag: boj
+Description: Anjam
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bok
+Description: Bonjo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bol
+Description: Bole
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bom
+Description: Berom
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bon
+Description: Bine
+Added: 2009-07-29
+%%
+Type: language
+Subtag: boo
+Description: Tiemacèwè Bozo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bop
+Description: Bonkiman
+Added: 2009-07-29
+%%
+Type: language
+Subtag: boq
+Description: Bogaya
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bor
+Description: Borôro
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bot
+Description: Bongo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bou
+Description: Bondei
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bov
+Description: Tuwuli
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bow
+Description: Rema
+Added: 2009-07-29
+%%
+Type: language
+Subtag: box
+Description: Buamu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: boy
+Description: Bodo (Central African Republic)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: boz
+Description: Tiéyaxo Bozo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bpa
+Description: Dakaka
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bpb
+Description: Barbacoas
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bpd
+Description: Banda-Banda
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bpg
+Description: Bonggo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bph
+Description: Botlikh
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bpi
+Description: Bagupi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bpj
+Description: Binji
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bpk
+Description: Orowe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bpl
+Description: Broome Pearling Lugger Pidgin
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bpm
+Description: Biyom
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bpn
+Description: Dzao Min
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bpo
+Description: Anasi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bpp
+Description: Kaure
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bpq
+Description: Banda Malay
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bpr
+Description: Koronadal Blaan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bps
+Description: Sarangani Blaan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bpt
+Description: Barrow Point
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bpu
+Description: Bongu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bpv
+Description: Bian Marind
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bpw
+Description: Bo (Papua New Guinea)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bpx
+Description: Palya Bareli
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bpy
+Description: Bishnupriya
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bpz
+Description: Bilba
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bqa
+Description: Tchumbuli
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bqb
+Description: Bagusa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bqc
+Description: Boko (Benin)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bqd
+Description: Bung
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bqf
+Description: Baga Kaloum
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bqg
+Description: Bago-Kusuntu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bqh
+Description: Baima
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bqi
+Description: Bakhtiari
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bqj
+Description: Bandial
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bqk
+Description: Banda-Mbrès
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bql
+Description: Bilakura
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bqm
+Description: Wumboko
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bqn
+Description: Bulgarian Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bqo
+Description: Balo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bqp
+Description: Busa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bqq
+Description: Biritai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bqr
+Description: Burusu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bqs
+Description: Bosngun
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bqt
+Description: Bamukumbit
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bqu
+Description: Boguru
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bqv
+Description: Koro Wachi
+Description: Begbere-Ejar
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bqw
+Description: Buru (Nigeria)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bqx
+Description: Baangi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bqy
+Description: Bengkala Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bqz
+Description: Bakaka
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bra
+Description: Braj
+Added: 2005-10-16
+%%
+Type: language
+Subtag: brb
+Description: Lave
+Added: 2009-07-29
+%%
+Type: language
+Subtag: brc
+Description: Berbice Creole Dutch
+Added: 2009-07-29
+%%
+Type: language
+Subtag: brd
+Description: Baraamu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: brf
+Description: Bera
+Added: 2009-07-29
+%%
+Type: language
+Subtag: brg
+Description: Baure
+Added: 2009-07-29
+%%
+Type: language
+Subtag: brh
+Description: Brahui
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bri
+Description: Mokpwe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: brj
+Description: Bieria
+Added: 2009-07-29
+%%
+Type: language
+Subtag: brk
+Description: Birked
+Added: 2009-07-29
+%%
+Type: language
+Subtag: brl
+Description: Birwa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: brm
+Description: Barambu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: brn
+Description: Boruca
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bro
+Description: Brokkat
+Added: 2009-07-29
+%%
+Type: language
+Subtag: brp
+Description: Barapasi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: brq
+Description: Breri
+Added: 2009-07-29
+%%
+Type: language
+Subtag: brr
+Description: Birao
+Added: 2009-07-29
+%%
+Type: language
+Subtag: brs
+Description: Baras
+Added: 2009-07-29
+%%
+Type: language
+Subtag: brt
+Description: Bitare
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bru
+Description: Eastern Bru
+Added: 2009-07-29
+%%
+Type: language
+Subtag: brv
+Description: Western Bru
+Added: 2009-07-29
+%%
+Type: language
+Subtag: brw
+Description: Bellari
+Added: 2009-07-29
+%%
+Type: language
+Subtag: brx
+Description: Bodo (India)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bry
+Description: Burui
+Added: 2009-07-29
+%%
+Type: language
+Subtag: brz
+Description: Bilbil
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bsa
+Description: Abinomn
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bsb
+Description: Brunei Bisaya
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bsc
+Description: Bassari
+Description: Oniyan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bse
+Description: Wushi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bsf
+Description: Bauchi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bsg
+Description: Bashkardi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bsh
+Description: Kati
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bsi
+Description: Bassossi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bsj
+Description: Bangwinji
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bsk
+Description: Burushaski
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bsl
+Description: Basa-Gumna
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bsm
+Description: Busami
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bsn
+Description: Barasana-Eduria
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bso
+Description: Buso
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bsp
+Description: Baga Sitemu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bsq
+Description: Bassa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bsr
+Description: Bassa-Kontagora
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bss
+Description: Akoose
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bst
+Description: Basketo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bsu
+Description: Bahonsuai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bsv
+Description: Baga Sobané
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bsw
+Description: Baiso
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bsx
+Description: Yangkam
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bsy
+Description: Sabah Bisaya
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bta
+Description: Bata
+Added: 2009-07-29
+%%
+Type: language
+Subtag: btb
+Description: Beti (Cameroon)
+Added: 2009-07-29
+Deprecated: 2010-03-11
+Comments: see beb, bum, bxp, eto, ewo, fan, mct
+%%
+Type: language
+Subtag: btc
+Description: Bati (Cameroon)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: btd
+Description: Batak Dairi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bte
+Description: Gamo-Ningi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: btf
+Description: Birgit
+Added: 2009-07-29
+%%
+Type: language
+Subtag: btg
+Description: Gagnoa Bété
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bth
+Description: Biatah Bidayuh
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bti
+Description: Burate
+Added: 2009-07-29
+%%
+Type: language
+Subtag: btj
+Description: Bacanese Malay
+Added: 2009-07-29
+Macrolanguage: ms
+%%
+Type: language
+Subtag: btk
+Description: Batak languages
+Added: 2005-10-16
+Scope: collection
+%%
+Type: language
+Subtag: btl
+Description: Bhatola
+Added: 2009-07-29
+%%
+Type: language
+Subtag: btm
+Description: Batak Mandailing
+Added: 2009-07-29
+%%
+Type: language
+Subtag: btn
+Description: Ratagnon
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bto
+Description: Rinconada Bikol
+Added: 2009-07-29
+Macrolanguage: bik
+%%
+Type: language
+Subtag: btp
+Description: Budibud
+Added: 2009-07-29
+%%
+Type: language
+Subtag: btq
+Description: Batek
+Added: 2009-07-29
+%%
+Type: language
+Subtag: btr
+Description: Baetora
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bts
+Description: Batak Simalungun
+Added: 2009-07-29
+%%
+Type: language
+Subtag: btt
+Description: Bete-Bendi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: btu
+Description: Batu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: btv
+Description: Bateri
+Added: 2009-07-29
+%%
+Type: language
+Subtag: btw
+Description: Butuanon
+Added: 2009-07-29
+%%
+Type: language
+Subtag: btx
+Description: Batak Karo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bty
+Description: Bobot
+Added: 2009-07-29
+%%
+Type: language
+Subtag: btz
+Description: Batak Alas-Kluet
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bua
+Description: Buriat
+Added: 2005-10-16
+Scope: macrolanguage
+%%
+Type: language
+Subtag: bub
+Description: Bua
+Added: 2009-07-29
+%%
+Type: language
+Subtag: buc
+Description: Bushi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bud
+Description: Ntcham
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bue
+Description: Beothuk
+Added: 2009-07-29
+%%
+Type: language
+Subtag: buf
+Description: Bushoong
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bug
+Description: Buginese
+Added: 2005-10-16
+%%
+Type: language
+Subtag: buh
+Description: Younuo Bunu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bui
+Description: Bongili
+Added: 2009-07-29
+%%
+Type: language
+Subtag: buj
+Description: Basa-Gurmana
+Added: 2009-07-29
+%%
+Type: language
+Subtag: buk
+Description: Bugawac
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bum
+Description: Bulu (Cameroon)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bun
+Description: Sherbro
+Added: 2009-07-29
+%%
+Type: language
+Subtag: buo
+Description: Terei
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bup
+Description: Busoa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: buq
+Description: Brem
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bus
+Description: Bokobaru
+Added: 2009-07-29
+%%
+Type: language
+Subtag: but
+Description: Bungain
+Added: 2009-07-29
+%%
+Type: language
+Subtag: buu
+Description: Budu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: buv
+Description: Bun
+Added: 2009-07-29
+%%
+Type: language
+Subtag: buw
+Description: Bubi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bux
+Description: Boghom
+Added: 2009-07-29
+%%
+Type: language
+Subtag: buy
+Description: Bullom So
+Added: 2009-07-29
+%%
+Type: language
+Subtag: buz
+Description: Bukwen
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bva
+Description: Barein
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bvb
+Description: Bube
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bvc
+Description: Baelelea
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bvd
+Description: Baeggu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bve
+Description: Berau Malay
+Added: 2009-07-29
+Macrolanguage: ms
+%%
+Type: language
+Subtag: bvf
+Description: Boor
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bvg
+Description: Bonkeng
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bvh
+Description: Bure
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bvi
+Description: Belanda Viri
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bvj
+Description: Baan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bvk
+Description: Bukat
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bvl
+Description: Bolivian Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bvm
+Description: Bamunka
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bvn
+Description: Buna
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bvo
+Description: Bolgo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bvq
+Description: Birri
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bvr
+Description: Burarra
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bvt
+Description: Bati (Indonesia)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bvu
+Description: Bukit Malay
+Added: 2009-07-29
+Macrolanguage: ms
+%%
+Type: language
+Subtag: bvv
+Description: Baniva
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bvw
+Description: Boga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bvx
+Description: Dibole
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bvy
+Description: Baybayanon
+Added: 2010-03-11
+%%
+Type: language
+Subtag: bvz
+Description: Bauzi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bwa
+Description: Bwatoo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bwb
+Description: Namosi-Naitasiri-Serua
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bwc
+Description: Bwile
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bwd
+Description: Bwaidoka
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bwe
+Description: Bwe Karen
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bwf
+Description: Boselewa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bwg
+Description: Barwe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bwh
+Description: Bishuo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bwi
+Description: Baniwa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bwj
+Description: Láá Láá Bwamu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bwk
+Description: Bauwaki
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bwl
+Description: Bwela
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bwm
+Description: Biwat
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bwn
+Description: Wunai Bunu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bwo
+Description: Boro (Ethiopia)
+Description: Borna (Ethiopia)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bwp
+Description: Mandobo Bawah
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bwq
+Description: Southern Bobo Madaré
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bwr
+Description: Bura-Pabir
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bws
+Description: Bomboma
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bwt
+Description: Bafaw-Balong
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bwu
+Description: Buli (Ghana)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bww
+Description: Bwa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bwx
+Description: Bu-Nao Bunu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bwy
+Description: Cwi Bwamu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bwz
+Description: Bwisi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bxa
+Description: Bauro
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bxb
+Description: Belanda Bor
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bxc
+Description: Molengue
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bxd
+Description: Pela
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bxe
+Description: Birale
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bxf
+Description: Bilur
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bxg
+Description: Bangala
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bxh
+Description: Buhutu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bxi
+Description: Pirlatapa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bxj
+Description: Bayungu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bxk
+Description: Bukusu
+Description: Lubukusu
+Added: 2009-07-29
+Macrolanguage: luy
+%%
+Type: language
+Subtag: bxl
+Description: Jalkunan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bxm
+Description: Mongolia Buriat
+Added: 2009-07-29
+Macrolanguage: bua
+%%
+Type: language
+Subtag: bxn
+Description: Burduna
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bxo
+Description: Barikanchi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bxp
+Description: Bebil
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bxq
+Description: Beele
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bxr
+Description: Russia Buriat
+Added: 2009-07-29
+Macrolanguage: bua
+%%
+Type: language
+Subtag: bxs
+Description: Busam
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bxu
+Description: China Buriat
+Added: 2009-07-29
+Macrolanguage: bua
+%%
+Type: language
+Subtag: bxv
+Description: Berakou
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bxw
+Description: Bankagooma
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bxx
+Description: Borna (Democratic Republic of Congo)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bxz
+Description: Binahari
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bya
+Description: Batak
+Added: 2009-07-29
+%%
+Type: language
+Subtag: byb
+Description: Bikya
+Added: 2009-07-29
+%%
+Type: language
+Subtag: byc
+Description: Ubaghara
+Added: 2009-07-29
+%%
+Type: language
+Subtag: byd
+Description: Benyadu'
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bye
+Description: Pouye
+Added: 2009-07-29
+%%
+Type: language
+Subtag: byf
+Description: Bete
+Added: 2009-07-29
+%%
+Type: language
+Subtag: byg
+Description: Baygo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: byh
+Description: Bhujel
+Added: 2009-07-29
+%%
+Type: language
+Subtag: byi
+Description: Buyu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: byj
+Description: Bina (Nigeria)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: byk
+Description: Biao
+Added: 2009-07-29
+%%
+Type: language
+Subtag: byl
+Description: Bayono
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bym
+Description: Bidyara
+Added: 2009-07-29
+%%
+Type: language
+Subtag: byn
+Description: Bilin
+Description: Blin
+Added: 2005-10-16
+%%
+Type: language
+Subtag: byo
+Description: Biyo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: byp
+Description: Bumaji
+Added: 2009-07-29
+%%
+Type: language
+Subtag: byq
+Description: Basay
+Added: 2009-07-29
+%%
+Type: language
+Subtag: byr
+Description: Baruya
+Description: Yipma
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bys
+Description: Burak
+Added: 2009-07-29
+%%
+Type: language
+Subtag: byt
+Description: Berti
+Added: 2009-07-29
+%%
+Type: language
+Subtag: byv
+Description: Medumba
+Added: 2009-07-29
+%%
+Type: language
+Subtag: byw
+Description: Belhariya
+Added: 2009-07-29
+%%
+Type: language
+Subtag: byx
+Description: Qaqet
+Added: 2009-07-29
+%%
+Type: language
+Subtag: byy
+Description: Buya
+Added: 2009-07-29
+%%
+Type: language
+Subtag: byz
+Description: Banaro
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bza
+Description: Bandi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bzb
+Description: Andio
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bzc
+Description: Southern Betsimisaraka Malagasy
+Added: 2011-08-16
+Macrolanguage: mg
+%%
+Type: language
+Subtag: bzd
+Description: Bribri
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bze
+Description: Jenaama Bozo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bzf
+Description: Boikin
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bzg
+Description: Babuza
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bzh
+Description: Mapos Buang
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bzi
+Description: Bisu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bzj
+Description: Belize Kriol English
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bzk
+Description: Nicaragua Creole English
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bzl
+Description: Boano (Sulawesi)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bzm
+Description: Bolondo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bzn
+Description: Boano (Maluku)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bzo
+Description: Bozaba
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bzp
+Description: Kemberano
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bzq
+Description: Buli (Indonesia)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bzr
+Description: Biri
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bzs
+Description: Brazilian Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bzt
+Description: Brithenig
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bzu
+Description: Burmeso
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bzv
+Description: Bebe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bzw
+Description: Basa (Nigeria)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bzx
+Description: Kɛlɛngaxo Bozo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bzy
+Description: Obanliku
+Added: 2009-07-29
+%%
+Type: language
+Subtag: bzz
+Description: Evant
+Added: 2009-07-29
+%%
+Type: language
+Subtag: caa
+Description: Chortí
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cab
+Description: Garifuna
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cac
+Description: Chuj
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cad
+Description: Caddo
+Added: 2005-10-16
+%%
+Type: language
+Subtag: cae
+Description: Lehar
+Description: Laalaa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: caf
+Description: Southern Carrier
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cag
+Description: Nivaclé
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cah
+Description: Cahuarano
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cai
+Description: Central American Indian languages
+Added: 2005-10-16
+Scope: collection
+%%
+Type: language
+Subtag: caj
+Description: Chané
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cak
+Description: Kaqchikel
+Description: Cakchiquel
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cal
+Description: Carolinian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cam
+Description: Cemuhî
+Added: 2009-07-29
+%%
+Type: language
+Subtag: can
+Description: Chambri
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cao
+Description: Chácobo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cap
+Description: Chipaya
+Added: 2009-07-29
+%%
+Type: language
+Subtag: caq
+Description: Car Nicobarese
+Added: 2009-07-29
+%%
+Type: language
+Subtag: car
+Description: Galibi Carib
+Added: 2005-10-16
+%%
+Type: language
+Subtag: cas
+Description: Tsimané
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cau
+Description: Caucasian languages
+Added: 2005-10-16
+Scope: collection
+%%
+Type: language
+Subtag: cav
+Description: Cavineña
+Added: 2009-07-29
+%%
+Type: language
+Subtag: caw
+Description: Callawalla
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cax
+Description: Chiquitano
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cay
+Description: Cayuga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: caz
+Description: Canichana
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cba
+Description: Chibchan languages
+Added: 2009-07-29
+Scope: collection
+%%
+Type: language
+Subtag: cbb
+Description: Cabiyarí
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cbc
+Description: Carapana
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cbd
+Description: Carijona
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cbe
+Description: Chipiajes
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cbg
+Description: Chimila
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cbh
+Description: Cagua
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cbi
+Description: Chachi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cbj
+Description: Ede Cabe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cbk
+Description: Chavacano
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cbl
+Description: Bualkhaw Chin
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cbn
+Description: Nyahkur
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cbo
+Description: Izora
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cbr
+Description: Cashibo-Cacataibo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cbs
+Description: Cashinahua
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cbt
+Description: Chayahuita
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cbu
+Description: Candoshi-Shapra
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cbv
+Description: Cacua
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cbw
+Description: Kinabalian
+Added: 2010-03-11
+%%
+Type: language
+Subtag: cby
+Description: Carabayo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cca
+Description: Cauca
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ccc
+Description: Chamicuro
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ccd
+Description: Cafundo Creole
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cce
+Description: Chopi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ccg
+Description: Samba Daka
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cch
+Description: Atsam
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ccj
+Description: Kasanga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ccl
+Description: Cutchi-Swahili
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ccm
+Description: Malaccan Creole Malay
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ccn
+Description: North Caucasian languages
+Added: 2009-07-29
+Scope: collection
+%%
+Type: language
+Subtag: cco
+Description: Comaltepec Chinantec
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ccp
+Description: Chakma
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ccq
+Description: Chaungtha
+Added: 2009-07-29
+Deprecated: 2012-08-12
+Preferred-Value: rki
+%%
+Type: language
+Subtag: ccr
+Description: Cacaopera
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ccs
+Description: South Caucasian languages
+Added: 2009-07-29
+Scope: collection
+%%
+Type: language
+Subtag: cda
+Description: Choni
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cdc
+Description: Chadic languages
+Added: 2009-07-29
+Scope: collection
+%%
+Type: language
+Subtag: cdd
+Description: Caddoan languages
+Added: 2009-07-29
+Scope: collection
+%%
+Type: language
+Subtag: cde
+Description: Chenchu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cdf
+Description: Chiru
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cdg
+Description: Chamari
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cdh
+Description: Chambeali
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cdi
+Description: Chodri
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cdj
+Description: Churahi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cdm
+Description: Chepang
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cdn
+Description: Chaudangsi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cdo
+Description: Min Dong Chinese
+Added: 2009-07-29
+Macrolanguage: zh
+%%
+Type: language
+Subtag: cdr
+Description: Cinda-Regi-Tiyal
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cds
+Description: Chadian Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cdy
+Description: Chadong
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cdz
+Description: Koda
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cea
+Description: Lower Chehalis
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ceb
+Description: Cebuano
+Added: 2005-10-16
+%%
+Type: language
+Subtag: ceg
+Description: Chamacoco
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cek
+Description: Eastern Khumi Chin
+Added: 2012-08-12
+%%
+Type: language
+Subtag: cel
+Description: Celtic languages
+Added: 2005-10-16
+Scope: collection
+%%
+Type: language
+Subtag: cen
+Description: Cen
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cet
+Description: Centúúm
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cfa
+Description: Dijim-Bwilim
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cfd
+Description: Cara
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cfg
+Description: Como Karim
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cfm
+Description: Falam Chin
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cga
+Description: Changriwa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cgc
+Description: Kagayanen
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cgg
+Description: Chiga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cgk
+Description: Chocangacakha
+Added: 2009-07-29
+%%
+Type: language
+Subtag: chb
+Description: Chibcha
+Added: 2005-10-16
+%%
+Type: language
+Subtag: chc
+Description: Catawba
+Added: 2009-07-29
+%%
+Type: language
+Subtag: chd
+Description: Highland Oaxaca Chontal
+Added: 2009-07-29
+%%
+Type: language
+Subtag: chf
+Description: Tabasco Chontal
+Added: 2009-07-29
+%%
+Type: language
+Subtag: chg
+Description: Chagatai
+Added: 2005-10-16
+%%
+Type: language
+Subtag: chh
+Description: Chinook
+Added: 2009-07-29
+%%
+Type: language
+Subtag: chj
+Description: Ojitlán Chinantec
+Added: 2009-07-29
+%%
+Type: language
+Subtag: chk
+Description: Chuukese
+Added: 2005-10-16
+%%
+Type: language
+Subtag: chl
+Description: Cahuilla
+Added: 2009-07-29
+%%
+Type: language
+Subtag: chm
+Description: Mari (Russia)
+Added: 2005-10-16
+Scope: macrolanguage
+%%
+Type: language
+Subtag: chn
+Description: Chinook jargon
+Added: 2005-10-16
+%%
+Type: language
+Subtag: cho
+Description: Choctaw
+Added: 2005-10-16
+%%
+Type: language
+Subtag: chp
+Description: Chipewyan
+Description: Dene Suline
+Added: 2005-10-16
+%%
+Type: language
+Subtag: chq
+Description: Quiotepec Chinantec
+Added: 2009-07-29
+%%
+Type: language
+Subtag: chr
+Description: Cherokee
+Added: 2005-10-16
+%%
+Type: language
+Subtag: cht
+Description: Cholón
+Added: 2009-07-29
+%%
+Type: language
+Subtag: chw
+Description: Chuwabu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: chx
+Description: Chantyal
+Added: 2009-07-29
+%%
+Type: language
+Subtag: chy
+Description: Cheyenne
+Added: 2005-10-16
+%%
+Type: language
+Subtag: chz
+Description: Ozumacín Chinantec
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cia
+Description: Cia-Cia
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cib
+Description: Ci Gbe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cic
+Description: Chickasaw
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cid
+Description: Chimariko
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cie
+Description: Cineni
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cih
+Description: Chinali
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cik
+Description: Chitkuli Kinnauri
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cim
+Description: Cimbrian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cin
+Description: Cinta Larga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cip
+Description: Chiapanec
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cir
+Description: Tiri
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ciw
+Description: Chippewa
+Added: 2009-07-29
+Macrolanguage: oj
+%%
+Type: language
+Subtag: ciy
+Description: Chaima
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cja
+Description: Western Cham
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cje
+Description: Chru
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cjh
+Description: Upper Chehalis
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cji
+Description: Chamalal
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cjk
+Description: Chokwe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cjm
+Description: Eastern Cham
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cjn
+Description: Chenapian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cjo
+Description: Ashéninka Pajonal
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cjp
+Description: Cabécar
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cjr
+Description: Chorotega
+Added: 2009-07-29
+Deprecated: 2010-03-11
+Preferred-Value: mom
+%%
+Type: language
+Subtag: cjs
+Description: Shor
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cjv
+Description: Chuave
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cjy
+Description: Jinyu Chinese
+Added: 2009-07-29
+Macrolanguage: zh
+%%
+Type: language
+Subtag: cka
+Description: Khumi Awa Chin
+Added: 2009-07-29
+Deprecated: 2012-08-12
+Preferred-Value: cmr
+%%
+Type: language
+Subtag: ckb
+Description: Central Kurdish
+Added: 2009-07-29
+Macrolanguage: ku
+%%
+Type: language
+Subtag: ckh
+Description: Chak
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ckl
+Description: Cibak
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cko
+Description: Anufo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ckq
+Description: Kajakse
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ckr
+Description: Kairak
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cks
+Description: Tayo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ckt
+Description: Chukot
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cku
+Description: Koasati
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ckv
+Description: Kavalan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ckx
+Description: Caka
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cky
+Description: Cakfem-Mushere
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ckz
+Description: Cakchiquel-Quiché Mixed Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cla
+Description: Ron
+Added: 2009-07-29
+%%
+Type: language
+Subtag: clc
+Description: Chilcotin
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cld
+Description: Chaldean Neo-Aramaic
+Added: 2009-07-29
+Macrolanguage: syr
+%%
+Type: language
+Subtag: cle
+Description: Lealao Chinantec
+Added: 2009-07-29
+%%
+Type: language
+Subtag: clh
+Description: Chilisso
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cli
+Description: Chakali
+Added: 2009-07-29
+%%
+Type: language
+Subtag: clj
+Description: Laitu Chin
+Added: 2012-08-12
+%%
+Type: language
+Subtag: clk
+Description: Idu-Mishmi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cll
+Description: Chala
+Added: 2009-07-29
+%%
+Type: language
+Subtag: clm
+Description: Clallam
+Added: 2009-07-29
+%%
+Type: language
+Subtag: clo
+Description: Lowland Oaxaca Chontal
+Added: 2009-07-29
+%%
+Type: language
+Subtag: clt
+Description: Lautu Chin
+Added: 2012-08-12
+%%
+Type: language
+Subtag: clu
+Description: Caluyanun
+Added: 2009-07-29
+%%
+Type: language
+Subtag: clw
+Description: Chulym
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cly
+Description: Eastern Highland Chatino
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cma
+Description: Maa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cmc
+Description: Chamic languages
+Added: 2005-10-16
+Scope: collection
+%%
+Type: language
+Subtag: cme
+Description: Cerma
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cmg
+Description: Classical Mongolian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cmi
+Description: Emberá-Chamí
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cmk
+Description: Chimakum
+Added: 2009-07-29
+Deprecated: 2010-03-11
+Preferred-Value: xch
+%%
+Type: language
+Subtag: cml
+Description: Campalagian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cmm
+Description: Michigamea
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cmn
+Description: Mandarin Chinese
+Added: 2009-07-29
+Macrolanguage: zh
+%%
+Type: language
+Subtag: cmo
+Description: Central Mnong
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cmr
+Description: Mro-Khimi Chin
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cms
+Description: Messapic
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cmt
+Description: Camtho
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cna
+Description: Changthang
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cnb
+Description: Chinbon Chin
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cnc
+Description: Côông
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cng
+Description: Northern Qiang
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cnh
+Description: Haka Chin
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cni
+Description: Asháninka
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cnk
+Description: Khumi Chin
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cnl
+Description: Lalana Chinantec
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cno
+Description: Con
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cns
+Description: Central Asmat
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cnt
+Description: Tepetotutla Chinantec
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cnu
+Description: Chenoua
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cnw
+Description: Ngawn Chin
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cnx
+Description: Middle Cornish
+Added: 2009-07-29
+%%
+Type: language
+Subtag: coa
+Description: Cocos Islands Malay
+Added: 2009-07-29
+Macrolanguage: ms
+%%
+Type: language
+Subtag: cob
+Description: Chicomuceltec
+Added: 2009-07-29
+%%
+Type: language
+Subtag: coc
+Description: Cocopa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cod
+Description: Cocama-Cocamilla
+Added: 2009-07-29
+%%
+Type: language
+Subtag: coe
+Description: Koreguaje
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cof
+Description: Colorado
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cog
+Description: Chong
+Added: 2009-07-29
+%%
+Type: language
+Subtag: coh
+Description: Chonyi-Dzihana-Kauma
+Description: Chichonyi-Chidzihana-Chikauma
+Added: 2009-07-29
+%%
+Type: language
+Subtag: coj
+Description: Cochimi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cok
+Description: Santa Teresa Cora
+Added: 2009-07-29
+%%
+Type: language
+Subtag: col
+Description: Columbia-Wenatchi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: com
+Description: Comanche
+Added: 2009-07-29
+%%
+Type: language
+Subtag: con
+Description: Cofán
+Added: 2009-07-29
+%%
+Type: language
+Subtag: coo
+Description: Comox
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cop
+Description: Coptic
+Added: 2005-10-16
+%%
+Type: language
+Subtag: coq
+Description: Coquille
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cot
+Description: Caquinte
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cou
+Description: Wamey
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cov
+Description: Cao Miao
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cow
+Description: Cowlitz
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cox
+Description: Nanti
+Added: 2009-07-29
+%%
+Type: language
+Subtag: coy
+Description: Coyaima
+Added: 2009-07-29
+%%
+Type: language
+Subtag: coz
+Description: Chochotec
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cpa
+Description: Palantla Chinantec
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cpb
+Description: Ucayali-Yurúa Ashéninka
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cpc
+Description: Ajyíninka Apurucayali
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cpe
+Description: English-based creoles and pidgins
+Added: 2005-10-16
+Scope: collection
+%%
+Type: language
+Subtag: cpf
+Description: French-based creoles and pidgins
+Added: 2005-10-16
+Scope: collection
+%%
+Type: language
+Subtag: cpg
+Description: Cappadocian Greek
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cpi
+Description: Chinese Pidgin English
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cpn
+Description: Cherepon
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cpp
+Description: Portuguese-based creoles and pidgins
+Added: 2005-10-16
+Scope: collection
+%%
+Type: language
+Subtag: cps
+Description: Capiznon
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cpu
+Description: Pichis Ashéninka
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cpx
+Description: Pu-Xian Chinese
+Added: 2009-07-29
+Macrolanguage: zh
+%%
+Type: language
+Subtag: cpy
+Description: South Ucayali Ashéninka
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cqd
+Description: Chuanqiandian Cluster Miao
+Added: 2009-07-29
+Macrolanguage: hmn
+%%
+Type: language
+Subtag: cqu
+Description: Chilean Quechua
+Added: 2009-07-29
+Macrolanguage: qu
+%%
+Type: language
+Subtag: cra
+Description: Chara
+Added: 2009-07-29
+%%
+Type: language
+Subtag: crb
+Description: Island Carib
+Added: 2009-07-29
+%%
+Type: language
+Subtag: crc
+Description: Lonwolwol
+Added: 2009-07-29
+%%
+Type: language
+Subtag: crd
+Description: Coeur d'Alene
+Added: 2009-07-29
+%%
+Type: language
+Subtag: crf
+Description: Caramanta
+Added: 2009-07-29
+%%
+Type: language
+Subtag: crg
+Description: Michif
+Added: 2009-07-29
+%%
+Type: language
+Subtag: crh
+Description: Crimean Tatar
+Description: Crimean Turkish
+Added: 2005-10-16
+%%
+Type: language
+Subtag: cri
+Description: Sãotomense
+Added: 2009-07-29
+%%
+Type: language
+Subtag: crj
+Description: Southern East Cree
+Added: 2009-07-29
+Macrolanguage: cr
+%%
+Type: language
+Subtag: crk
+Description: Plains Cree
+Added: 2009-07-29
+Macrolanguage: cr
+%%
+Type: language
+Subtag: crl
+Description: Northern East Cree
+Added: 2009-07-29
+Macrolanguage: cr
+%%
+Type: language
+Subtag: crm
+Description: Moose Cree
+Added: 2009-07-29
+Macrolanguage: cr
+%%
+Type: language
+Subtag: crn
+Description: El Nayar Cora
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cro
+Description: Crow
+Added: 2009-07-29
+%%
+Type: language
+Subtag: crp
+Description: Creoles and pidgins
+Added: 2005-10-16
+Scope: collection
+%%
+Type: language
+Subtag: crq
+Description: Iyo'wujwa Chorote
+Added: 2009-07-29
+%%
+Type: language
+Subtag: crr
+Description: Carolina Algonquian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: crs
+Description: Seselwa Creole French
+Added: 2009-07-29
+%%
+Type: language
+Subtag: crt
+Description: Iyojwa'ja Chorote
+Added: 2009-07-29
+%%
+Type: language
+Subtag: crv
+Description: Chaura
+Added: 2009-07-29
+%%
+Type: language
+Subtag: crw
+Description: Chrau
+Added: 2009-07-29
+%%
+Type: language
+Subtag: crx
+Description: Carrier
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cry
+Description: Cori
+Added: 2009-07-29
+%%
+Type: language
+Subtag: crz
+Description: Cruzeño
+Added: 2009-07-29
+%%
+Type: language
+Subtag: csa
+Description: Chiltepec Chinantec
+Added: 2009-07-29
+%%
+Type: language
+Subtag: csb
+Description: Kashubian
+Added: 2005-10-16
+%%
+Type: language
+Subtag: csc
+Description: Catalan Sign Language
+Description: Lengua de señas catalana
+Description: Llengua de Signes Catalana
+Added: 2009-07-29
+%%
+Type: language
+Subtag: csd
+Description: Chiangmai Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cse
+Description: Czech Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: csf
+Description: Cuba Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: csg
+Description: Chilean Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: csh
+Description: Asho Chin
+Added: 2009-07-29
+%%
+Type: language
+Subtag: csi
+Description: Coast Miwok
+Added: 2009-07-29
+%%
+Type: language
+Subtag: csk
+Description: Jola-Kasa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: csl
+Description: Chinese Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: csm
+Description: Central Sierra Miwok
+Added: 2009-07-29
+%%
+Type: language
+Subtag: csn
+Description: Colombian Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cso
+Description: Sochiapam Chinantec
+Description: Sochiapan Chinantec
+Added: 2009-07-29
+%%
+Type: language
+Subtag: csq
+Description: Croatia Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: csr
+Description: Costa Rican Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: css
+Description: Southern Ohlone
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cst
+Description: Northern Ohlone
+Added: 2009-07-29
+%%
+Type: language
+Subtag: csu
+Description: Central Sudanic languages
+Added: 2009-07-29
+Scope: collection
+%%
+Type: language
+Subtag: csv
+Description: Sumtu Chin
+Added: 2012-08-12
+%%
+Type: language
+Subtag: csw
+Description: Swampy Cree
+Added: 2009-07-29
+Macrolanguage: cr
+%%
+Type: language
+Subtag: csy
+Description: Siyin Chin
+Added: 2009-07-29
+%%
+Type: language
+Subtag: csz
+Description: Coos
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cta
+Description: Tataltepec Chatino
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ctc
+Description: Chetco
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ctd
+Description: Tedim Chin
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cte
+Description: Tepinapa Chinantec
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ctg
+Description: Chittagonian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cth
+Description: Thaiphum Chin
+Added: 2012-08-12
+%%
+Type: language
+Subtag: ctl
+Description: Tlacoatzintepec Chinantec
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ctm
+Description: Chitimacha
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ctn
+Description: Chhintange
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cto
+Description: Emberá-Catío
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ctp
+Description: Western Highland Chatino
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cts
+Description: Northern Catanduanes Bikol
+Added: 2009-07-29
+Macrolanguage: bik
+%%
+Type: language
+Subtag: ctt
+Description: Wayanad Chetti
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ctu
+Description: Chol
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ctz
+Description: Zacatepec Chatino
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cua
+Description: Cua
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cub
+Description: Cubeo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cuc
+Description: Usila Chinantec
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cug
+Description: Cung
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cuh
+Description: Chuka
+Description: Gichuka
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cui
+Description: Cuiba
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cuj
+Description: Mashco Piro
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cuk
+Description: San Blas Kuna
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cul
+Description: Culina
+Description: Kulina
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cum
+Description: Cumeral
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cuo
+Description: Cumanagoto
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cup
+Description: Cupeño
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cuq
+Description: Cun
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cur
+Description: Chhulung
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cus
+Description: Cushitic languages
+Added: 2005-10-16
+Scope: collection
+%%
+Type: language
+Subtag: cut
+Description: Teutila Cuicatec
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cuu
+Description: Tai Ya
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cuv
+Description: Cuvok
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cuw
+Description: Chukwa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cux
+Description: Tepeuxila Cuicatec
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cvg
+Description: Chug
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cvn
+Description: Valle Nacional Chinantec
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cwa
+Description: Kabwa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cwb
+Description: Maindo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cwd
+Description: Woods Cree
+Added: 2009-07-29
+Macrolanguage: cr
+%%
+Type: language
+Subtag: cwe
+Description: Kwere
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cwg
+Description: Chewong
+Description: Cheq Wong
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cwt
+Description: Kuwaataay
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cya
+Description: Nopala Chatino
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cyb
+Description: Cayubaba
+Added: 2009-07-29
+%%
+Type: language
+Subtag: cyo
+Description: Cuyonon
+Added: 2009-07-29
+%%
+Type: language
+Subtag: czh
+Description: Huizhou Chinese
+Added: 2009-07-29
+Macrolanguage: zh
+%%
+Type: language
+Subtag: czk
+Description: Knaanic
+Added: 2009-07-29
+%%
+Type: language
+Subtag: czn
+Description: Zenzontepec Chatino
+Added: 2009-07-29
+%%
+Type: language
+Subtag: czo
+Description: Min Zhong Chinese
+Added: 2009-07-29
+Macrolanguage: zh
+%%
+Type: language
+Subtag: czt
+Description: Zotung Chin
+Added: 2009-07-29
+%%
+Type: language
+Subtag: daa
+Description: Dangaléat
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dac
+Description: Dambi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dad
+Description: Marik
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dae
+Description: Duupa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: daf
+Description: Dan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dag
+Description: Dagbani
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dah
+Description: Gwahatike
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dai
+Description: Day
+Added: 2009-07-29
+%%
+Type: language
+Subtag: daj
+Description: Dar Fur Daju
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dak
+Description: Dakota
+Added: 2005-10-16
+%%
+Type: language
+Subtag: dal
+Description: Dahalo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dam
+Description: Damakawa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dao
+Description: Daai Chin
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dap
+Description: Nisi (India)
+Added: 2009-07-29
+Deprecated: 2012-08-12
+Comments: see njz, tgj
+%%
+Type: language
+Subtag: daq
+Description: Dandami Maria
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dar
+Description: Dargwa
+Added: 2005-10-16
+%%
+Type: language
+Subtag: das
+Description: Daho-Doo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dau
+Description: Dar Sila Daju
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dav
+Description: Taita
+Description: Dawida
+Added: 2009-07-29
+%%
+Type: language
+Subtag: daw
+Description: Davawenyo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dax
+Description: Dayi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: day
+Description: Land Dayak languages
+Added: 2005-10-16
+Scope: collection
+%%
+Type: language
+Subtag: daz
+Description: Dao
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dba
+Description: Bangi Me
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dbb
+Description: Deno
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dbd
+Description: Dadiya
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dbe
+Description: Dabe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dbf
+Description: Edopi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dbg
+Description: Dogul Dom Dogon
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dbi
+Description: Doka
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dbj
+Description: Ida'an
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dbl
+Description: Dyirbal
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dbm
+Description: Duguri
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dbn
+Description: Duriankere
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dbo
+Description: Dulbu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dbp
+Description: Duwai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dbq
+Description: Daba
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dbr
+Description: Dabarre
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dbt
+Description: Ben Tey Dogon
+Added: 2012-08-12
+%%
+Type: language
+Subtag: dbu
+Description: Bondum Dom Dogon
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dbv
+Description: Dungu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dbw
+Description: Bankan Tey Dogon
+Added: 2012-08-12
+%%
+Type: language
+Subtag: dby
+Description: Dibiyaso
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dcc
+Description: Deccan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dcr
+Description: Negerhollands
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dda
+Description: Dadi Dadi
+Added: 2012-08-12
+%%
+Type: language
+Subtag: ddd
+Description: Dongotono
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dde
+Description: Doondo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ddg
+Description: Fataluku
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ddi
+Description: West Goodenough
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ddj
+Description: Jaru
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ddn
+Description: Dendi (Benin)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ddo
+Description: Dido
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ddr
+Description: Dhudhuroa
+Added: 2012-08-12
+%%
+Type: language
+Subtag: dds
+Description: Donno So Dogon
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ddw
+Description: Dawera-Daweloor
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dec
+Description: Dagik
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ded
+Description: Dedua
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dee
+Description: Dewoin
+Added: 2009-07-29
+%%
+Type: language
+Subtag: def
+Description: Dezfuli
+Added: 2009-07-29
+%%
+Type: language
+Subtag: deg
+Description: Degema
+Added: 2009-07-29
+%%
+Type: language
+Subtag: deh
+Description: Dehwari
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dei
+Description: Demisa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dek
+Description: Dek
+Added: 2009-07-29
+%%
+Type: language
+Subtag: del
+Description: Delaware
+Added: 2005-10-16
+Scope: macrolanguage
+%%
+Type: language
+Subtag: dem
+Description: Dem
+Added: 2009-07-29
+%%
+Type: language
+Subtag: den
+Description: Slave (Athapascan)
+Added: 2005-10-16
+Scope: macrolanguage
+%%
+Type: language
+Subtag: dep
+Description: Pidgin Delaware
+Added: 2009-07-29
+%%
+Type: language
+Subtag: deq
+Description: Dendi (Central African Republic)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: der
+Description: Deori
+Added: 2009-07-29
+%%
+Type: language
+Subtag: des
+Description: Desano
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dev
+Description: Domung
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dez
+Description: Dengese
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dga
+Description: Southern Dagaare
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dgb
+Description: Bunoge Dogon
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dgc
+Description: Casiguran Dumagat Agta
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dgd
+Description: Dagaari Dioula
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dge
+Description: Degenan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dgg
+Description: Doga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dgh
+Description: Dghwede
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dgi
+Description: Northern Dagara
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dgk
+Description: Dagba
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dgl
+Description: Andaandi
+Description: Dongolawi
+Added: 2012-08-12
+%%
+Type: language
+Subtag: dgn
+Description: Dagoman
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dgo
+Description: Dogri (individual language)
+Added: 2009-07-29
+Macrolanguage: doi
+%%
+Type: language
+Subtag: dgr
+Description: Dogrib
+Added: 2005-10-16
+%%
+Type: language
+Subtag: dgs
+Description: Dogoso
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dgt
+Description: Ndrag'ngith
+Added: 2012-08-12
+%%
+Type: language
+Subtag: dgu
+Description: Degaru
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dgw
+Description: Daungwurrung
+Added: 2012-08-12
+%%
+Type: language
+Subtag: dgx
+Description: Doghoro
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dgz
+Description: Daga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dha
+Description: Dhanwar (India)
+Added: 2009-07-29
+Deprecated: 2011-08-16
+%%
+Type: language
+Subtag: dhd
+Description: Dhundari
+Added: 2009-07-29
+Macrolanguage: mwr
+%%
+Type: language
+Subtag: dhg
+Description: Dhangu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dhi
+Description: Dhimal
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dhl
+Description: Dhalandji
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dhm
+Description: Zemba
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dhn
+Description: Dhanki
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dho
+Description: Dhodia
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dhr
+Description: Dhargari
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dhs
+Description: Dhaiso
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dhu
+Description: Dhurga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dhv
+Description: Dehu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dhw
+Description: Dhanwar (Nepal)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dia
+Description: Dia
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dib
+Description: South Central Dinka
+Added: 2009-07-29
+Macrolanguage: din
+%%
+Type: language
+Subtag: dic
+Description: Lakota Dida
+Added: 2009-07-29
+%%
+Type: language
+Subtag: did
+Description: Didinga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dif
+Description: Dieri
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dig
+Description: Digo
+Description: Chidigo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dih
+Description: Kumiai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dii
+Description: Dimbong
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dij
+Description: Dai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dik
+Description: Southwestern Dinka
+Added: 2009-07-29
+Macrolanguage: din
+%%
+Type: language
+Subtag: dil
+Description: Dilling
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dim
+Description: Dime
+Added: 2009-07-29
+%%
+Type: language
+Subtag: din
+Description: Dinka
+Added: 2005-10-16
+Scope: macrolanguage
+%%
+Type: language
+Subtag: dio
+Description: Dibo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dip
+Description: Northeastern Dinka
+Added: 2009-07-29
+Macrolanguage: din
+%%
+Type: language
+Subtag: diq
+Description: Dimli (individual language)
+Added: 2009-07-29
+Macrolanguage: zza
+%%
+Type: language
+Subtag: dir
+Description: Dirim
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dis
+Description: Dimasa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dit
+Description: Dirari
+Added: 2009-07-29
+%%
+Type: language
+Subtag: diu
+Description: Diriku
+Added: 2009-07-29
+%%
+Type: language
+Subtag: diw
+Description: Northwestern Dinka
+Added: 2009-07-29
+Macrolanguage: din
+%%
+Type: language
+Subtag: dix
+Description: Dixon Reef
+Added: 2009-07-29
+%%
+Type: language
+Subtag: diy
+Description: Diuwe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: diz
+Description: Ding
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dja
+Description: Djadjawurrung
+Added: 2012-08-12
+%%
+Type: language
+Subtag: djb
+Description: Djinba
+Added: 2009-07-29
+%%
+Type: language
+Subtag: djc
+Description: Dar Daju Daju
+Added: 2009-07-29
+%%
+Type: language
+Subtag: djd
+Description: Djamindjung
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dje
+Description: Zarma
+Added: 2009-07-29
+%%
+Type: language
+Subtag: djf
+Description: Djangun
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dji
+Description: Djinang
+Added: 2009-07-29
+%%
+Type: language
+Subtag: djj
+Description: Djeebbana
+Added: 2009-07-29
+%%
+Type: language
+Subtag: djk
+Description: Eastern Maroon Creole
+Description: Businenge Tongo
+Description: Nenge
+Added: 2009-07-29
+%%
+Type: language
+Subtag: djl
+Description: Djiwarli
+Added: 2009-07-29
+%%
+Type: language
+Subtag: djm
+Description: Jamsay Dogon
+Added: 2009-07-29
+%%
+Type: language
+Subtag: djn
+Description: Djauan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: djo
+Description: Jangkang
+Added: 2009-07-29
+%%
+Type: language
+Subtag: djr
+Description: Djambarrpuyngu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dju
+Description: Kapriman
+Added: 2009-07-29
+%%
+Type: language
+Subtag: djw
+Description: Djawi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dka
+Description: Dakpakha
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dkk
+Description: Dakka
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dkl
+Description: Kolum So Dogon
+Added: 2009-07-29
+Deprecated: 2011-08-16
+Comments: see aqd, dmb
+%%
+Type: language
+Subtag: dkr
+Description: Kuijau
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dks
+Description: Southeastern Dinka
+Added: 2009-07-29
+Macrolanguage: din
+%%
+Type: language
+Subtag: dkx
+Description: Mazagway
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dlg
+Description: Dolgan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dlm
+Description: Dalmatian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dln
+Description: Darlong
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dma
+Description: Duma
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dmb
+Description: Mombo Dogon
+Added: 2011-08-16
+%%
+Type: language
+Subtag: dmc
+Description: Dimir
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dmd
+Description: Madhi Madhi
+Added: 2012-08-12
+%%
+Type: language
+Subtag: dme
+Description: Dugwor
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dmg
+Description: Upper Kinabatangan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dmk
+Description: Domaaki
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dml
+Description: Dameli
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dmm
+Description: Dama
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dmn
+Description: Mande languages
+Added: 2009-07-29
+Scope: collection
+%%
+Type: language
+Subtag: dmo
+Description: Kemedzung
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dmr
+Description: East Damar
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dms
+Description: Dampelas
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dmu
+Description: Dubu
+Description: Tebi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dmv
+Description: Dumpas
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dmx
+Description: Dema
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dmy
+Description: Demta
+Description: Sowari
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dna
+Description: Upper Grand Valley Dani
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dnd
+Description: Daonda
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dne
+Description: Ndendeule
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dng
+Description: Dungan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dni
+Description: Lower Grand Valley Dani
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dnk
+Description: Dengka
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dnn
+Description: Dzùùngoo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dnr
+Description: Danaru
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dnt
+Description: Mid Grand Valley Dani
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dnu
+Description: Danau
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dnv
+Description: Danu
+Added: 2012-08-12
+%%
+Type: language
+Subtag: dnw
+Description: Western Dani
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dny
+Description: Dení
+Added: 2009-07-29
+%%
+Type: language
+Subtag: doa
+Description: Dom
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dob
+Description: Dobu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: doc
+Description: Northern Dong
+Added: 2009-07-29
+%%
+Type: language
+Subtag: doe
+Description: Doe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dof
+Description: Domu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: doh
+Description: Dong
+Added: 2009-07-29
+%%
+Type: language
+Subtag: doi
+Description: Dogri (macrolanguage)
+Added: 2005-10-16
+Scope: macrolanguage
+%%
+Type: language
+Subtag: dok
+Description: Dondo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dol
+Description: Doso
+Added: 2009-07-29
+%%
+Type: language
+Subtag: don
+Description: Toura (Papua New Guinea)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: doo
+Description: Dongo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dop
+Description: Lukpa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: doq
+Description: Dominican Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dor
+Description: Dori'o
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dos
+Description: Dogosé
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dot
+Description: Dass
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dov
+Description: Dombe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dow
+Description: Doyayo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dox
+Description: Bussa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: doy
+Description: Dompo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: doz
+Description: Dorze
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dpp
+Description: Papar
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dra
+Description: Dravidian languages
+Added: 2005-10-16
+Scope: collection
+%%
+Type: language
+Subtag: drb
+Description: Dair
+Added: 2009-07-29
+%%
+Type: language
+Subtag: drc
+Description: Minderico
+Added: 2011-08-16
+%%
+Type: language
+Subtag: drd
+Description: Darmiya
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dre
+Description: Dolpo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: drg
+Description: Rungus
+Added: 2009-07-29
+%%
+Type: language
+Subtag: drh
+Description: Darkhat
+Added: 2009-07-29
+Deprecated: 2010-03-11
+Preferred-Value: khk
+%%
+Type: language
+Subtag: dri
+Description: C'lela
+Added: 2009-07-29
+%%
+Type: language
+Subtag: drl
+Description: Paakantyi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: drn
+Description: West Damar
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dro
+Description: Daro-Matu Melanau
+Added: 2009-07-29
+%%
+Type: language
+Subtag: drq
+Description: Dura
+Added: 2009-07-29
+%%
+Type: language
+Subtag: drr
+Description: Dororo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: drs
+Description: Gedeo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: drt
+Description: Drents
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dru
+Description: Rukai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: drw
+Description: Darwazi
+Added: 2009-07-29
+Deprecated: 2010-03-11
+Preferred-Value: prs
+%%
+Type: language
+Subtag: dry
+Description: Darai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dsb
+Description: Lower Sorbian
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: dse
+Description: Dutch Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dsh
+Description: Daasanach
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dsi
+Description: Disa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dsl
+Description: Danish Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dsn
+Description: Dusner
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dso
+Description: Desiya
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dsq
+Description: Tadaksahak
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dta
+Description: Daur
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dtb
+Description: Labuk-Kinabatangan Kadazan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dtd
+Description: Ditidaht
+Added: 2011-08-16
+%%
+Type: language
+Subtag: dth
+Description: Adithinngithigh
+Added: 2012-08-12
+%%
+Type: language
+Subtag: dti
+Description: Ana Tinga Dogon
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dtk
+Description: Tene Kan Dogon
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dtm
+Description: Tomo Kan Dogon
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dto
+Description: Tommo So Dogon
+Added: 2012-08-12
+%%
+Type: language
+Subtag: dtp
+Description: Central Dusun
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dtr
+Description: Lotud
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dts
+Description: Toro So Dogon
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dtt
+Description: Toro Tegu Dogon
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dtu
+Description: Tebul Ure Dogon
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dty
+Description: Dotyali
+Added: 2012-08-12
+Macrolanguage: ne
+%%
+Type: language
+Subtag: dua
+Description: Duala
+Added: 2005-10-16
+%%
+Type: language
+Subtag: dub
+Description: Dubli
+Added: 2009-07-29
+%%
+Type: language
+Subtag: duc
+Description: Duna
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dud
+Description: Hun-Saare
+Added: 2009-07-29
+%%
+Type: language
+Subtag: due
+Description: Umiray Dumaget Agta
+Added: 2009-07-29
+%%
+Type: language
+Subtag: duf
+Description: Dumbea
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dug
+Description: Duruma
+Description: Chiduruma
+Added: 2009-07-29
+%%
+Type: language
+Subtag: duh
+Description: Dungra Bhil
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dui
+Description: Dumun
+Added: 2009-07-29
+%%
+Type: language
+Subtag: duj
+Description: Dhuwal
+Added: 2009-07-29
+%%
+Type: language
+Subtag: duk
+Description: Uyajitaya
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dul
+Description: Alabat Island Agta
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dum
+Description: Middle Dutch (ca. 1050-1350)
+Added: 2005-10-16
+%%
+Type: language
+Subtag: dun
+Description: Dusun Deyah
+Added: 2009-07-29
+%%
+Type: language
+Subtag: duo
+Description: Dupaninan Agta
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dup
+Description: Duano
+Added: 2009-07-29
+Macrolanguage: ms
+%%
+Type: language
+Subtag: duq
+Description: Dusun Malang
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dur
+Description: Dii
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dus
+Description: Dumi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: duu
+Description: Drung
+Added: 2009-07-29
+%%
+Type: language
+Subtag: duv
+Description: Duvle
+Added: 2009-07-29
+%%
+Type: language
+Subtag: duw
+Description: Dusun Witu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dux
+Description: Duungooma
+Added: 2009-07-29
+%%
+Type: language
+Subtag: duy
+Description: Dicamay Agta
+Added: 2009-07-29
+%%
+Type: language
+Subtag: duz
+Description: Duli
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dva
+Description: Duau
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dwa
+Description: Diri
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dwl
+Description: Walo Kumbe Dogon
+Added: 2009-07-29
+Deprecated: 2012-08-12
+Comments: see dbt, dbw
+%%
+Type: language
+Subtag: dwr
+Description: Dawro
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dws
+Description: Dutton World Speedwords
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dww
+Description: Dawawa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dya
+Description: Dyan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dyb
+Description: Dyaberdyaber
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dyd
+Description: Dyugun
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dyg
+Description: Villa Viciosa Agta
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dyi
+Description: Djimini Senoufo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dym
+Description: Yanda Dom Dogon
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dyn
+Description: Dyangadi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dyo
+Description: Jola-Fonyi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dyu
+Description: Dyula
+Added: 2005-10-16
+%%
+Type: language
+Subtag: dyy
+Description: Dyaabugay
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dza
+Description: Tunzu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dzd
+Description: Daza
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dzg
+Description: Dazaga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dzl
+Description: Dzalakha
+Added: 2009-07-29
+%%
+Type: language
+Subtag: dzn
+Description: Dzando
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ebg
+Description: Ebughu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ebk
+Description: Eastern Bontok
+Added: 2010-03-11
+Macrolanguage: bnc
+%%
+Type: language
+Subtag: ebo
+Description: Teke-Ebo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ebr
+Description: Ebrié
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ebu
+Description: Embu
+Description: Kiembu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ecr
+Description: Eteocretan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ecs
+Description: Ecuadorian Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ecy
+Description: Eteocypriot
+Added: 2009-07-29
+%%
+Type: language
+Subtag: eee
+Description: E
+Added: 2009-07-29
+%%
+Type: language
+Subtag: efa
+Description: Efai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: efe
+Description: Efe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: efi
+Description: Efik
+Added: 2005-10-16
+%%
+Type: language
+Subtag: ega
+Description: Ega
+Added: 2009-07-29
+%%
+Type: language
+Subtag: egl
+Description: Emilian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ego
+Description: Eggon
+Added: 2009-07-29
+%%
+Type: language
+Subtag: egx
+Description: Egyptian languages
+Added: 2009-07-29
+Scope: collection
+%%
+Type: language
+Subtag: egy
+Description: Egyptian (Ancient)
+Added: 2005-10-16
+%%
+Type: language
+Subtag: ehu
+Description: Ehueun
+Added: 2009-07-29
+%%
+Type: language
+Subtag: eip
+Description: Eipomek
+Added: 2009-07-29
+%%
+Type: language
+Subtag: eit
+Description: Eitiep
+Added: 2009-07-29
+%%
+Type: language
+Subtag: eiv
+Description: Askopan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: eja
+Description: Ejamat
+Added: 2009-07-29
+%%
+Type: language
+Subtag: eka
+Description: Ekajuk
+Added: 2005-10-16
+%%
+Type: language
+Subtag: eke
+Description: Ekit
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ekg
+Description: Ekari
+Added: 2009-07-29
+%%
+Type: language
+Subtag: eki
+Description: Eki
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ekk
+Description: Standard Estonian
+Added: 2009-07-29
+Macrolanguage: et
+%%
+Type: language
+Subtag: ekl
+Description: Kol (Bangladesh)
+Description: Kol
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ekm
+Description: Elip
+Added: 2009-07-29
+%%
+Type: language
+Subtag: eko
+Description: Koti
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ekp
+Description: Ekpeye
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ekr
+Description: Yace
+Added: 2009-07-29
+%%
+Type: language
+Subtag: eky
+Description: Eastern Kayah
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ele
+Description: Elepi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: elh
+Description: El Hugeirat
+Added: 2009-07-29
+%%
+Type: language
+Subtag: eli
+Description: Nding
+Added: 2009-07-29
+%%
+Type: language
+Subtag: elk
+Description: Elkei
+Added: 2009-07-29
+%%
+Type: language
+Subtag: elm
+Description: Eleme
+Added: 2009-07-29
+%%
+Type: language
+Subtag: elo
+Description: El Molo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: elp
+Description: Elpaputih
+Added: 2009-07-29
+Deprecated: 2012-08-12
+Comments: see amq, plh
+%%
+Type: language
+Subtag: elu
+Description: Elu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: elx
+Description: Elamite
+Added: 2005-10-16
+%%
+Type: language
+Subtag: ema
+Description: Emai-Iuleha-Ora
+Added: 2009-07-29
+%%
+Type: language
+Subtag: emb
+Description: Embaloh
+Added: 2009-07-29
+%%
+Type: language
+Subtag: eme
+Description: Emerillon
+Added: 2009-07-29
+%%
+Type: language
+Subtag: emg
+Description: Eastern Meohang
+Added: 2009-07-29
+%%
+Type: language
+Subtag: emi
+Description: Mussau-Emira
+Added: 2009-07-29
+%%
+Type: language
+Subtag: emk
+Description: Eastern Maninkakan
+Added: 2009-07-29
+Macrolanguage: man
+%%
+Type: language
+Subtag: emm
+Description: Mamulique
+Added: 2009-07-29
+%%
+Type: language
+Subtag: emn
+Description: Eman
+Added: 2009-07-29
+%%
+Type: language
+Subtag: emo
+Description: Emok
+Added: 2009-07-29
+%%
+Type: language
+Subtag: emp
+Description: Northern Emberá
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ems
+Description: Pacific Gulf Yupik
+Added: 2009-07-29
+%%
+Type: language
+Subtag: emu
+Description: Eastern Muria
+Added: 2009-07-29
+%%
+Type: language
+Subtag: emw
+Description: Emplawas
+Added: 2009-07-29
+%%
+Type: language
+Subtag: emx
+Description: Erromintxela
+Added: 2010-03-11
+%%
+Type: language
+Subtag: emy
+Description: Epigraphic Mayan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ena
+Description: Apali
+Added: 2009-07-29
+%%
+Type: language
+Subtag: enb
+Description: Markweeta
+Added: 2009-07-29
+Macrolanguage: kln
+%%
+Type: language
+Subtag: enc
+Description: En
+Added: 2009-07-29
+%%
+Type: language
+Subtag: end
+Description: Ende
+Added: 2009-07-29
+%%
+Type: language
+Subtag: enf
+Description: Forest Enets
+Added: 2009-07-29
+%%
+Type: language
+Subtag: enh
+Description: Tundra Enets
+Added: 2009-07-29
+%%
+Type: language
+Subtag: enm
+Description: Middle English (1100-1500)
+Added: 2005-10-16
+%%
+Type: language
+Subtag: enn
+Description: Engenni
+Added: 2009-07-29
+%%
+Type: language
+Subtag: eno
+Description: Enggano
+Added: 2009-07-29
+%%
+Type: language
+Subtag: enq
+Description: Enga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: enr
+Description: Emumu
+Description: Emem
+Added: 2009-07-29
+%%
+Type: language
+Subtag: enu
+Description: Enu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: env
+Description: Enwan (Edu State)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: enw
+Description: Enwan (Akwa Ibom State)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: eot
+Description: Beti (Côte d'Ivoire)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: epi
+Description: Epie
+Added: 2009-07-29
+%%
+Type: language
+Subtag: era
+Description: Eravallan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: erg
+Description: Sie
+Added: 2009-07-29
+%%
+Type: language
+Subtag: erh
+Description: Eruwa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: eri
+Description: Ogea
+Added: 2009-07-29
+%%
+Type: language
+Subtag: erk
+Description: South Efate
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ero
+Description: Horpa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: err
+Description: Erre
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ers
+Description: Ersu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ert
+Description: Eritai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: erw
+Description: Erokwanas
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ese
+Description: Ese Ejja
+Added: 2009-07-29
+%%
+Type: language
+Subtag: esh
+Description: Eshtehardi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: esi
+Description: North Alaskan Inupiatun
+Added: 2009-07-29
+Macrolanguage: ik
+%%
+Type: language
+Subtag: esk
+Description: Northwest Alaska Inupiatun
+Added: 2009-07-29
+Macrolanguage: ik
+%%
+Type: language
+Subtag: esl
+Description: Egypt Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: esm
+Description: Esuma
+Added: 2009-07-29
+%%
+Type: language
+Subtag: esn
+Description: Salvadoran Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: eso
+Description: Estonian Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: esq
+Description: Esselen
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ess
+Description: Central Siberian Yupik
+Added: 2009-07-29
+%%
+Type: language
+Subtag: esu
+Description: Central Yupik
+Added: 2009-07-29
+%%
+Type: language
+Subtag: esx
+Description: Eskimo-Aleut languages
+Added: 2009-07-29
+Scope: collection
+%%
+Type: language
+Subtag: etb
+Description: Etebi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: etc
+Description: Etchemin
+Added: 2009-07-29
+%%
+Type: language
+Subtag: eth
+Description: Ethiopian Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: etn
+Description: Eton (Vanuatu)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: eto
+Description: Eton (Cameroon)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: etr
+Description: Edolo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ets
+Description: Yekhee
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ett
+Description: Etruscan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: etu
+Description: Ejagham
+Added: 2009-07-29
+%%
+Type: language
+Subtag: etx
+Description: Eten
+Added: 2009-07-29
+%%
+Type: language
+Subtag: etz
+Description: Semimi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: euq
+Description: Basque (family)
+Added: 2009-07-29
+Scope: collection
+%%
+Type: language
+Subtag: eve
+Description: Even
+Added: 2009-07-29
+%%
+Type: language
+Subtag: evh
+Description: Uvbie
+Added: 2009-07-29
+%%
+Type: language
+Subtag: evn
+Description: Evenki
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ewo
+Description: Ewondo
+Added: 2005-10-16
+%%
+Type: language
+Subtag: ext
+Description: Extremaduran
+Added: 2009-07-29
+%%
+Type: language
+Subtag: eya
+Description: Eyak
+Added: 2009-07-29
+%%
+Type: language
+Subtag: eyo
+Description: Keiyo
+Added: 2009-07-29
+Macrolanguage: kln
+%%
+Type: language
+Subtag: eze
+Description: Uzekwe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: faa
+Description: Fasu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: fab
+Description: Fa D'ambu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: fad
+Description: Wagi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: faf
+Description: Fagani
+Added: 2009-07-29
+%%
+Type: language
+Subtag: fag
+Description: Finongan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: fah
+Description: Baissa Fali
+Added: 2009-07-29
+%%
+Type: language
+Subtag: fai
+Description: Faiwol
+Added: 2009-07-29
+%%
+Type: language
+Subtag: faj
+Description: Faita
+Added: 2009-07-29
+%%
+Type: language
+Subtag: fak
+Description: Fang (Cameroon)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: fal
+Description: South Fali
+Added: 2009-07-29
+%%
+Type: language
+Subtag: fam
+Description: Fam
+Added: 2009-07-29
+%%
+Type: language
+Subtag: fan
+Description: Fang (Equatorial Guinea)
+Added: 2005-10-16
+%%
+Type: language
+Subtag: fap
+Description: Palor
+Added: 2009-07-29
+%%
+Type: language
+Subtag: far
+Description: Fataleka
+Added: 2009-07-29
+%%
+Type: language
+Subtag: fat
+Description: Fanti
+Added: 2005-10-16
+Macrolanguage: ak
+%%
+Type: language
+Subtag: fau
+Description: Fayu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: fax
+Description: Fala
+Added: 2009-07-29
+%%
+Type: language
+Subtag: fay
+Description: Southwestern Fars
+Added: 2009-07-29
+%%
+Type: language
+Subtag: faz
+Description: Northwestern Fars
+Added: 2009-07-29
+%%
+Type: language
+Subtag: fbl
+Description: West Albay Bikol
+Added: 2010-03-11
+Macrolanguage: bik
+%%
+Type: language
+Subtag: fcs
+Description: Quebec Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: fer
+Description: Feroge
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ffi
+Description: Foia Foia
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ffm
+Description: Maasina Fulfulde
+Added: 2009-07-29
+Macrolanguage: ff
+%%
+Type: language
+Subtag: fgr
+Description: Fongoro
+Added: 2009-07-29
+%%
+Type: language
+Subtag: fia
+Description: Nobiin
+Added: 2009-07-29
+%%
+Type: language
+Subtag: fie
+Description: Fyer
+Added: 2009-07-29
+%%
+Type: language
+Subtag: fil
+Description: Filipino
+Description: Pilipino
+Added: 2005-10-16
+%%
+Type: language
+Subtag: fip
+Description: Fipa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: fir
+Description: Firan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: fit
+Description: Tornedalen Finnish
+Added: 2009-07-29
+%%
+Type: language
+Subtag: fiu
+Description: Finno-Ugrian languages
+Added: 2005-10-16
+Scope: collection
+%%
+Type: language
+Subtag: fiw
+Description: Fiwaga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: fkk
+Description: Kirya-Konzəl
+Added: 2012-08-12
+%%
+Type: language
+Subtag: fkv
+Description: Kven Finnish
+Added: 2009-07-29
+%%
+Type: language
+Subtag: fla
+Description: Kalispel-Pend d'Oreille
+Added: 2009-07-29
+%%
+Type: language
+Subtag: flh
+Description: Foau
+Added: 2009-07-29
+%%
+Type: language
+Subtag: fli
+Description: Fali
+Added: 2009-07-29
+%%
+Type: language
+Subtag: fll
+Description: North Fali
+Added: 2009-07-29
+%%
+Type: language
+Subtag: fln
+Description: Flinders Island
+Added: 2009-07-29
+%%
+Type: language
+Subtag: flr
+Description: Fuliiru
+Added: 2009-07-29
+%%
+Type: language
+Subtag: fly
+Description: Tsotsitaal
+Added: 2009-07-29
+%%
+Type: language
+Subtag: fmp
+Description: Fe'fe'
+Added: 2009-07-29
+%%
+Type: language
+Subtag: fmu
+Description: Far Western Muria
+Added: 2009-07-29
+%%
+Type: language
+Subtag: fng
+Description: Fanagalo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: fni
+Description: Fania
+Added: 2009-07-29
+%%
+Type: language
+Subtag: fod
+Description: Foodo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: foi
+Description: Foi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: fom
+Description: Foma
+Added: 2009-07-29
+%%
+Type: language
+Subtag: fon
+Description: Fon
+Added: 2005-10-16
+%%
+Type: language
+Subtag: for
+Description: Fore
+Added: 2009-07-29
+%%
+Type: language
+Subtag: fos
+Description: Siraya
+Added: 2009-07-29
+%%
+Type: language
+Subtag: fox
+Description: Formosan languages
+Added: 2009-07-29
+Scope: collection
+%%
+Type: language
+Subtag: fpe
+Description: Fernando Po Creole English
+Added: 2009-07-29
+%%
+Type: language
+Subtag: fqs
+Description: Fas
+Added: 2009-07-29
+%%
+Type: language
+Subtag: frc
+Description: Cajun French
+Added: 2009-07-29
+%%
+Type: language
+Subtag: frd
+Description: Fordata
+Added: 2009-07-29
+%%
+Type: language
+Subtag: frk
+Description: Frankish
+Added: 2009-07-29
+%%
+Type: language
+Subtag: frm
+Description: Middle French (ca. 1400-1600)
+Added: 2005-10-16
+%%
+Type: language
+Subtag: fro
+Description: Old French (842-ca. 1400)
+Added: 2005-10-16
+%%
+Type: language
+Subtag: frp
+Description: Arpitan
+Description: Francoprovençal
+Added: 2009-07-29
+%%
+Type: language
+Subtag: frq
+Description: Forak
+Added: 2009-07-29
+%%
+Type: language
+Subtag: frr
+Description: Northern Frisian
+Added: 2006-03-08
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: frs
+Description: Eastern Frisian
+Added: 2006-03-08
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: frt
+Description: Fortsenal
+Added: 2009-07-29
+%%
+Type: language
+Subtag: fse
+Description: Finnish Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: fsl
+Description: French Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: fss
+Description: Finland-Swedish Sign Language
+Description: finlandssvenskt teckenspråk
+Description: suomenruotsalainen viittomakieli
+Added: 2009-07-29
+%%
+Type: language
+Subtag: fub
+Description: Adamawa Fulfulde
+Added: 2009-07-29
+Macrolanguage: ff
+%%
+Type: language
+Subtag: fuc
+Description: Pulaar
+Added: 2009-07-29
+Macrolanguage: ff
+%%
+Type: language
+Subtag: fud
+Description: East Futuna
+Added: 2009-07-29
+%%
+Type: language
+Subtag: fue
+Description: Borgu Fulfulde
+Added: 2009-07-29
+Macrolanguage: ff
+%%
+Type: language
+Subtag: fuf
+Description: Pular
+Added: 2009-07-29
+Macrolanguage: ff
+%%
+Type: language
+Subtag: fuh
+Description: Western Niger Fulfulde
+Added: 2009-07-29
+Macrolanguage: ff
+%%
+Type: language
+Subtag: fui
+Description: Bagirmi Fulfulde
+Added: 2009-07-29
+Macrolanguage: ff
+%%
+Type: language
+Subtag: fuj
+Description: Ko
+Added: 2009-07-29
+%%
+Type: language
+Subtag: fum
+Description: Fum
+Added: 2009-07-29
+%%
+Type: language
+Subtag: fun
+Description: Fulniô
+Added: 2009-07-29
+%%
+Type: language
+Subtag: fuq
+Description: Central-Eastern Niger Fulfulde
+Added: 2009-07-29
+Macrolanguage: ff
+%%
+Type: language
+Subtag: fur
+Description: Friulian
+Added: 2005-10-16
+%%
+Type: language
+Subtag: fut
+Description: Futuna-Aniwa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: fuu
+Description: Furu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: fuv
+Description: Nigerian Fulfulde
+Added: 2009-07-29
+Macrolanguage: ff
+%%
+Type: language
+Subtag: fuy
+Description: Fuyug
+Added: 2009-07-29
+%%
+Type: language
+Subtag: fvr
+Description: Fur
+Added: 2009-07-29
+%%
+Type: language
+Subtag: fwa
+Description: Fwâi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: fwe
+Description: Fwe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gaa
+Description: Ga
+Added: 2005-10-16
+%%
+Type: language
+Subtag: gab
+Description: Gabri
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gac
+Description: Mixed Great Andamanese
+Added: 2010-03-11
+%%
+Type: language
+Subtag: gad
+Description: Gaddang
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gae
+Description: Guarequena
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gaf
+Description: Gende
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gag
+Description: Gagauz
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gah
+Description: Alekano
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gai
+Description: Borei
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gaj
+Description: Gadsup
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gak
+Description: Gamkonora
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gal
+Description: Galoli
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gam
+Description: Kandawo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gan
+Description: Gan Chinese
+Added: 2009-07-29
+Macrolanguage: zh
+%%
+Type: language
+Subtag: gao
+Description: Gants
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gap
+Description: Gal
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gaq
+Description: Gata'
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gar
+Description: Galeya
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gas
+Description: Adiwasi Garasia
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gat
+Description: Kenati
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gau
+Description: Mudhili Gadaba
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gav
+Description: Gabutamon
+Added: 2009-07-29
+Deprecated: 2010-03-11
+Preferred-Value: dev
+%%
+Type: language
+Subtag: gaw
+Description: Nobonob
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gax
+Description: Borana-Arsi-Guji Oromo
+Added: 2009-07-29
+Macrolanguage: om
+%%
+Type: language
+Subtag: gay
+Description: Gayo
+Added: 2005-10-16
+%%
+Type: language
+Subtag: gaz
+Description: West Central Oromo
+Added: 2009-07-29
+Macrolanguage: om
+%%
+Type: language
+Subtag: gba
+Description: Gbaya (Central African Republic)
+Added: 2005-10-16
+Scope: macrolanguage
+%%
+Type: language
+Subtag: gbb
+Description: Kaytetye
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gbc
+Description: Garawa
+Added: 2009-07-29
+Deprecated: 2012-08-12
+Comments: see wny, wrk
+%%
+Type: language
+Subtag: gbd
+Description: Karadjeri
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gbe
+Description: Niksek
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gbf
+Description: Gaikundi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gbg
+Description: Gbanziri
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gbh
+Description: Defi Gbe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gbi
+Description: Galela
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gbj
+Description: Bodo Gadaba
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gbk
+Description: Gaddi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gbl
+Description: Gamit
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gbm
+Description: Garhwali
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gbn
+Description: Mo'da
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gbo
+Description: Northern Grebo
+Added: 2009-07-29
+Macrolanguage: grb
+%%
+Type: language
+Subtag: gbp
+Description: Gbaya-Bossangoa
+Added: 2009-07-29
+Macrolanguage: gba
+%%
+Type: language
+Subtag: gbq
+Description: Gbaya-Bozoum
+Added: 2009-07-29
+Macrolanguage: gba
+%%
+Type: language
+Subtag: gbr
+Description: Gbagyi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gbs
+Description: Gbesi Gbe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gbu
+Description: Gagadu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gbv
+Description: Gbanu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gbx
+Description: Eastern Xwla Gbe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gby
+Description: Gbari
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gbz
+Description: Zoroastrian Dari
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gcc
+Description: Mali
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gcd
+Description: Ganggalida
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gce
+Description: Galice
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gcf
+Description: Guadeloupean Creole French
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gcl
+Description: Grenadian Creole English
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gcn
+Description: Gaina
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gcr
+Description: Guianese Creole French
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gct
+Description: Colonia Tovar German
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gda
+Description: Gade Lohar
+Added: 2009-07-29
+Macrolanguage: raj
+%%
+Type: language
+Subtag: gdb
+Description: Pottangi Ollar Gadaba
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gdc
+Description: Gugu Badhun
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gdd
+Description: Gedaged
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gde
+Description: Gude
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gdf
+Description: Guduf-Gava
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gdg
+Description: Ga'dang
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gdh
+Description: Gadjerawang
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gdi
+Description: Gundi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gdj
+Description: Gurdjar
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gdk
+Description: Gadang
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gdl
+Description: Dirasha
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gdm
+Description: Laal
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gdn
+Description: Umanakaina
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gdo
+Description: Ghodoberi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gdq
+Description: Mehri
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gdr
+Description: Wipi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gds
+Description: Ghandruk Sign Language
+Added: 2012-08-12
+%%
+Type: language
+Subtag: gdu
+Description: Gudu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gdx
+Description: Godwari
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gea
+Description: Geruma
+Added: 2009-07-29
+%%
+Type: language
+Subtag: geb
+Description: Kire
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gec
+Description: Gboloo Grebo
+Added: 2009-07-29
+Macrolanguage: grb
+%%
+Type: language
+Subtag: ged
+Description: Gade
+Added: 2009-07-29
+%%
+Type: language
+Subtag: geg
+Description: Gengle
+Added: 2009-07-29
+%%
+Type: language
+Subtag: geh
+Description: Hutterite German
+Description: Hutterisch
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gei
+Description: Gebe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gej
+Description: Gen
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gek
+Description: Yiwom
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gel
+Description: ut-Ma'in
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gem
+Description: Germanic languages
+Added: 2005-10-16
+Scope: collection
+%%
+Type: language
+Subtag: geq
+Description: Geme
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ges
+Description: Geser-Gorom
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gew
+Description: Gera
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gex
+Description: Garre
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gey
+Description: Enya
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gez
+Description: Geez
+Added: 2005-10-16
+%%
+Type: language
+Subtag: gfk
+Description: Patpatar
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gft
+Description: Gafat
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gfx
+Description: Mangetti Dune !Xung
+Added: 2012-08-12
+%%
+Type: language
+Subtag: gga
+Description: Gao
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ggb
+Description: Gbii
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ggd
+Description: Gugadj
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gge
+Description: Guragone
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ggg
+Description: Gurgula
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ggk
+Description: Kungarakany
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ggl
+Description: Ganglau
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ggn
+Description: Eastern Gurung
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ggo
+Description: Southern Gondi
+Added: 2009-07-29
+Macrolanguage: gon
+%%
+Type: language
+Subtag: ggr
+Description: Aghu Tharnggalu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ggt
+Description: Gitua
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ggu
+Description: Gagu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ggw
+Description: Gogodala
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gha
+Description: Ghadamès
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ghc
+Description: Hiberno-Scottish Gaelic
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ghe
+Description: Southern Ghale
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ghh
+Description: Northern Ghale
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ghk
+Description: Geko Karen
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ghl
+Description: Ghulfan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ghn
+Description: Ghanongga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gho
+Description: Ghomara
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ghr
+Description: Ghera
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ghs
+Description: Guhu-Samane
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ght
+Description: Kuke
+Description: Kutang Ghale
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gia
+Description: Kitja
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gib
+Description: Gibanawa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gic
+Description: Gail
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gid
+Description: Gidar
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gig
+Description: Goaria
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gil
+Description: Gilbertese
+Added: 2005-10-16
+%%
+Type: language
+Subtag: gim
+Description: Gimi (Eastern Highlands)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gin
+Description: Hinukh
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gio
+Description: Gelao
+Added: 2009-07-29
+Deprecated: 2012-08-12
+Comments: see aou, gqu
+%%
+Type: language
+Subtag: gip
+Description: Gimi (West New Britain)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: giq
+Description: Green Gelao
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gir
+Description: Red Gelao
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gis
+Description: North Giziga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: git
+Description: Gitxsan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: giu
+Description: Mulao
+Added: 2012-08-12
+%%
+Type: language
+Subtag: giw
+Description: White Gelao
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gix
+Description: Gilima
+Added: 2009-07-29
+%%
+Type: language
+Subtag: giy
+Description: Giyug
+Added: 2009-07-29
+%%
+Type: language
+Subtag: giz
+Description: South Giziga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gji
+Description: Geji
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gjk
+Description: Kachi Koli
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gjn
+Description: Gonja
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gju
+Description: Gujari
+Added: 2009-07-29
+Macrolanguage: raj
+%%
+Type: language
+Subtag: gka
+Description: Guya
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gke
+Description: Ndai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gkn
+Description: Gokana
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gko
+Description: Kok-Nar
+Added: 2012-08-12
+%%
+Type: language
+Subtag: gkp
+Description: Guinea Kpelle
+Added: 2009-07-29
+Macrolanguage: kpe
+%%
+Type: language
+Subtag: glc
+Description: Bon Gula
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gld
+Description: Nanai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: glh
+Description: Northwest Pashayi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gli
+Description: Guliguli
+Added: 2009-07-29
+%%
+Type: language
+Subtag: glj
+Description: Gula Iro
+Added: 2009-07-29
+%%
+Type: language
+Subtag: glk
+Description: Gilaki
+Added: 2009-07-29
+%%
+Type: language
+Subtag: glo
+Description: Galambu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: glr
+Description: Glaro-Twabo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: glu
+Description: Gula (Chad)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: glw
+Description: Glavda
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gly
+Description: Gule
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gma
+Description: Gambera
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gmb
+Description: Gula'alaa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gmd
+Description: Mághdì
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gme
+Description: East Germanic languages
+Added: 2009-07-29
+Scope: collection
+%%
+Type: language
+Subtag: gmh
+Description: Middle High German (ca. 1050-1500)
+Added: 2005-10-16
+%%
+Type: language
+Subtag: gml
+Description: Middle Low German
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gmm
+Description: Gbaya-Mbodomo
+Added: 2009-07-29
+Macrolanguage: gba
+%%
+Type: language
+Subtag: gmn
+Description: Gimnime
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gmq
+Description: North Germanic languages
+Added: 2009-07-29
+Scope: collection
+%%
+Type: language
+Subtag: gmu
+Description: Gumalu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gmv
+Description: Gamo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gmw
+Description: West Germanic languages
+Added: 2009-07-29
+Scope: collection
+%%
+Type: language
+Subtag: gmx
+Description: Magoma
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gmy
+Description: Mycenaean Greek
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gna
+Description: Kaansa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gnb
+Description: Gangte
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gnc
+Description: Guanche
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gnd
+Description: Zulgo-Gemzek
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gne
+Description: Ganang
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gng
+Description: Ngangam
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gnh
+Description: Lere
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gni
+Description: Gooniyandi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gnk
+Description: //Gana
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gnl
+Description: Gangulu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gnm
+Description: Ginuman
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gnn
+Description: Gumatj
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gno
+Description: Northern Gondi
+Added: 2009-07-29
+Macrolanguage: gon
+%%
+Type: language
+Subtag: gnq
+Description: Gana
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gnr
+Description: Gureng Gureng
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gnt
+Description: Guntai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gnu
+Description: Gnau
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gnw
+Description: Western Bolivian Guaraní
+Added: 2009-07-29
+Macrolanguage: gn
+%%
+Type: language
+Subtag: gnz
+Description: Ganzi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: goa
+Description: Guro
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gob
+Description: Playero
+Added: 2009-07-29
+%%
+Type: language
+Subtag: goc
+Description: Gorakor
+Added: 2009-07-29
+%%
+Type: language
+Subtag: god
+Description: Godié
+Added: 2009-07-29
+%%
+Type: language
+Subtag: goe
+Description: Gongduk
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gof
+Description: Gofa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gog
+Description: Gogo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: goh
+Description: Old High German (ca. 750-1050)
+Added: 2005-10-16
+%%
+Type: language
+Subtag: goi
+Description: Gobasi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: goj
+Description: Gowlan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gok
+Description: Gowli
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gol
+Description: Gola
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gom
+Description: Goan Konkani
+Added: 2009-07-29
+Macrolanguage: kok
+%%
+Type: language
+Subtag: gon
+Description: Gondi
+Added: 2005-10-16
+Scope: macrolanguage
+%%
+Type: language
+Subtag: goo
+Description: Gone Dau
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gop
+Description: Yeretuar
+Added: 2009-07-29
+%%
+Type: language
+Subtag: goq
+Description: Gorap
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gor
+Description: Gorontalo
+Added: 2005-10-16
+%%
+Type: language
+Subtag: gos
+Description: Gronings
+Added: 2009-07-29
+%%
+Type: language
+Subtag: got
+Description: Gothic
+Added: 2005-10-16
+%%
+Type: language
+Subtag: gou
+Description: Gavar
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gow
+Description: Gorowa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gox
+Description: Gobu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: goy
+Description: Goundo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: goz
+Description: Gozarkhani
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gpa
+Description: Gupa-Abawa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gpe
+Description: Ghanaian Pidgin English
+Added: 2012-08-12
+%%
+Type: language
+Subtag: gpn
+Description: Taiap
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gqa
+Description: Ga'anda
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gqi
+Description: Guiqiong
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gqn
+Description: Guana (Brazil)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gqr
+Description: Gor
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gqu
+Description: Qau
+Added: 2012-08-12
+%%
+Type: language
+Subtag: gra
+Description: Rajput Garasia
+Added: 2009-07-29
+%%
+Type: language
+Subtag: grb
+Description: Grebo
+Added: 2005-10-16
+Scope: macrolanguage
+%%
+Type: language
+Subtag: grc
+Description: Ancient Greek (to 1453)
+Added: 2005-10-16
+%%
+Type: language
+Subtag: grd
+Description: Guruntum-Mbaaru
+Added: 2009-07-29
+%%
+Type: language
+Subtag: grg
+Description: Madi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: grh
+Description: Gbiri-Niragu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gri
+Description: Ghari
+Added: 2009-07-29
+%%
+Type: language
+Subtag: grj
+Description: Southern Grebo
+Added: 2009-07-29
+Macrolanguage: grb
+%%
+Type: language
+Subtag: grk
+Description: Greek languages
+Added: 2009-07-29
+Scope: collection
+%%
+Type: language
+Subtag: grm
+Description: Kota Marudu Talantang
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gro
+Description: Groma
+Added: 2009-07-29
+%%
+Type: language
+Subtag: grq
+Description: Gorovu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: grr
+Description: Taznatit
+Added: 2009-07-29
+%%
+Type: language
+Subtag: grs
+Description: Gresi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: grt
+Description: Garo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gru
+Description: Kistane
+Added: 2009-07-29
+%%
+Type: language
+Subtag: grv
+Description: Central Grebo
+Added: 2009-07-29
+Macrolanguage: grb
+%%
+Type: language
+Subtag: grw
+Description: Gweda
+Added: 2009-07-29
+%%
+Type: language
+Subtag: grx
+Description: Guriaso
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gry
+Description: Barclayville Grebo
+Added: 2009-07-29
+Macrolanguage: grb
+%%
+Type: language
+Subtag: grz
+Description: Guramalum
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gse
+Description: Ghanaian Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gsg
+Description: German Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gsl
+Description: Gusilay
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gsm
+Description: Guatemalan Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gsn
+Description: Gusan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gso
+Description: Southwest Gbaya
+Added: 2009-07-29
+Macrolanguage: gba
+%%
+Type: language
+Subtag: gsp
+Description: Wasembo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gss
+Description: Greek Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gsw
+Description: Swiss German
+Description: Alemannic
+Description: Alsatian
+Added: 2006-03-08
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: gta
+Description: Guató
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gti
+Description: Gbati-ri
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gua
+Description: Shiki
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gub
+Description: Guajajára
+Added: 2009-07-29
+%%
+Type: language
+Subtag: guc
+Description: Wayuu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gud
+Description: Yocoboué Dida
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gue
+Description: Gurinji
+Added: 2009-07-29
+%%
+Type: language
+Subtag: guf
+Description: Gupapuyngu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gug
+Description: Paraguayan Guaraní
+Added: 2009-07-29
+Macrolanguage: gn
+%%
+Type: language
+Subtag: guh
+Description: Guahibo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gui
+Description: Eastern Bolivian Guaraní
+Added: 2009-07-29
+Macrolanguage: gn
+%%
+Type: language
+Subtag: guk
+Description: Gumuz
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gul
+Description: Sea Island Creole English
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gum
+Description: Guambiano
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gun
+Description: Mbyá Guaraní
+Added: 2009-07-29
+Macrolanguage: gn
+%%
+Type: language
+Subtag: guo
+Description: Guayabero
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gup
+Description: Gunwinggu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: guq
+Description: Aché
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gur
+Description: Farefare
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gus
+Description: Guinean Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gut
+Description: Maléku Jaíka
+Added: 2009-07-29
+%%
+Type: language
+Subtag: guu
+Description: Yanomamö
+Added: 2009-07-29
+%%
+Type: language
+Subtag: guv
+Description: Gey
+Added: 2009-07-29
+%%
+Type: language
+Subtag: guw
+Description: Gun
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gux
+Description: Gourmanchéma
+Added: 2009-07-29
+%%
+Type: language
+Subtag: guz
+Description: Gusii
+Description: Ekegusii
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gva
+Description: Guana (Paraguay)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gvc
+Description: Guanano
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gve
+Description: Duwet
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gvf
+Description: Golin
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gvj
+Description: Guajá
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gvl
+Description: Gulay
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gvm
+Description: Gurmana
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gvn
+Description: Kuku-Yalanji
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gvo
+Description: Gavião Do Jiparaná
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gvp
+Description: Pará Gavião
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gvr
+Description: Western Gurung
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gvs
+Description: Gumawana
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gvy
+Description: Guyani
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gwa
+Description: Mbato
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gwb
+Description: Gwa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gwc
+Description: Kalami
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gwd
+Description: Gawwada
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gwe
+Description: Gweno
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gwf
+Description: Gowro
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gwg
+Description: Moo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gwi
+Description: Gwichʼin
+Added: 2005-10-16
+%%
+Type: language
+Subtag: gwj
+Description: /Gwi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gwm
+Description: Awngthim
+Added: 2012-08-12
+%%
+Type: language
+Subtag: gwn
+Description: Gwandara
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gwr
+Description: Gwere
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gwt
+Description: Gawar-Bati
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gwu
+Description: Guwamu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gww
+Description: Kwini
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gwx
+Description: Gua
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gxx
+Description: Wè Southern
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gya
+Description: Northwest Gbaya
+Added: 2009-07-29
+Macrolanguage: gba
+%%
+Type: language
+Subtag: gyb
+Description: Garus
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gyd
+Description: Kayardild
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gye
+Description: Gyem
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gyf
+Description: Gungabula
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gyg
+Description: Gbayi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gyi
+Description: Gyele
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gyl
+Description: Gayil
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gym
+Description: Ngäbere
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gyn
+Description: Guyanese Creole English
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gyr
+Description: Guarayu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gyy
+Description: Gunya
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gza
+Description: Ganza
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gzi
+Description: Gazi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: gzn
+Description: Gane
+Added: 2009-07-29
+%%
+Type: language
+Subtag: haa
+Description: Han
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hab
+Description: Hanoi Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hac
+Description: Gurani
+Added: 2009-07-29
+%%
+Type: language
+Subtag: had
+Description: Hatam
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hae
+Description: Eastern Oromo
+Added: 2009-07-29
+Macrolanguage: om
+%%
+Type: language
+Subtag: haf
+Description: Haiphong Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hag
+Description: Hanga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hah
+Description: Hahon
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hai
+Description: Haida
+Added: 2005-10-16
+Scope: macrolanguage
+%%
+Type: language
+Subtag: haj
+Description: Hajong
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hak
+Description: Hakka Chinese
+Added: 2009-07-29
+Macrolanguage: zh
+%%
+Type: language
+Subtag: hal
+Description: Halang
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ham
+Description: Hewa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: han
+Description: Hangaza
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hao
+Description: Hakö
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hap
+Description: Hupla
+Added: 2009-07-29
+%%
+Type: language
+Subtag: haq
+Description: Ha
+Added: 2009-07-29
+%%
+Type: language
+Subtag: har
+Description: Harari
+Added: 2009-07-29
+%%
+Type: language
+Subtag: has
+Description: Haisla
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hav
+Description: Havu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: haw
+Description: Hawaiian
+Added: 2005-10-16
+%%
+Type: language
+Subtag: hax
+Description: Southern Haida
+Added: 2009-07-29
+Macrolanguage: hai
+%%
+Type: language
+Subtag: hay
+Description: Haya
+Added: 2009-07-29
+%%
+Type: language
+Subtag: haz
+Description: Hazaragi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hba
+Description: Hamba
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hbb
+Description: Huba
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hbn
+Description: Heiban
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hbo
+Description: Ancient Hebrew
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hbu
+Description: Habu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hca
+Description: Andaman Creole Hindi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hch
+Description: Huichol
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hdn
+Description: Northern Haida
+Added: 2009-07-29
+Macrolanguage: hai
+%%
+Type: language
+Subtag: hds
+Description: Honduras Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hdy
+Description: Hadiyya
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hea
+Description: Northern Qiandong Miao
+Added: 2009-07-29
+Macrolanguage: hmn
+%%
+Type: language
+Subtag: hed
+Description: Herdé
+Added: 2009-07-29
+%%
+Type: language
+Subtag: heg
+Description: Helong
+Added: 2009-07-29
+%%
+Type: language
+Subtag: heh
+Description: Hehe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hei
+Description: Heiltsuk
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hem
+Description: Hemba
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hgm
+Description: Hai//om
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hgw
+Description: Haigwai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hhi
+Description: Hoia Hoia
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hhr
+Description: Kerak
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hhy
+Description: Hoyahoya
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hia
+Description: Lamang
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hib
+Description: Hibito
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hid
+Description: Hidatsa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hif
+Description: Fiji Hindi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hig
+Description: Kamwe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hih
+Description: Pamosu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hii
+Description: Hinduri
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hij
+Description: Hijuk
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hik
+Description: Seit-Kaitetu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hil
+Description: Hiligaynon
+Added: 2005-10-16
+%%
+Type: language
+Subtag: him
+Description: Himachali languages
+Description: Western Pahari languages
+Added: 2005-10-16
+Scope: collection
+%%
+Type: language
+Subtag: hio
+Description: Tsoa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hir
+Description: Himarimã
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hit
+Description: Hittite
+Added: 2005-10-16
+%%
+Type: language
+Subtag: hiw
+Description: Hiw
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hix
+Description: Hixkaryána
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hji
+Description: Haji
+Added: 2009-07-29
+Macrolanguage: ms
+%%
+Type: language
+Subtag: hka
+Description: Kahe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hke
+Description: Hunde
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hkk
+Description: Hunjara-Kaina Ke
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hks
+Description: Hong Kong Sign Language
+Description: Heung Kong Sau Yue
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hla
+Description: Halia
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hlb
+Description: Halbi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hld
+Description: Halang Doan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hle
+Description: Hlersu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hlt
+Description: Matu Chin
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hlu
+Description: Hieroglyphic Luwian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hma
+Description: Southern Mashan Hmong
+Description: Southern Mashan Miao
+Added: 2009-07-29
+Macrolanguage: hmn
+%%
+Type: language
+Subtag: hmb
+Description: Humburi Senni Songhay
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hmc
+Description: Central Huishui Hmong
+Description: Central Huishui Miao
+Added: 2009-07-29
+Macrolanguage: hmn
+%%
+Type: language
+Subtag: hmd
+Description: Large Flowery Miao
+Description: A-hmaos
+Description: Da-Hua Miao
+Added: 2009-07-29
+Macrolanguage: hmn
+%%
+Type: language
+Subtag: hme
+Description: Eastern Huishui Hmong
+Description: Eastern Huishui Miao
+Added: 2009-07-29
+Macrolanguage: hmn
+%%
+Type: language
+Subtag: hmf
+Description: Hmong Don
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hmg
+Description: Southwestern Guiyang Hmong
+Added: 2009-07-29
+Macrolanguage: hmn
+%%
+Type: language
+Subtag: hmh
+Description: Southwestern Huishui Hmong
+Description: Southwestern Huishui Miao
+Added: 2009-07-29
+Macrolanguage: hmn
+%%
+Type: language
+Subtag: hmi
+Description: Northern Huishui Hmong
+Description: Northern Huishui Miao
+Added: 2009-07-29
+Macrolanguage: hmn
+%%
+Type: language
+Subtag: hmj
+Description: Ge
+Description: Gejia
+Added: 2009-07-29
+Macrolanguage: hmn
+%%
+Type: language
+Subtag: hmk
+Description: Maek
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hml
+Description: Luopohe Hmong
+Description: Luopohe Miao
+Added: 2009-07-29
+Macrolanguage: hmn
+%%
+Type: language
+Subtag: hmm
+Description: Central Mashan Hmong
+Description: Central Mashan Miao
+Added: 2009-07-29
+Macrolanguage: hmn
+%%
+Type: language
+Subtag: hmn
+Description: Hmong
+Description: Mong
+Added: 2005-10-16
+Scope: macrolanguage
+%%
+Type: language
+Subtag: hmp
+Description: Northern Mashan Hmong
+Description: Northern Mashan Miao
+Added: 2009-07-29
+Macrolanguage: hmn
+%%
+Type: language
+Subtag: hmq
+Description: Eastern Qiandong Miao
+Added: 2009-07-29
+Macrolanguage: hmn
+%%
+Type: language
+Subtag: hmr
+Description: Hmar
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hms
+Description: Southern Qiandong Miao
+Added: 2009-07-29
+Macrolanguage: hmn
+%%
+Type: language
+Subtag: hmt
+Description: Hamtai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hmu
+Description: Hamap
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hmv
+Description: Hmong Dô
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hmw
+Description: Western Mashan Hmong
+Description: Western Mashan Miao
+Added: 2009-07-29
+Macrolanguage: hmn
+%%
+Type: language
+Subtag: hmx
+Description: Hmong-Mien languages
+Added: 2009-07-29
+Scope: collection
+%%
+Type: language
+Subtag: hmy
+Description: Southern Guiyang Hmong
+Description: Southern Guiyang Miao
+Added: 2009-07-29
+Macrolanguage: hmn
+%%
+Type: language
+Subtag: hmz
+Description: Hmong Shua
+Description: Sinicized Miao
+Added: 2009-07-29
+Macrolanguage: hmn
+%%
+Type: language
+Subtag: hna
+Description: Mina (Cameroon)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hnd
+Description: Southern Hindko
+Added: 2009-07-29
+Macrolanguage: lah
+%%
+Type: language
+Subtag: hne
+Description: Chhattisgarhi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hnh
+Description: //Ani
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hni
+Description: Hani
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hnj
+Description: Hmong Njua
+Description: Mong Leng
+Description: Mong Njua
+Added: 2009-07-29
+Macrolanguage: hmn
+%%
+Type: language
+Subtag: hnn
+Description: Hanunoo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hno
+Description: Northern Hindko
+Added: 2009-07-29
+Macrolanguage: lah
+%%
+Type: language
+Subtag: hns
+Description: Caribbean Hindustani
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hnu
+Description: Hung
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hoa
+Description: Hoava
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hob
+Description: Mari (Madang Province)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hoc
+Description: Ho
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hod
+Description: Holma
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hoe
+Description: Horom
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hoh
+Description: Hobyót
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hoi
+Description: Holikachuk
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hoj
+Description: Hadothi
+Description: Haroti
+Added: 2009-07-29
+Macrolanguage: raj
+%%
+Type: language
+Subtag: hok
+Description: Hokan languages
+Added: 2009-07-29
+Scope: collection
+%%
+Type: language
+Subtag: hol
+Description: Holu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hom
+Description: Homa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hoo
+Description: Holoholo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hop
+Description: Hopi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hor
+Description: Horo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hos
+Description: Ho Chi Minh City Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hot
+Description: Hote
+Description: Malê
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hov
+Description: Hovongan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: how
+Description: Honi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hoy
+Description: Holiya
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hoz
+Description: Hozo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hpo
+Description: Hpon
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hps
+Description: Hawai'i Pidgin Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hra
+Description: Hrangkhol
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hre
+Description: Hre
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hrk
+Description: Haruku
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hrm
+Description: Horned Miao
+Added: 2009-07-29
+Macrolanguage: hmn
+%%
+Type: language
+Subtag: hro
+Description: Haroi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hrr
+Description: Horuru
+Added: 2009-07-29
+Deprecated: 2012-08-12
+Preferred-Value: jal
+%%
+Type: language
+Subtag: hrt
+Description: Hértevin
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hru
+Description: Hruso
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hrx
+Description: Hunsrik
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hrz
+Description: Harzani
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hsb
+Description: Upper Sorbian
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: hsh
+Description: Hungarian Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hsl
+Description: Hausa Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hsn
+Description: Xiang Chinese
+Added: 2009-07-29
+Macrolanguage: zh
+%%
+Type: language
+Subtag: hss
+Description: Harsusi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hti
+Description: Hoti
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hto
+Description: Minica Huitoto
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hts
+Description: Hadza
+Added: 2009-07-29
+%%
+Type: language
+Subtag: htu
+Description: Hitu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: htx
+Description: Middle Hittite
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hub
+Description: Huambisa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: huc
+Description: =/Hua
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hud
+Description: Huaulu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hue
+Description: San Francisco Del Mar Huave
+Added: 2009-07-29
+%%
+Type: language
+Subtag: huf
+Description: Humene
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hug
+Description: Huachipaeri
+Added: 2009-07-29
+%%
+Type: language
+Subtag: huh
+Description: Huilliche
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hui
+Description: Huli
+Added: 2009-07-29
+%%
+Type: language
+Subtag: huj
+Description: Northern Guiyang Hmong
+Description: Northern Guiyang Miao
+Added: 2009-07-29
+Macrolanguage: hmn
+%%
+Type: language
+Subtag: huk
+Description: Hulung
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hul
+Description: Hula
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hum
+Description: Hungana
+Added: 2009-07-29
+%%
+Type: language
+Subtag: huo
+Description: Hu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hup
+Description: Hupa
+Added: 2005-10-16
+%%
+Type: language
+Subtag: huq
+Description: Tsat
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hur
+Description: Halkomelem
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hus
+Description: Huastec
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hut
+Description: Humla
+Added: 2009-07-29
+%%
+Type: language
+Subtag: huu
+Description: Murui Huitoto
+Added: 2009-07-29
+%%
+Type: language
+Subtag: huv
+Description: San Mateo Del Mar Huave
+Added: 2009-07-29
+%%
+Type: language
+Subtag: huw
+Description: Hukumina
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hux
+Description: Nüpode Huitoto
+Added: 2009-07-29
+%%
+Type: language
+Subtag: huy
+Description: Hulaulá
+Added: 2009-07-29
+%%
+Type: language
+Subtag: huz
+Description: Hunzib
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hvc
+Description: Haitian Vodoun Culture Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hve
+Description: San Dionisio Del Mar Huave
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hvk
+Description: Haveke
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hvn
+Description: Sabu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hvv
+Description: Santa María Del Mar Huave
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hwa
+Description: Wané
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hwc
+Description: Hawai'i Creole English
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hwo
+Description: Hwana
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hya
+Description: Hya
+Added: 2009-07-29
+%%
+Type: language
+Subtag: hyx
+Description: Armenian (family)
+Added: 2009-07-29
+Scope: collection
+%%
+Type: language
+Subtag: iai
+Description: Iaai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ian
+Description: Iatmul
+Added: 2009-07-29
+%%
+Type: language
+Subtag: iap
+Description: Iapama
+Added: 2009-07-29
+%%
+Type: language
+Subtag: iar
+Description: Purari
+Added: 2009-07-29
+%%
+Type: language
+Subtag: iba
+Description: Iban
+Added: 2005-10-16
+%%
+Type: language
+Subtag: ibb
+Description: Ibibio
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ibd
+Description: Iwaidja
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ibe
+Description: Akpes
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ibg
+Description: Ibanag
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ibi
+Description: Ibilo
+Added: 2009-07-29
+Deprecated: 2012-08-12
+Preferred-Value: opa
+%%
+Type: language
+Subtag: ibl
+Description: Ibaloi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ibm
+Description: Agoi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ibn
+Description: Ibino
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ibr
+Description: Ibuoro
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ibu
+Description: Ibu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: iby
+Description: Ibani
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ica
+Description: Ede Ica
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ich
+Description: Etkywan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: icl
+Description: Icelandic Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: icr
+Description: Islander Creole English
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ida
+Description: Idakho-Isukha-Tiriki
+Description: Luidakho-Luisukha-Lutirichi
+Added: 2009-07-29
+Macrolanguage: luy
+%%
+Type: language
+Subtag: idb
+Description: Indo-Portuguese
+Added: 2009-07-29
+%%
+Type: language
+Subtag: idc
+Description: Idon
+Added: 2009-07-29
+%%
+Type: language
+Subtag: idd
+Description: Ede Idaca
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ide
+Description: Idere
+Added: 2009-07-29
+%%
+Type: language
+Subtag: idi
+Description: Idi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: idr
+Description: Indri
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ids
+Description: Idesa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: idt
+Description: Idaté
+Added: 2009-07-29
+%%
+Type: language
+Subtag: idu
+Description: Idoma
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ifa
+Description: Amganad Ifugao
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ifb
+Description: Batad Ifugao
+Description: Ayangan Ifugao
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ife
+Description: Ifè
+Added: 2009-07-29
+%%
+Type: language
+Subtag: iff
+Description: Ifo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ifk
+Description: Tuwali Ifugao
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ifm
+Description: Teke-Fuumu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ifu
+Description: Mayoyao Ifugao
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ify
+Description: Keley-I Kallahan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: igb
+Description: Ebira
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ige
+Description: Igede
+Added: 2009-07-29
+%%
+Type: language
+Subtag: igg
+Description: Igana
+Added: 2009-07-29
+%%
+Type: language
+Subtag: igl
+Description: Igala
+Added: 2009-07-29
+%%
+Type: language
+Subtag: igm
+Description: Kanggape
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ign
+Description: Ignaciano
+Added: 2009-07-29
+%%
+Type: language
+Subtag: igo
+Description: Isebe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: igs
+Description: Interglossa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: igw
+Description: Igwe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ihb
+Description: Iha Based Pidgin
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ihi
+Description: Ihievbe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ihp
+Description: Iha
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ihw
+Description: Bidhawal
+Added: 2012-08-12
+%%
+Type: language
+Subtag: iir
+Description: Indo-Iranian languages
+Added: 2009-07-29
+Scope: collection
+%%
+Type: language
+Subtag: ijc
+Description: Izon
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ije
+Description: Biseni
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ijj
+Description: Ede Ije
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ijn
+Description: Kalabari
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ijo
+Description: Ijo languages
+Added: 2005-10-16
+Scope: collection
+%%
+Type: language
+Subtag: ijs
+Description: Southeast Ijo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ike
+Description: Eastern Canadian Inuktitut
+Added: 2009-07-29
+Macrolanguage: iu
+%%
+Type: language
+Subtag: iki
+Description: Iko
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ikk
+Description: Ika
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ikl
+Description: Ikulu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: iko
+Description: Olulumo-Ikom
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ikp
+Description: Ikpeshi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ikt
+Description: Inuinnaqtun
+Description: Western Canadian Inuktitut
+Added: 2009-07-29
+Macrolanguage: iu
+%%
+Type: language
+Subtag: ikv
+Description: Iku-Gora-Ankwa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ikw
+Description: Ikwere
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ikx
+Description: Ik
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ikz
+Description: Ikizu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ila
+Description: Ile Ape
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ilb
+Description: Ila
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ilg
+Description: Garig-Ilgar
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ili
+Description: Ili Turki
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ilk
+Description: Ilongot
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ill
+Description: Iranun
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ilo
+Description: Iloko
+Added: 2005-10-16
+%%
+Type: language
+Subtag: ils
+Description: International Sign
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ilu
+Description: Ili'uun
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ilv
+Description: Ilue
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ilw
+Description: Talur
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ima
+Description: Mala Malasar
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ime
+Description: Imeraguen
+Added: 2009-07-29
+%%
+Type: language
+Subtag: imi
+Description: Anamgura
+Added: 2009-07-29
+%%
+Type: language
+Subtag: iml
+Description: Miluk
+Added: 2009-07-29
+%%
+Type: language
+Subtag: imn
+Description: Imonda
+Added: 2009-07-29
+%%
+Type: language
+Subtag: imo
+Description: Imbongu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: imr
+Description: Imroing
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ims
+Description: Marsian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: imy
+Description: Milyan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: inb
+Description: Inga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: inc
+Description: Indic languages
+Added: 2005-10-16
+Scope: collection
+%%
+Type: language
+Subtag: ine
+Description: Indo-European languages
+Added: 2005-10-16
+Scope: collection
+%%
+Type: language
+Subtag: ing
+Description: Degexit'an
+Added: 2009-07-29
+%%
+Type: language
+Subtag: inh
+Description: Ingush
+Added: 2005-10-16
+%%
+Type: language
+Subtag: inj
+Description: Jungle Inga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: inl
+Description: Indonesian Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: inm
+Description: Minaean
+Added: 2009-07-29
+%%
+Type: language
+Subtag: inn
+Description: Isinai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ino
+Description: Inoke-Yate
+Added: 2009-07-29
+%%
+Type: language
+Subtag: inp
+Description: Iñapari
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ins
+Description: Indian Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: int
+Description: Intha
+Added: 2009-07-29
+%%
+Type: language
+Subtag: inz
+Description: Ineseño
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ior
+Description: Inor
+Added: 2009-07-29
+%%
+Type: language
+Subtag: iou
+Description: Tuma-Irumu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: iow
+Description: Iowa-Oto
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ipi
+Description: Ipili
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ipo
+Description: Ipiko
+Added: 2009-07-29
+%%
+Type: language
+Subtag: iqu
+Description: Iquito
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ira
+Description: Iranian languages
+Added: 2005-10-16
+Scope: collection
+%%
+Type: language
+Subtag: ire
+Description: Iresim
+Added: 2009-07-29
+%%
+Type: language
+Subtag: irh
+Description: Irarutu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: iri
+Description: Irigwe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: irk
+Description: Iraqw
+Added: 2009-07-29
+%%
+Type: language
+Subtag: irn
+Description: Irántxe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: iro
+Description: Iroquoian languages
+Added: 2005-10-16
+Scope: collection
+%%
+Type: language
+Subtag: irr
+Description: Ir
+Added: 2009-07-29
+%%
+Type: language
+Subtag: iru
+Description: Irula
+Added: 2009-07-29
+%%
+Type: language
+Subtag: irx
+Description: Kamberau
+Added: 2009-07-29
+%%
+Type: language
+Subtag: iry
+Description: Iraya
+Added: 2009-07-29
+%%
+Type: language
+Subtag: isa
+Description: Isabi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: isc
+Description: Isconahua
+Added: 2009-07-29
+%%
+Type: language
+Subtag: isd
+Description: Isnag
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ise
+Description: Italian Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: isg
+Description: Irish Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ish
+Description: Esan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: isi
+Description: Nkem-Nkum
+Added: 2009-07-29
+%%
+Type: language
+Subtag: isk
+Description: Ishkashimi
+Added: 2010-03-11
+%%
+Type: language
+Subtag: ism
+Description: Masimasi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: isn
+Description: Isanzu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: iso
+Description: Isoko
+Added: 2009-07-29
+%%
+Type: language
+Subtag: isr
+Description: Israeli Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ist
+Description: Istriot
+Added: 2009-07-29
+%%
+Type: language
+Subtag: isu
+Description: Isu (Menchum Division)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: itb
+Description: Binongan Itneg
+Added: 2009-07-29
+%%
+Type: language
+Subtag: itc
+Description: Italic languages
+Added: 2009-07-29
+Scope: collection
+%%
+Type: language
+Subtag: ite
+Description: Itene
+Added: 2009-07-29
+%%
+Type: language
+Subtag: iti
+Description: Inlaod Itneg
+Added: 2009-07-29
+%%
+Type: language
+Subtag: itk
+Description: Judeo-Italian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: itl
+Description: Itelmen
+Added: 2009-07-29
+%%
+Type: language
+Subtag: itm
+Description: Itu Mbon Uzo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ito
+Description: Itonama
+Added: 2009-07-29
+%%
+Type: language
+Subtag: itr
+Description: Iteri
+Added: 2009-07-29
+%%
+Type: language
+Subtag: its
+Description: Isekiri
+Added: 2009-07-29
+%%
+Type: language
+Subtag: itt
+Description: Maeng Itneg
+Added: 2009-07-29
+%%
+Type: language
+Subtag: itv
+Description: Itawit
+Added: 2009-07-29
+%%
+Type: language
+Subtag: itw
+Description: Ito
+Added: 2009-07-29
+%%
+Type: language
+Subtag: itx
+Description: Itik
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ity
+Description: Moyadan Itneg
+Added: 2009-07-29
+%%
+Type: language
+Subtag: itz
+Description: Itzá
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ium
+Description: Iu Mien
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ivb
+Description: Ibatan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ivv
+Description: Ivatan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: iwk
+Description: I-Wak
+Added: 2009-07-29
+%%
+Type: language
+Subtag: iwm
+Description: Iwam
+Added: 2009-07-29
+%%
+Type: language
+Subtag: iwo
+Description: Iwur
+Added: 2009-07-29
+%%
+Type: language
+Subtag: iws
+Description: Sepik Iwam
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ixc
+Description: Ixcatec
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ixl
+Description: Ixil
+Added: 2009-07-29
+%%
+Type: language
+Subtag: iya
+Description: Iyayu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: iyo
+Description: Mesaka
+Added: 2009-07-29
+%%
+Type: language
+Subtag: iyx
+Description: Yaka (Congo)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: izh
+Description: Ingrian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: izi
+Description: Izi-Ezaa-Ikwo-Mgbo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: izr
+Description: Izere
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jaa
+Description: Jamamadí
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jab
+Description: Hyam
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jac
+Description: Popti'
+Description: Jakalteko
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jad
+Description: Jahanka
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jae
+Description: Yabem
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jaf
+Description: Jara
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jah
+Description: Jah Hut
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jaj
+Description: Zazao
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jak
+Description: Jakun
+Added: 2009-07-29
+Macrolanguage: ms
+%%
+Type: language
+Subtag: jal
+Description: Yalahatan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jam
+Description: Jamaican Creole English
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jan
+Description: Jandai
+Added: 2012-08-12
+%%
+Type: language
+Subtag: jao
+Description: Yanyuwa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jaq
+Description: Yaqay
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jar
+Description: Jarawa (Nigeria)
+Added: 2009-07-29
+Deprecated: 2012-08-12
+Comments: see jgk, jjr
+%%
+Type: language
+Subtag: jas
+Description: New Caledonian Javanese
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jat
+Description: Jakati
+Added: 2009-07-29
+Macrolanguage: lah
+%%
+Type: language
+Subtag: jau
+Description: Yaur
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jax
+Description: Jambi Malay
+Added: 2009-07-29
+Macrolanguage: ms
+%%
+Type: language
+Subtag: jay
+Description: Yan-nhangu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jaz
+Description: Jawe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jbe
+Description: Judeo-Berber
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jbj
+Description: Arandai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jbk
+Description: Barikewa
+Added: 2012-08-12
+%%
+Type: language
+Subtag: jbn
+Description: Nafusi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jbo
+Description: Lojban
+Added: 2005-10-16
+%%
+Type: language
+Subtag: jbr
+Description: Jofotek-Bromnya
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jbt
+Description: Jabutí
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jbu
+Description: Jukun Takum
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jbw
+Description: Yawijibaya
+Added: 2012-08-12
+%%
+Type: language
+Subtag: jcs
+Description: Jamaican Country Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jct
+Description: Krymchak
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jda
+Description: Jad
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jdg
+Description: Jadgali
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jdt
+Description: Judeo-Tat
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jeb
+Description: Jebero
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jee
+Description: Jerung
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jeg
+Description: Jeng
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jeh
+Description: Jeh
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jei
+Description: Yei
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jek
+Description: Jeri Kuo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jel
+Description: Yelmek
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jen
+Description: Dza
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jer
+Description: Jere
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jet
+Description: Manem
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jeu
+Description: Jonkor Bourmataguil
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jgb
+Description: Ngbee
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jge
+Description: Judeo-Georgian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jgk
+Description: Gwak
+Added: 2012-08-12
+%%
+Type: language
+Subtag: jgo
+Description: Ngomba
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jhi
+Description: Jehai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jhs
+Description: Jhankot Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jia
+Description: Jina
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jib
+Description: Jibu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jic
+Description: Tol
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jid
+Description: Bu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jie
+Description: Jilbe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jig
+Description: Djingili
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jih
+Description: sTodsde
+Description: Shangzhai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jii
+Description: Jiiddu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jil
+Description: Jilim
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jim
+Description: Jimi (Cameroon)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jio
+Description: Jiamao
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jiq
+Description: Guanyinqiao
+Description: Lavrung
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jit
+Description: Jita
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jiu
+Description: Youle Jinuo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jiv
+Description: Shuar
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jiy
+Description: Buyuan Jinuo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jjr
+Description: Bankal
+Added: 2012-08-12
+%%
+Type: language
+Subtag: jkm
+Description: Mobwa Karen
+Added: 2012-08-12
+%%
+Type: language
+Subtag: jko
+Description: Kubo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jkp
+Description: Paku Karen
+Added: 2012-08-12
+%%
+Type: language
+Subtag: jkr
+Description: Koro (India)
+Added: 2012-08-12
+%%
+Type: language
+Subtag: jku
+Description: Labir
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jle
+Description: Ngile
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jls
+Description: Jamaican Sign Language
+Added: 2010-03-11
+%%
+Type: language
+Subtag: jma
+Description: Dima
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jmb
+Description: Zumbun
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jmc
+Description: Machame
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jmd
+Description: Yamdena
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jmi
+Description: Jimi (Nigeria)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jml
+Description: Jumli
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jmn
+Description: Makuri Naga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jmr
+Description: Kamara
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jms
+Description: Mashi (Nigeria)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jmw
+Description: Mouwase
+Added: 2012-08-12
+%%
+Type: language
+Subtag: jmx
+Description: Western Juxtlahuaca Mixtec
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jna
+Description: Jangshung
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jnd
+Description: Jandavra
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jng
+Description: Yangman
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jni
+Description: Janji
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jnj
+Description: Yemsa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jnl
+Description: Rawat
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jns
+Description: Jaunsari
+Added: 2009-07-29
+%%
+Type: language
+Subtag: job
+Description: Joba
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jod
+Description: Wojenaka
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jor
+Description: Jorá
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jos
+Description: Jordanian Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jow
+Description: Jowulu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jpa
+Description: Jewish Palestinian Aramaic
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jpr
+Description: Judeo-Persian
+Added: 2005-10-16
+%%
+Type: language
+Subtag: jpx
+Description: Japanese (family)
+Added: 2009-07-29
+Scope: collection
+%%
+Type: language
+Subtag: jqr
+Description: Jaqaru
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jra
+Description: Jarai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jrb
+Description: Judeo-Arabic
+Added: 2005-10-16
+Scope: macrolanguage
+%%
+Type: language
+Subtag: jrr
+Description: Jiru
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jrt
+Description: Jorto
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jru
+Description: Japrería
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jsl
+Description: Japanese Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jua
+Description: Júma
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jub
+Description: Wannu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: juc
+Description: Jurchen
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jud
+Description: Worodougou
+Added: 2009-07-29
+%%
+Type: language
+Subtag: juh
+Description: Hõne
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jui
+Description: Ngadjuri
+Added: 2012-08-12
+%%
+Type: language
+Subtag: juk
+Description: Wapan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jul
+Description: Jirel
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jum
+Description: Jumjum
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jun
+Description: Juang
+Added: 2009-07-29
+%%
+Type: language
+Subtag: juo
+Description: Jiba
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jup
+Description: Hupdë
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jur
+Description: Jurúna
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jus
+Description: Jumla Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jut
+Description: Jutish
+Added: 2009-07-29
+%%
+Type: language
+Subtag: juu
+Description: Ju
+Added: 2009-07-29
+%%
+Type: language
+Subtag: juw
+Description: Wãpha
+Added: 2009-07-29
+%%
+Type: language
+Subtag: juy
+Description: Juray
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jvd
+Description: Javindo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jvn
+Description: Caribbean Javanese
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jwi
+Description: Jwira-Pepesa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jya
+Description: Jiarong
+Added: 2009-07-29
+%%
+Type: language
+Subtag: jye
+Description: Judeo-Yemeni Arabic
+Added: 2009-07-29
+Macrolanguage: jrb
+%%
+Type: language
+Subtag: jyy
+Description: Jaya
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kaa
+Description: Kara-Kalpak
+Added: 2005-10-16
+%%
+Type: language
+Subtag: kab
+Description: Kabyle
+Added: 2005-10-16
+%%
+Type: language
+Subtag: kac
+Description: Kachin
+Description: Jingpho
+Added: 2005-10-16
+%%
+Type: language
+Subtag: kad
+Description: Adara
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kae
+Description: Ketangalan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kaf
+Description: Katso
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kag
+Description: Kajaman
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kah
+Description: Kara (Central African Republic)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kai
+Description: Karekare
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kaj
+Description: Jju
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kak
+Description: Kayapa Kallahan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kam
+Description: Kamba (Kenya)
+Added: 2005-10-16
+%%
+Type: language
+Subtag: kao
+Description: Xaasongaxango
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kap
+Description: Bezhta
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kaq
+Description: Capanahua
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kar
+Description: Karen languages
+Added: 2005-10-16
+Scope: collection
+%%
+Type: language
+Subtag: kav
+Description: Katukína
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kaw
+Description: Kawi
+Added: 2005-10-16
+%%
+Type: language
+Subtag: kax
+Description: Kao
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kay
+Description: Kamayurá
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kba
+Description: Kalarko
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kbb
+Description: Kaxuiâna
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kbc
+Description: Kadiwéu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kbd
+Description: Kabardian
+Added: 2005-10-16
+%%
+Type: language
+Subtag: kbe
+Description: Kanju
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kbf
+Description: Kakauhua
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kbg
+Description: Khamba
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kbh
+Description: Camsá
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kbi
+Description: Kaptiau
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kbj
+Description: Kari
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kbk
+Description: Grass Koiari
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kbl
+Description: Kanembu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kbm
+Description: Iwal
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kbn
+Description: Kare (Central African Republic)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kbo
+Description: Keliko
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kbp
+Description: Kabiyè
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kbq
+Description: Kamano
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kbr
+Description: Kafa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kbs
+Description: Kande
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kbt
+Description: Abadi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kbu
+Description: Kabutra
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kbv
+Description: Dera (Indonesia)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kbw
+Description: Kaiep
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kbx
+Description: Ap Ma
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kby
+Description: Manga Kanuri
+Added: 2009-07-29
+Macrolanguage: kr
+%%
+Type: language
+Subtag: kbz
+Description: Duhwa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kca
+Description: Khanty
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kcb
+Description: Kawacha
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kcc
+Description: Lubila
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kcd
+Description: Ngkâlmpw Kanum
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kce
+Description: Kaivi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kcf
+Description: Ukaan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kcg
+Description: Tyap
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kch
+Description: Vono
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kci
+Description: Kamantan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kcj
+Description: Kobiana
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kck
+Description: Kalanga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kcl
+Description: Kela (Papua New Guinea)
+Description: Kala
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kcm
+Description: Gula (Central African Republic)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kcn
+Description: Nubi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kco
+Description: Kinalakna
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kcp
+Description: Kanga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kcq
+Description: Kamo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kcr
+Description: Katla
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kcs
+Description: Koenoem
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kct
+Description: Kaian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kcu
+Description: Kami (Tanzania)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kcv
+Description: Kete
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kcw
+Description: Kabwari
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kcx
+Description: Kachama-Ganjule
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kcy
+Description: Korandje
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kcz
+Description: Konongo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kda
+Description: Worimi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kdc
+Description: Kutu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kdd
+Description: Yankunytjatjara
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kde
+Description: Makonde
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kdf
+Description: Mamusi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kdg
+Description: Seba
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kdh
+Description: Tem
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kdi
+Description: Kumam
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kdj
+Description: Karamojong
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kdk
+Description: Numee
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kdl
+Description: Tsikimba
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kdm
+Description: Kagoma
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kdn
+Description: Kunda
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kdo
+Description: Kordofanian languages
+Added: 2009-07-29
+Scope: collection
+%%
+Type: language
+Subtag: kdp
+Description: Kaningdon-Nindem
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kdq
+Description: Koch
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kdr
+Description: Karaim
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kdt
+Description: Kuy
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kdu
+Description: Kadaru
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kdv
+Description: Kado
+Added: 2009-07-29
+Deprecated: 2012-08-12
+Comments: see zkd, zkn
+%%
+Type: language
+Subtag: kdw
+Description: Koneraw
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kdx
+Description: Kam
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kdy
+Description: Keder
+Description: Keijar
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kdz
+Description: Kwaja
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kea
+Description: Kabuverdianu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: keb
+Description: Kélé
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kec
+Description: Keiga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ked
+Description: Kerewe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kee
+Description: Eastern Keres
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kef
+Description: Kpessi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: keg
+Description: Tese
+Added: 2009-07-29
+%%
+Type: language
+Subtag: keh
+Description: Keak
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kei
+Description: Kei
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kej
+Description: Kadar
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kek
+Description: Kekchí
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kel
+Description: Kela (Democratic Republic of Congo)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kem
+Description: Kemak
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ken
+Description: Kenyang
+Added: 2009-07-29
+%%
+Type: language
+Subtag: keo
+Description: Kakwa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kep
+Description: Kaikadi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: keq
+Description: Kamar
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ker
+Description: Kera
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kes
+Description: Kugbo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ket
+Description: Ket
+Added: 2009-07-29
+%%
+Type: language
+Subtag: keu
+Description: Akebu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kev
+Description: Kanikkaran
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kew
+Description: West Kewa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kex
+Description: Kukna
+Added: 2009-07-29
+%%
+Type: language
+Subtag: key
+Description: Kupia
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kez
+Description: Kukele
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kfa
+Description: Kodava
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kfb
+Description: Northwestern Kolami
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kfc
+Description: Konda-Dora
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kfd
+Description: Korra Koraga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kfe
+Description: Kota (India)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kff
+Description: Koya
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kfg
+Description: Kudiya
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kfh
+Description: Kurichiya
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kfi
+Description: Kannada Kurumba
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kfj
+Description: Kemiehua
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kfk
+Description: Kinnauri
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kfl
+Description: Kung
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kfm
+Description: Khunsari
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kfn
+Description: Kuk
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kfo
+Description: Koro (Côte d'Ivoire)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kfp
+Description: Korwa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kfq
+Description: Korku
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kfr
+Description: Kachchi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kfs
+Description: Bilaspuri
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kft
+Description: Kanjari
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kfu
+Description: Katkari
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kfv
+Description: Kurmukar
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kfw
+Description: Kharam Naga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kfx
+Description: Kullu Pahari
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kfy
+Description: Kumaoni
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kfz
+Description: Koromfé
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kga
+Description: Koyaga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kgb
+Description: Kawe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kgc
+Description: Kasseng
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kgd
+Description: Kataang
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kge
+Description: Komering
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kgf
+Description: Kube
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kgg
+Description: Kusunda
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kgh
+Description: Upper Tanudan Kalinga
+Added: 2009-07-29
+Deprecated: 2012-08-12
+Preferred-Value: kml
+%%
+Type: language
+Subtag: kgi
+Description: Selangor Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kgj
+Description: Gamale Kham
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kgk
+Description: Kaiwá
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kgl
+Description: Kunggari
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kgm
+Description: Karipúna
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kgn
+Description: Karingani
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kgo
+Description: Krongo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kgp
+Description: Kaingang
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kgq
+Description: Kamoro
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kgr
+Description: Abun
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kgs
+Description: Kumbainggar
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kgt
+Description: Somyev
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kgu
+Description: Kobol
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kgv
+Description: Karas
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kgw
+Description: Karon Dori
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kgx
+Description: Kamaru
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kgy
+Description: Kyerung
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kha
+Description: Khasi
+Added: 2005-10-16
+Comments: as of 2008-04-21 this subtag does not include Lyngngam; see
+  lyg
+%%
+Type: language
+Subtag: khb
+Description: Lü
+Added: 2009-07-29
+%%
+Type: language
+Subtag: khc
+Description: Tukang Besi North
+Added: 2009-07-29
+%%
+Type: language
+Subtag: khd
+Description: Bädi Kanum
+Added: 2009-07-29
+%%
+Type: language
+Subtag: khe
+Description: Korowai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: khf
+Description: Khuen
+Added: 2009-07-29
+%%
+Type: language
+Subtag: khg
+Description: Khams Tibetan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: khh
+Description: Kehu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: khi
+Description: Khoisan languages
+Added: 2005-10-16
+Scope: collection
+%%
+Type: language
+Subtag: khj
+Description: Kuturmi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: khk
+Description: Halh Mongolian
+Added: 2009-07-29
+Macrolanguage: mn
+%%
+Type: language
+Subtag: khl
+Description: Lusi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: khn
+Description: Khandesi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kho
+Description: Khotanese
+Description: Sakan
+Added: 2005-10-16
+%%
+Type: language
+Subtag: khp
+Description: Kapori
+Description: Kapauri
+Added: 2009-07-29
+%%
+Type: language
+Subtag: khq
+Description: Koyra Chiini Songhay
+Added: 2009-07-29
+%%
+Type: language
+Subtag: khr
+Description: Kharia
+Added: 2009-07-29
+%%
+Type: language
+Subtag: khs
+Description: Kasua
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kht
+Description: Khamti
+Added: 2009-07-29
+%%
+Type: language
+Subtag: khu
+Description: Nkhumbi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: khv
+Description: Khvarshi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: khw
+Description: Khowar
+Added: 2009-07-29
+%%
+Type: language
+Subtag: khx
+Description: Kanu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: khy
+Description: Kele (Democratic Republic of Congo)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: khz
+Description: Keapara
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kia
+Description: Kim
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kib
+Description: Koalib
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kic
+Description: Kickapoo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kid
+Description: Koshin
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kie
+Description: Kibet
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kif
+Description: Eastern Parbate Kham
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kig
+Description: Kimaama
+Description: Kimaghima
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kih
+Description: Kilmeri
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kii
+Description: Kitsai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kij
+Description: Kilivila
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kil
+Description: Kariya
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kim
+Description: Karagas
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kio
+Description: Kiowa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kip
+Description: Sheshi Kham
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kiq
+Description: Kosadle
+Description: Kosare
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kis
+Description: Kis
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kit
+Description: Agob
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kiu
+Description: Kirmanjki (individual language)
+Added: 2009-07-29
+Macrolanguage: zza
+%%
+Type: language
+Subtag: kiv
+Description: Kimbu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kiw
+Description: Northeast Kiwai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kix
+Description: Khiamniungan Naga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kiy
+Description: Kirikiri
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kiz
+Description: Kisi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kja
+Description: Mlap
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kjb
+Description: Q'anjob'al
+Description: Kanjobal
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kjc
+Description: Coastal Konjo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kjd
+Description: Southern Kiwai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kje
+Description: Kisar
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kjf
+Description: Khalaj
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kjg
+Description: Khmu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kjh
+Description: Khakas
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kji
+Description: Zabana
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kjj
+Description: Khinalugh
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kjk
+Description: Highland Konjo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kjl
+Description: Western Parbate Kham
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kjm
+Description: Kháng
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kjn
+Description: Kunjen
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kjo
+Description: Harijan Kinnauri
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kjp
+Description: Pwo Eastern Karen
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kjq
+Description: Western Keres
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kjr
+Description: Kurudu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kjs
+Description: East Kewa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kjt
+Description: Phrae Pwo Karen
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kju
+Description: Kashaya
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kjx
+Description: Ramopa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kjy
+Description: Erave
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kjz
+Description: Bumthangkha
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kka
+Description: Kakanda
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kkb
+Description: Kwerisa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kkc
+Description: Odoodee
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kkd
+Description: Kinuku
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kke
+Description: Kakabe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kkf
+Description: Kalaktang Monpa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kkg
+Description: Mabaka Valley Kalinga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kkh
+Description: Khün
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kki
+Description: Kagulu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kkj
+Description: Kako
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kkk
+Description: Kokota
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kkl
+Description: Kosarek Yale
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kkm
+Description: Kiong
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kkn
+Description: Kon Keu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kko
+Description: Karko
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kkp
+Description: Gugubera
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kkq
+Description: Kaiku
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kkr
+Description: Kir-Balar
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kks
+Description: Giiwo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kkt
+Description: Koi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kku
+Description: Tumi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kkv
+Description: Kangean
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kkw
+Description: Teke-Kukuya
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kkx
+Description: Kohin
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kky
+Description: Guguyimidjir
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kkz
+Description: Kaska
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kla
+Description: Klamath-Modoc
+Added: 2009-07-29
+%%
+Type: language
+Subtag: klb
+Description: Kiliwa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: klc
+Description: Kolbila
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kld
+Description: Gamilaraay
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kle
+Description: Kulung (Nepal)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: klf
+Description: Kendeje
+Added: 2009-07-29
+%%
+Type: language
+Subtag: klg
+Description: Tagakaulo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: klh
+Description: Weliki
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kli
+Description: Kalumpang
+Added: 2009-07-29
+%%
+Type: language
+Subtag: klj
+Description: Turkic Khalaj
+Added: 2009-07-29
+%%
+Type: language
+Subtag: klk
+Description: Kono (Nigeria)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kll
+Description: Kagan Kalagan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: klm
+Description: Migum
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kln
+Description: Kalenjin
+Added: 2009-07-29
+Scope: macrolanguage
+%%
+Type: language
+Subtag: klo
+Description: Kapya
+Added: 2009-07-29
+%%
+Type: language
+Subtag: klp
+Description: Kamasa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: klq
+Description: Rumu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: klr
+Description: Khaling
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kls
+Description: Kalasha
+Added: 2009-07-29
+%%
+Type: language
+Subtag: klt
+Description: Nukna
+Added: 2009-07-29
+%%
+Type: language
+Subtag: klu
+Description: Klao
+Added: 2009-07-29
+%%
+Type: language
+Subtag: klv
+Description: Maskelynes
+Added: 2009-07-29
+%%
+Type: language
+Subtag: klw
+Description: Lindu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: klx
+Description: Koluwawa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kly
+Description: Kalao
+Added: 2009-07-29
+%%
+Type: language
+Subtag: klz
+Description: Kabola
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kma
+Description: Konni
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kmb
+Description: Kimbundu
+Added: 2005-10-16
+%%
+Type: language
+Subtag: kmc
+Description: Southern Dong
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kmd
+Description: Majukayang Kalinga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kme
+Description: Bakole
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kmf
+Description: Kare (Papua New Guinea)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kmg
+Description: Kâte
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kmh
+Description: Kalam
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kmi
+Description: Kami (Nigeria)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kmj
+Description: Kumarbhag Paharia
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kmk
+Description: Limos Kalinga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kml
+Description: Tanudan Kalinga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kmm
+Description: Kom (India)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kmn
+Description: Awtuw
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kmo
+Description: Kwoma
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kmp
+Description: Gimme
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kmq
+Description: Kwama
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kmr
+Description: Northern Kurdish
+Added: 2009-07-29
+Macrolanguage: ku
+%%
+Type: language
+Subtag: kms
+Description: Kamasau
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kmt
+Description: Kemtuik
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kmu
+Description: Kanite
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kmv
+Description: Karipúna Creole French
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kmw
+Description: Komo (Democratic Republic of Congo)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kmx
+Description: Waboda
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kmy
+Description: Koma
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kmz
+Description: Khorasani Turkish
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kna
+Description: Dera (Nigeria)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: knb
+Description: Lubuagan Kalinga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: knc
+Description: Central Kanuri
+Added: 2009-07-29
+Macrolanguage: kr
+%%
+Type: language
+Subtag: knd
+Description: Konda
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kne
+Description: Kankanaey
+Added: 2009-07-29
+%%
+Type: language
+Subtag: knf
+Description: Mankanya
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kng
+Description: Koongo
+Added: 2009-07-29
+Macrolanguage: kg
+%%
+Type: language
+Subtag: kni
+Description: Kanufi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: knj
+Description: Western Kanjobal
+Added: 2009-07-29
+%%
+Type: language
+Subtag: knk
+Description: Kuranko
+Added: 2009-07-29
+%%
+Type: language
+Subtag: knl
+Description: Keninjal
+Added: 2009-07-29
+%%
+Type: language
+Subtag: knm
+Description: Kanamarí
+Added: 2009-07-29
+%%
+Type: language
+Subtag: knn
+Description: Konkani (individual language)
+Added: 2009-07-29
+Macrolanguage: kok
+%%
+Type: language
+Subtag: kno
+Description: Kono (Sierra Leone)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: knp
+Description: Kwanja
+Added: 2009-07-29
+%%
+Type: language
+Subtag: knq
+Description: Kintaq
+Added: 2009-07-29
+%%
+Type: language
+Subtag: knr
+Description: Kaningra
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kns
+Description: Kensiu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: knt
+Description: Panoan Katukína
+Added: 2009-07-29
+%%
+Type: language
+Subtag: knu
+Description: Kono (Guinea)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: knv
+Description: Tabo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: knw
+Description: Kung-Ekoka
+Added: 2009-07-29
+%%
+Type: language
+Subtag: knx
+Description: Kendayan
+Description: Salako
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kny
+Description: Kanyok
+Added: 2009-07-29
+%%
+Type: language
+Subtag: knz
+Description: Kalamsé
+Added: 2009-07-29
+%%
+Type: language
+Subtag: koa
+Description: Konomala
+Added: 2009-07-29
+%%
+Type: language
+Subtag: koc
+Description: Kpati
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kod
+Description: Kodi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: koe
+Description: Kacipo-Balesi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kof
+Description: Kubi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kog
+Description: Cogui
+Description: Kogi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: koh
+Description: Koyo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: koi
+Description: Komi-Permyak
+Added: 2009-07-29
+Macrolanguage: kv
+%%
+Type: language
+Subtag: koj
+Description: Sara Dunjo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kok
+Description: Konkani (macrolanguage)
+Added: 2005-10-16
+Suppress-Script: Deva
+Scope: macrolanguage
+%%
+Type: language
+Subtag: kol
+Description: Kol (Papua New Guinea)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: koo
+Description: Konzo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kop
+Description: Waube
+Added: 2009-07-29
+%%
+Type: language
+Subtag: koq
+Description: Kota (Gabon)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kos
+Description: Kosraean
+Added: 2005-10-16
+%%
+Type: language
+Subtag: kot
+Description: Lagwan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kou
+Description: Koke
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kov
+Description: Kudu-Camo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kow
+Description: Kugama
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kox
+Description: Coxima
+Added: 2009-07-29
+%%
+Type: language
+Subtag: koy
+Description: Koyukon
+Added: 2009-07-29
+%%
+Type: language
+Subtag: koz
+Description: Korak
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kpa
+Description: Kutto
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kpb
+Description: Mullu Kurumba
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kpc
+Description: Curripaco
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kpd
+Description: Koba
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kpe
+Description: Kpelle
+Added: 2005-10-16
+Scope: macrolanguage
+%%
+Type: language
+Subtag: kpf
+Description: Komba
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kpg
+Description: Kapingamarangi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kph
+Description: Kplang
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kpi
+Description: Kofei
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kpj
+Description: Karajá
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kpk
+Description: Kpan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kpl
+Description: Kpala
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kpm
+Description: Koho
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kpn
+Description: Kepkiriwát
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kpo
+Description: Ikposo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kpp
+Description: Paku Karen
+Added: 2009-07-29
+Deprecated: 2012-08-12
+Comments: see jkm, jkp
+%%
+Type: language
+Subtag: kpq
+Description: Korupun-Sela
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kpr
+Description: Korafe-Yegha
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kps
+Description: Tehit
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kpt
+Description: Karata
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kpu
+Description: Kafoa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kpv
+Description: Komi-Zyrian
+Added: 2009-07-29
+Macrolanguage: kv
+%%
+Type: language
+Subtag: kpw
+Description: Kobon
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kpx
+Description: Mountain Koiali
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kpy
+Description: Koryak
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kpz
+Description: Kupsabiny
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kqa
+Description: Mum
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kqb
+Description: Kovai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kqc
+Description: Doromu-Koki
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kqd
+Description: Koy Sanjaq Surat
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kqe
+Description: Kalagan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kqf
+Description: Kakabai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kqg
+Description: Khe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kqh
+Description: Kisankasa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kqi
+Description: Koitabu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kqj
+Description: Koromira
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kqk
+Description: Kotafon Gbe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kql
+Description: Kyenele
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kqm
+Description: Khisa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kqn
+Description: Kaonde
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kqo
+Description: Eastern Krahn
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kqp
+Description: Kimré
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kqq
+Description: Krenak
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kqr
+Description: Kimaragang
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kqs
+Description: Northern Kissi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kqt
+Description: Klias River Kadazan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kqu
+Description: Seroa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kqv
+Description: Okolod
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kqw
+Description: Kandas
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kqx
+Description: Mser
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kqy
+Description: Koorete
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kqz
+Description: Korana
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kra
+Description: Kumhali
+Added: 2009-07-29
+%%
+Type: language
+Subtag: krb
+Description: Karkin
+Added: 2009-07-29
+%%
+Type: language
+Subtag: krc
+Description: Karachay-Balkar
+Added: 2005-10-16
+%%
+Type: language
+Subtag: krd
+Description: Kairui-Midiki
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kre
+Description: Panará
+Added: 2009-07-29
+%%
+Type: language
+Subtag: krf
+Description: Koro (Vanuatu)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: krh
+Description: Kurama
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kri
+Description: Krio
+Added: 2009-07-29
+%%
+Type: language
+Subtag: krj
+Description: Kinaray-A
+Added: 2009-07-29
+%%
+Type: language
+Subtag: krk
+Description: Kerek
+Added: 2009-07-29
+%%
+Type: language
+Subtag: krl
+Description: Karelian
+Added: 2006-03-08
+%%
+Type: language
+Subtag: krm
+Description: Krim
+Added: 2009-07-29
+%%
+Type: language
+Subtag: krn
+Description: Sapo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kro
+Description: Kru languages
+Added: 2005-10-16
+Scope: collection
+%%
+Type: language
+Subtag: krp
+Description: Korop
+Added: 2009-07-29
+%%
+Type: language
+Subtag: krr
+Description: Kru'ng 2
+Added: 2009-07-29
+%%
+Type: language
+Subtag: krs
+Description: Gbaya (Sudan)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: krt
+Description: Tumari Kanuri
+Added: 2009-07-29
+Macrolanguage: kr
+%%
+Type: language
+Subtag: kru
+Description: Kurukh
+Added: 2005-10-16
+%%
+Type: language
+Subtag: krv
+Description: Kavet
+Added: 2009-07-29
+%%
+Type: language
+Subtag: krw
+Description: Western Krahn
+Added: 2009-07-29
+%%
+Type: language
+Subtag: krx
+Description: Karon
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kry
+Description: Kryts
+Added: 2009-07-29
+%%
+Type: language
+Subtag: krz
+Description: Sota Kanum
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ksa
+Description: Shuwa-Zamani
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ksb
+Description: Shambala
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ksc
+Description: Southern Kalinga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ksd
+Description: Kuanua
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kse
+Description: Kuni
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ksf
+Description: Bafia
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ksg
+Description: Kusaghe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ksh
+Description: Kölsch
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ksi
+Description: Krisa
+Description: I'saka
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ksj
+Description: Uare
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ksk
+Description: Kansa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ksl
+Description: Kumalu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ksm
+Description: Kumba
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ksn
+Description: Kasiguranin
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kso
+Description: Kofa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ksp
+Description: Kaba
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ksq
+Description: Kwaami
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ksr
+Description: Borong
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kss
+Description: Southern Kisi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kst
+Description: Winyé
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ksu
+Description: Khamyang
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ksv
+Description: Kusu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ksw
+Description: S'gaw Karen
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ksx
+Description: Kedang
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ksy
+Description: Kharia Thar
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ksz
+Description: Kodaku
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kta
+Description: Katua
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ktb
+Description: Kambaata
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ktc
+Description: Kholok
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ktd
+Description: Kokata
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kte
+Description: Nubri
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ktf
+Description: Kwami
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ktg
+Description: Kalkutung
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kth
+Description: Karanga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kti
+Description: North Muyu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ktj
+Description: Plapo Krumen
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ktk
+Description: Kaniet
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ktl
+Description: Koroshi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ktm
+Description: Kurti
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ktn
+Description: Karitiâna
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kto
+Description: Kuot
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ktp
+Description: Kaduo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ktq
+Description: Katabaga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ktr
+Description: Kota Marudu Tinagas
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kts
+Description: South Muyu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ktt
+Description: Ketum
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ktu
+Description: Kituba (Democratic Republic of Congo)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ktv
+Description: Eastern Katu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ktw
+Description: Kato
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ktx
+Description: Kaxararí
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kty
+Description: Kango (Bas-Uélé District)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ktz
+Description: Ju/'hoan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kub
+Description: Kutep
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kuc
+Description: Kwinsu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kud
+Description: 'Auhelawa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kue
+Description: Kuman
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kuf
+Description: Western Katu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kug
+Description: Kupa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kuh
+Description: Kushi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kui
+Description: Kuikúro-Kalapálo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kuj
+Description: Kuria
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kuk
+Description: Kepo'
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kul
+Description: Kulere
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kum
+Description: Kumyk
+Added: 2005-10-16
+%%
+Type: language
+Subtag: kun
+Description: Kunama
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kuo
+Description: Kumukio
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kup
+Description: Kunimaipa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kuq
+Description: Karipuna
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kus
+Description: Kusaal
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kut
+Description: Kutenai
+Added: 2005-10-16
+%%
+Type: language
+Subtag: kuu
+Description: Upper Kuskokwim
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kuv
+Description: Kur
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kuw
+Description: Kpagua
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kux
+Description: Kukatja
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kuy
+Description: Kuuku-Ya'u
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kuz
+Description: Kunza
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kva
+Description: Bagvalal
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kvb
+Description: Kubu
+Added: 2009-07-29
+Macrolanguage: ms
+%%
+Type: language
+Subtag: kvc
+Description: Kove
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kvd
+Description: Kui (Indonesia)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kve
+Description: Kalabakan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kvf
+Description: Kabalai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kvg
+Description: Kuni-Boazi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kvh
+Description: Komodo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kvi
+Description: Kwang
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kvj
+Description: Psikye
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kvk
+Description: Korean Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kvl
+Description: Kayaw
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kvm
+Description: Kendem
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kvn
+Description: Border Kuna
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kvo
+Description: Dobel
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kvp
+Description: Kompane
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kvq
+Description: Geba Karen
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kvr
+Description: Kerinci
+Added: 2009-07-29
+Macrolanguage: ms
+%%
+Type: language
+Subtag: kvs
+Description: Kunggara
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kvt
+Description: Lahta Karen
+Description: Lahta
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kvu
+Description: Yinbaw Karen
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kvv
+Description: Kola
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kvw
+Description: Wersing
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kvx
+Description: Parkari Koli
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kvy
+Description: Yintale Karen
+Description: Yintale
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kvz
+Description: Tsakwambo
+Description: Tsaukambo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kwa
+Description: Dâw
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kwb
+Description: Kwa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kwc
+Description: Likwala
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kwd
+Description: Kwaio
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kwe
+Description: Kwerba
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kwf
+Description: Kwara'ae
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kwg
+Description: Sara Kaba Deme
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kwh
+Description: Kowiai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kwi
+Description: Awa-Cuaiquer
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kwj
+Description: Kwanga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kwk
+Description: Kwakiutl
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kwl
+Description: Kofyar
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kwm
+Description: Kwambi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kwn
+Description: Kwangali
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kwo
+Description: Kwomtari
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kwp
+Description: Kodia
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kwq
+Description: Kwak
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kwr
+Description: Kwer
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kws
+Description: Kwese
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kwt
+Description: Kwesten
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kwu
+Description: Kwakum
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kwv
+Description: Sara Kaba Náà
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kww
+Description: Kwinti
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kwx
+Description: Khirwar
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kwy
+Description: San Salvador Kongo
+Added: 2009-07-29
+Macrolanguage: kg
+%%
+Type: language
+Subtag: kwz
+Description: Kwadi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kxa
+Description: Kairiru
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kxb
+Description: Krobu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kxc
+Description: Konso
+Description: Khonso
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kxd
+Description: Brunei
+Added: 2009-07-29
+Macrolanguage: ms
+%%
+Type: language
+Subtag: kxe
+Description: Kakihum
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kxf
+Description: Manumanaw Karen
+Description: Manumanaw
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kxh
+Description: Karo (Ethiopia)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kxi
+Description: Keningau Murut
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kxj
+Description: Kulfa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kxk
+Description: Zayein Karen
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kxl
+Description: Nepali Kurux
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kxm
+Description: Northern Khmer
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kxn
+Description: Kanowit-Tanjong Melanau
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kxo
+Description: Kanoé
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kxp
+Description: Wadiyara Koli
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kxq
+Description: Smärky Kanum
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kxr
+Description: Koro (Papua New Guinea)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kxs
+Description: Kangjia
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kxt
+Description: Koiwat
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kxu
+Description: Kui (India)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kxv
+Description: Kuvi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kxw
+Description: Konai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kxx
+Description: Likuba
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kxy
+Description: Kayong
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kxz
+Description: Kerewo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kya
+Description: Kwaya
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kyb
+Description: Butbut Kalinga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kyc
+Description: Kyaka
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kyd
+Description: Karey
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kye
+Description: Krache
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kyf
+Description: Kouya
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kyg
+Description: Keyagana
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kyh
+Description: Karok
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kyi
+Description: Kiput
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kyj
+Description: Karao
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kyk
+Description: Kamayo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kyl
+Description: Kalapuya
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kym
+Description: Kpatili
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kyn
+Description: Northern Binukidnon
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kyo
+Description: Kelon
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kyp
+Description: Kang
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kyq
+Description: Kenga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kyr
+Description: Kuruáya
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kys
+Description: Baram Kayan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kyt
+Description: Kayagar
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kyu
+Description: Western Kayah
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kyv
+Description: Kayort
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kyw
+Description: Kudmali
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kyx
+Description: Rapoisi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kyy
+Description: Kambaira
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kyz
+Description: Kayabí
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kza
+Description: Western Karaboro
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kzb
+Description: Kaibobo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kzc
+Description: Bondoukou Kulango
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kzd
+Description: Kadai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kze
+Description: Kosena
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kzf
+Description: Da'a Kaili
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kzg
+Description: Kikai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kzh
+Description: Kenuzi-Dongola
+Added: 2009-07-29
+Deprecated: 2012-08-12
+Comments: see dgl, xnz
+%%
+Type: language
+Subtag: kzi
+Description: Kelabit
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kzj
+Description: Coastal Kadazan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kzk
+Description: Kazukuru
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kzl
+Description: Kayeli
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kzm
+Description: Kais
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kzn
+Description: Kokola
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kzo
+Description: Kaningi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kzp
+Description: Kaidipang
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kzq
+Description: Kaike
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kzr
+Description: Karang
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kzs
+Description: Sugut Dusun
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kzt
+Description: Tambunan Dusun
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kzu
+Description: Kayupulau
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kzv
+Description: Komyandaret
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kzw
+Description: Karirí-Xocó
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kzx
+Description: Kamarian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kzy
+Description: Kango (Tshopo District)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: kzz
+Description: Kalabra
+Added: 2009-07-29
+%%
+Type: language
+Subtag: laa
+Description: Southern Subanen
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lab
+Description: Linear A
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lac
+Description: Lacandon
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lad
+Description: Ladino
+Added: 2005-10-16
+%%
+Type: language
+Subtag: lae
+Description: Pattani
+Added: 2009-07-29
+%%
+Type: language
+Subtag: laf
+Description: Lafofa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lag
+Description: Langi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lah
+Description: Lahnda
+Added: 2005-10-16
+Scope: macrolanguage
+%%
+Type: language
+Subtag: lai
+Description: Lambya
+Added: 2009-07-29
+%%
+Type: language
+Subtag: laj
+Description: Lango (Uganda)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lak
+Description: Laka (Nigeria)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lal
+Description: Lalia
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lam
+Description: Lamba
+Added: 2005-10-16
+%%
+Type: language
+Subtag: lan
+Description: Laru
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lap
+Description: Laka (Chad)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: laq
+Description: Qabiao
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lar
+Description: Larteh
+Added: 2009-07-29
+%%
+Type: language
+Subtag: las
+Description: Lama (Togo)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lau
+Description: Laba
+Added: 2009-07-29
+%%
+Type: language
+Subtag: law
+Description: Lauje
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lax
+Description: Tiwa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lay
+Description: Lama (Myanmar)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: laz
+Description: Aribwatsa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lba
+Description: Lui
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lbb
+Description: Label
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lbc
+Description: Lakkia
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lbe
+Description: Lak
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lbf
+Description: Tinani
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lbg
+Description: Laopang
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lbi
+Description: La'bi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lbj
+Description: Ladakhi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lbk
+Description: Central Bontok
+Added: 2010-03-11
+Macrolanguage: bnc
+%%
+Type: language
+Subtag: lbl
+Description: Libon Bikol
+Added: 2010-03-11
+Macrolanguage: bik
+%%
+Type: language
+Subtag: lbm
+Description: Lodhi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lbn
+Description: Lamet
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lbo
+Description: Laven
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lbq
+Description: Wampar
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lbr
+Description: Lohorung
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lbs
+Description: Libyan Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lbt
+Description: Lachi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lbu
+Description: Labu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lbv
+Description: Lavatbura-Lamusong
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lbw
+Description: Tolaki
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lbx
+Description: Lawangan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lby
+Description: Lamu-Lamu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lbz
+Description: Lardil
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lcc
+Description: Legenyem
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lcd
+Description: Lola
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lce
+Description: Loncong
+Added: 2009-07-29
+Macrolanguage: ms
+%%
+Type: language
+Subtag: lcf
+Description: Lubu
+Added: 2009-07-29
+Macrolanguage: ms
+%%
+Type: language
+Subtag: lch
+Description: Luchazi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lcl
+Description: Lisela
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lcm
+Description: Tungag
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lcp
+Description: Western Lawa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lcq
+Description: Luhu
+Added: 2009-07-29
+Deprecated: 2012-08-12
+Preferred-Value: ppr
+%%
+Type: language
+Subtag: lcs
+Description: Lisabata-Nuniali
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ldb
+Description: Dũya
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ldd
+Description: Luri
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ldg
+Description: Lenyima
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ldh
+Description: Lamja-Dengsa-Tola
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ldi
+Description: Laari
+Added: 2009-07-29
+Macrolanguage: kg
+%%
+Type: language
+Subtag: ldj
+Description: Lemoro
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ldk
+Description: Leelau
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ldl
+Description: Kaan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ldm
+Description: Landoma
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ldn
+Description: Láadan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ldo
+Description: Loo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ldp
+Description: Tso
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ldq
+Description: Lufu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lea
+Description: Lega-Shabunda
+Added: 2009-07-29
+%%
+Type: language
+Subtag: leb
+Description: Lala-Bisa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lec
+Description: Leco
+Added: 2009-07-29
+%%
+Type: language
+Subtag: led
+Description: Lendu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lee
+Description: Lyélé
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lef
+Description: Lelemi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: leg
+Description: Lengua
+Added: 2009-07-29
+%%
+Type: language
+Subtag: leh
+Description: Lenje
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lei
+Description: Lemio
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lej
+Description: Lengola
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lek
+Description: Leipon
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lel
+Description: Lele (Democratic Republic of Congo)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lem
+Description: Nomaande
+Added: 2009-07-29
+%%
+Type: language
+Subtag: len
+Description: Lenca
+Added: 2009-07-29
+%%
+Type: language
+Subtag: leo
+Description: Leti (Cameroon)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lep
+Description: Lepcha
+Added: 2009-07-29
+%%
+Type: language
+Subtag: leq
+Description: Lembena
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ler
+Description: Lenkau
+Added: 2009-07-29
+%%
+Type: language
+Subtag: les
+Description: Lese
+Added: 2009-07-29
+%%
+Type: language
+Subtag: let
+Description: Lesing-Gelimi
+Description: Amio-Gelimi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: leu
+Description: Kara (Papua New Guinea)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lev
+Description: Lamma
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lew
+Description: Ledo Kaili
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lex
+Description: Luang
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ley
+Description: Lemolang
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lez
+Description: Lezghian
+Added: 2005-10-16
+%%
+Type: language
+Subtag: lfa
+Description: Lefa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lfn
+Description: Lingua Franca Nova
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lga
+Description: Lungga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lgb
+Description: Laghu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lgg
+Description: Lugbara
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lgh
+Description: Laghuu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lgi
+Description: Lengilu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lgk
+Description: Lingarak
+Description: Neverver
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lgl
+Description: Wala
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lgm
+Description: Lega-Mwenga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lgn
+Description: Opuuo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lgq
+Description: Logba
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lgr
+Description: Lengo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lgt
+Description: Pahi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lgu
+Description: Longgu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lgz
+Description: Ligenza
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lha
+Description: Laha (Viet Nam)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lhh
+Description: Laha (Indonesia)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lhi
+Description: Lahu Shi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lhl
+Description: Lahul Lohar
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lhm
+Description: Lhomi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lhn
+Description: Lahanan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lhp
+Description: Lhokpu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lhs
+Description: Mlahsö
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lht
+Description: Lo-Toga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lhu
+Description: Lahu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lia
+Description: West-Central Limba
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lib
+Description: Likum
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lic
+Description: Hlai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lid
+Description: Nyindrou
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lie
+Description: Likila
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lif
+Description: Limbu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lig
+Description: Ligbi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lih
+Description: Lihir
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lii
+Description: Lingkhim
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lij
+Description: Ligurian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lik
+Description: Lika
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lil
+Description: Lillooet
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lio
+Description: Liki
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lip
+Description: Sekpele
+Added: 2009-07-29
+%%
+Type: language
+Subtag: liq
+Description: Libido
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lir
+Description: Liberian English
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lis
+Description: Lisu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: liu
+Description: Logorik
+Added: 2009-07-29
+%%
+Type: language
+Subtag: liv
+Description: Liv
+Added: 2009-07-29
+%%
+Type: language
+Subtag: liw
+Description: Col
+Added: 2009-07-29
+Macrolanguage: ms
+%%
+Type: language
+Subtag: lix
+Description: Liabuku
+Added: 2009-07-29
+%%
+Type: language
+Subtag: liy
+Description: Banda-Bambari
+Added: 2009-07-29
+%%
+Type: language
+Subtag: liz
+Description: Libinza
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lje
+Description: Rampi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lji
+Description: Laiyolo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ljl
+Description: Li'o
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ljp
+Description: Lampung Api
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lka
+Description: Lakalei
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lkb
+Description: Kabras
+Description: Lukabaras
+Added: 2009-07-29
+Macrolanguage: luy
+%%
+Type: language
+Subtag: lkc
+Description: Kucong
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lkd
+Description: Lakondê
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lke
+Description: Kenyi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lkh
+Description: Lakha
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lki
+Description: Laki
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lkj
+Description: Remun
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lkl
+Description: Laeko-Libuat
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lkn
+Description: Lakon
+Description: Vure
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lko
+Description: Khayo
+Description: Olukhayo
+Added: 2009-07-29
+Macrolanguage: luy
+%%
+Type: language
+Subtag: lkr
+Description: Päri
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lks
+Description: Kisa
+Description: Olushisa
+Added: 2009-07-29
+Macrolanguage: luy
+%%
+Type: language
+Subtag: lkt
+Description: Lakota
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lky
+Description: Lokoya
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lla
+Description: Lala-Roba
+Added: 2009-07-29
+%%
+Type: language
+Subtag: llb
+Description: Lolo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: llc
+Description: Lele (Guinea)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lld
+Description: Ladin
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lle
+Description: Lele (Papua New Guinea)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: llf
+Description: Hermit
+Added: 2009-07-29
+%%
+Type: language
+Subtag: llg
+Description: Lole
+Added: 2009-07-29
+%%
+Type: language
+Subtag: llh
+Description: Lamu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lli
+Description: Teke-Laali
+Added: 2009-07-29
+%%
+Type: language
+Subtag: llj
+Description: Ladji Ladji
+Added: 2012-08-12
+%%
+Type: language
+Subtag: llk
+Description: Lelak
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lll
+Description: Lilau
+Added: 2009-07-29
+%%
+Type: language
+Subtag: llm
+Description: Lasalimu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lln
+Description: Lele (Chad)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: llo
+Description: Khlor
+Added: 2009-07-29
+%%
+Type: language
+Subtag: llp
+Description: North Efate
+Added: 2009-07-29
+%%
+Type: language
+Subtag: llq
+Description: Lolak
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lls
+Description: Lithuanian Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: llu
+Description: Lau
+Added: 2009-07-29
+%%
+Type: language
+Subtag: llx
+Description: Lauan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lma
+Description: East Limba
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lmb
+Description: Merei
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lmc
+Description: Limilngan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lmd
+Description: Lumun
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lme
+Description: Pévé
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lmf
+Description: South Lembata
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lmg
+Description: Lamogai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lmh
+Description: Lambichhong
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lmi
+Description: Lombi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lmj
+Description: West Lembata
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lmk
+Description: Lamkang
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lml
+Description: Hano
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lmm
+Description: Lamam
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lmn
+Description: Lambadi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lmo
+Description: Lombard
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lmp
+Description: Limbum
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lmq
+Description: Lamatuka
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lmr
+Description: Lamalera
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lmu
+Description: Lamenu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lmv
+Description: Lomaiviti
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lmw
+Description: Lake Miwok
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lmx
+Description: Laimbue
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lmy
+Description: Lamboya
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lmz
+Description: Lumbee
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lna
+Description: Langbashe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lnb
+Description: Mbalanhu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lnd
+Description: Lundayeh
+Description: Lun Bawang
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lng
+Description: Langobardic
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lnh
+Description: Lanoh
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lni
+Description: Daantanai'
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lnj
+Description: Leningitij
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lnl
+Description: South Central Banda
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lnm
+Description: Langam
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lnn
+Description: Lorediakarkar
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lno
+Description: Lango (Sudan)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lns
+Description: Lamnso'
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lnu
+Description: Longuda
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lnz
+Description: Lonzo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: loa
+Description: Loloda
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lob
+Description: Lobi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: loc
+Description: Inonhan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: loe
+Description: Saluan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lof
+Description: Logol
+Added: 2009-07-29
+%%
+Type: language
+Subtag: log
+Description: Logo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: loh
+Description: Narim
+Added: 2009-07-29
+%%
+Type: language
+Subtag: loi
+Description: Loma (Côte d'Ivoire)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: loj
+Description: Lou
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lok
+Description: Loko
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lol
+Description: Mongo
+Added: 2005-10-16
+%%
+Type: language
+Subtag: lom
+Description: Loma (Liberia)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lon
+Description: Malawi Lomwe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: loo
+Description: Lombo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lop
+Description: Lopa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: loq
+Description: Lobala
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lor
+Description: Téén
+Added: 2009-07-29
+%%
+Type: language
+Subtag: los
+Description: Loniu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lot
+Description: Otuho
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lou
+Description: Louisiana Creole French
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lov
+Description: Lopi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: low
+Description: Tampias Lobu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lox
+Description: Loun
+Added: 2009-07-29
+%%
+Type: language
+Subtag: loy
+Description: Loke
+Added: 2009-07-29
+%%
+Type: language
+Subtag: loz
+Description: Lozi
+Added: 2005-10-16
+%%
+Type: language
+Subtag: lpa
+Description: Lelepa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lpe
+Description: Lepki
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lpn
+Description: Long Phuri Naga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lpo
+Description: Lipo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lpx
+Description: Lopit
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lra
+Description: Rara Bakati'
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lrc
+Description: Northern Luri
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lre
+Description: Laurentian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lrg
+Description: Laragia
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lri
+Description: Marachi
+Description: Olumarachi
+Added: 2009-07-29
+Macrolanguage: luy
+%%
+Type: language
+Subtag: lrk
+Description: Loarki
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lrl
+Description: Lari
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lrm
+Description: Marama
+Description: Olumarama
+Added: 2009-07-29
+Macrolanguage: luy
+%%
+Type: language
+Subtag: lrn
+Description: Lorang
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lro
+Description: Laro
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lrr
+Description: Southern Yamphu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lrt
+Description: Larantuka Malay
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lrv
+Description: Larevat
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lrz
+Description: Lemerig
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lsa
+Description: Lasgerdi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lsd
+Description: Lishana Deni
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lse
+Description: Lusengo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lsg
+Description: Lyons Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lsh
+Description: Lish
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lsi
+Description: Lashi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lsl
+Description: Latvian Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lsm
+Description: Saamia
+Description: Olusamia
+Added: 2009-07-29
+Macrolanguage: luy
+%%
+Type: language
+Subtag: lso
+Description: Laos Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lsp
+Description: Panamanian Sign Language
+Description: Lengua de Señas Panameñas
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lsr
+Description: Aruop
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lss
+Description: Lasi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lst
+Description: Trinidad and Tobago Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lsy
+Description: Mauritian Sign Language
+Added: 2010-03-11
+%%
+Type: language
+Subtag: ltc
+Description: Late Middle Chinese
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ltg
+Description: Latgalian
+Added: 2010-03-11
+Macrolanguage: lv
+%%
+Type: language
+Subtag: lti
+Description: Leti (Indonesia)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ltn
+Description: Latundê
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lto
+Description: Tsotso
+Description: Olutsotso
+Added: 2009-07-29
+Macrolanguage: luy
+%%
+Type: language
+Subtag: lts
+Description: Tachoni
+Description: Lutachoni
+Added: 2009-07-29
+Macrolanguage: luy
+%%
+Type: language
+Subtag: ltu
+Description: Latu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lua
+Description: Luba-Lulua
+Added: 2005-10-16
+%%
+Type: language
+Subtag: luc
+Description: Aringa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lud
+Description: Ludian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lue
+Description: Luvale
+Added: 2009-07-29
+%%
+Type: language
+Subtag: luf
+Description: Laua
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lui
+Description: Luiseno
+Added: 2005-10-16
+%%
+Type: language
+Subtag: luj
+Description: Luna
+Added: 2009-07-29
+%%
+Type: language
+Subtag: luk
+Description: Lunanakha
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lul
+Description: Olu'bo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lum
+Description: Luimbi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lun
+Description: Lunda
+Added: 2005-10-16
+%%
+Type: language
+Subtag: luo
+Description: Luo (Kenya and Tanzania)
+Description: Dholuo
+Added: 2005-10-16
+%%
+Type: language
+Subtag: lup
+Description: Lumbu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: luq
+Description: Lucumi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lur
+Description: Laura
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lus
+Description: Lushai
+Added: 2005-10-16
+%%
+Type: language
+Subtag: lut
+Description: Lushootseed
+Added: 2009-07-29
+%%
+Type: language
+Subtag: luu
+Description: Lumba-Yakkha
+Added: 2009-07-29
+%%
+Type: language
+Subtag: luv
+Description: Luwati
+Added: 2009-07-29
+%%
+Type: language
+Subtag: luw
+Description: Luo (Cameroon)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: luy
+Description: Luyia
+Description: Oluluyia
+Added: 2009-07-29
+Scope: macrolanguage
+%%
+Type: language
+Subtag: luz
+Description: Southern Luri
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lva
+Description: Maku'a
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lvk
+Description: Lavukaleve
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lvs
+Description: Standard Latvian
+Added: 2010-03-11
+Macrolanguage: lv
+%%
+Type: language
+Subtag: lvu
+Description: Levuka
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lwa
+Description: Lwalu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lwe
+Description: Lewo Eleng
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lwg
+Description: Wanga
+Description: Oluwanga
+Added: 2009-07-29
+Macrolanguage: luy
+%%
+Type: language
+Subtag: lwh
+Description: White Lachi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lwl
+Description: Eastern Lawa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lwm
+Description: Laomian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lwo
+Description: Luwo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lwt
+Description: Lewotobi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lww
+Description: Lewo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lya
+Description: Layakha
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lyg
+Description: Lyngngam
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lyn
+Description: Luyana
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lzh
+Description: Literary Chinese
+Added: 2009-07-29
+Macrolanguage: zh
+%%
+Type: language
+Subtag: lzl
+Description: Litzlitz
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lzn
+Description: Leinong Naga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: lzz
+Description: Laz
+Added: 2009-07-29
+%%
+Type: language
+Subtag: maa
+Description: San Jerónimo Tecóatl Mazatec
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mab
+Description: Yutanduchi Mixtec
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mad
+Description: Madurese
+Added: 2005-10-16
+%%
+Type: language
+Subtag: mae
+Description: Bo-Rukul
+Added: 2009-07-29
+%%
+Type: language
+Subtag: maf
+Description: Mafa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mag
+Description: Magahi
+Added: 2005-10-16
+%%
+Type: language
+Subtag: mai
+Description: Maithili
+Added: 2005-10-16
+Suppress-Script: Deva
+%%
+Type: language
+Subtag: maj
+Description: Jalapa De Díaz Mazatec
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mak
+Description: Makasar
+Added: 2005-10-16
+%%
+Type: language
+Subtag: mam
+Description: Mam
+Added: 2009-07-29
+%%
+Type: language
+Subtag: man
+Description: Mandingo
+Added: 2005-10-16
+Scope: macrolanguage
+%%
+Type: language
+Subtag: map
+Description: Austronesian languages
+Added: 2005-10-16
+Scope: collection
+%%
+Type: language
+Subtag: maq
+Description: Chiquihuitlán Mazatec
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mas
+Description: Masai
+Added: 2005-10-16
+%%
+Type: language
+Subtag: mat
+Description: San Francisco Matlatzinca
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mau
+Description: Huautla Mazatec
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mav
+Description: Sateré-Mawé
+Added: 2009-07-29
+%%
+Type: language
+Subtag: maw
+Description: Mampruli
+Added: 2009-07-29
+%%
+Type: language
+Subtag: max
+Description: North Moluccan Malay
+Added: 2009-07-29
+Macrolanguage: ms
+%%
+Type: language
+Subtag: maz
+Description: Central Mazahua
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mba
+Description: Higaonon
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mbb
+Description: Western Bukidnon Manobo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mbc
+Description: Macushi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mbd
+Description: Dibabawon Manobo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mbe
+Description: Molale
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mbf
+Description: Baba Malay
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mbh
+Description: Mangseng
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mbi
+Description: Ilianen Manobo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mbj
+Description: Nadëb
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mbk
+Description: Malol
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mbl
+Description: Maxakalí
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mbm
+Description: Ombamba
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mbn
+Description: Macaguán
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mbo
+Description: Mbo (Cameroon)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mbp
+Description: Malayo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mbq
+Description: Maisin
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mbr
+Description: Nukak Makú
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mbs
+Description: Sarangani Manobo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mbt
+Description: Matigsalug Manobo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mbu
+Description: Mbula-Bwazza
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mbv
+Description: Mbulungish
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mbw
+Description: Maring
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mbx
+Description: Mari (East Sepik Province)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mby
+Description: Memoni
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mbz
+Description: Amoltepec Mixtec
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mca
+Description: Maca
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mcb
+Description: Machiguenga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mcc
+Description: Bitur
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mcd
+Description: Sharanahua
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mce
+Description: Itundujia Mixtec
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mcf
+Description: Matsés
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mcg
+Description: Mapoyo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mch
+Description: Maquiritari
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mci
+Description: Mese
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mcj
+Description: Mvanip
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mck
+Description: Mbunda
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mcl
+Description: Macaguaje
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mcm
+Description: Malaccan Creole Portuguese
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mcn
+Description: Masana
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mco
+Description: Coatlán Mixe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mcp
+Description: Makaa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mcq
+Description: Ese
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mcr
+Description: Menya
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mcs
+Description: Mambai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mct
+Description: Mengisa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mcu
+Description: Cameroon Mambila
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mcv
+Description: Minanibai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mcw
+Description: Mawa (Chad)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mcx
+Description: Mpiemo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mcy
+Description: South Watut
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mcz
+Description: Mawan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mda
+Description: Mada (Nigeria)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mdb
+Description: Morigi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mdc
+Description: Male (Papua New Guinea)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mdd
+Description: Mbum
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mde
+Description: Maba (Chad)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mdf
+Description: Moksha
+Added: 2005-10-16
+%%
+Type: language
+Subtag: mdg
+Description: Massalat
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mdh
+Description: Maguindanaon
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mdi
+Description: Mamvu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mdj
+Description: Mangbetu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mdk
+Description: Mangbutu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mdl
+Description: Maltese Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mdm
+Description: Mayogo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mdn
+Description: Mbati
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mdp
+Description: Mbala
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mdq
+Description: Mbole
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mdr
+Description: Mandar
+Added: 2005-10-16
+%%
+Type: language
+Subtag: mds
+Description: Maria (Papua New Guinea)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mdt
+Description: Mbere
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mdu
+Description: Mboko
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mdv
+Description: Santa Lucía Monteverde Mixtec
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mdw
+Description: Mbosi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mdx
+Description: Dizin
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mdy
+Description: Male (Ethiopia)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mdz
+Description: Suruí Do Pará
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mea
+Description: Menka
+Added: 2009-07-29
+%%
+Type: language
+Subtag: meb
+Description: Ikobi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mec
+Description: Mara
+Added: 2009-07-29
+%%
+Type: language
+Subtag: med
+Description: Melpa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mee
+Description: Mengen
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mef
+Description: Megam
+Added: 2009-07-29
+%%
+Type: language
+Subtag: meg
+Description: Mea
+Added: 2009-07-29
+%%
+Type: language
+Subtag: meh
+Description: Southwestern Tlaxiaco Mixtec
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mei
+Description: Midob
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mej
+Description: Meyah
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mek
+Description: Mekeo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mel
+Description: Central Melanau
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mem
+Description: Mangala
+Added: 2009-07-29
+%%
+Type: language
+Subtag: men
+Description: Mende (Sierra Leone)
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: meo
+Description: Kedah Malay
+Added: 2009-07-29
+Macrolanguage: ms
+%%
+Type: language
+Subtag: mep
+Description: Miriwung
+Added: 2009-07-29
+%%
+Type: language
+Subtag: meq
+Description: Merey
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mer
+Description: Meru
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mes
+Description: Masmaje
+Added: 2009-07-29
+%%
+Type: language
+Subtag: met
+Description: Mato
+Added: 2009-07-29
+%%
+Type: language
+Subtag: meu
+Description: Motu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mev
+Description: Mann
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mew
+Description: Maaka
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mey
+Description: Hassaniyya
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mez
+Description: Menominee
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mfa
+Description: Pattani Malay
+Added: 2009-07-29
+Macrolanguage: ms
+%%
+Type: language
+Subtag: mfb
+Description: Bangka
+Added: 2009-07-29
+Macrolanguage: ms
+%%
+Type: language
+Subtag: mfc
+Description: Mba
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mfd
+Description: Mendankwe-Nkwen
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mfe
+Description: Morisyen
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mff
+Description: Naki
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mfg
+Description: Mixifore
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mfh
+Description: Matal
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mfi
+Description: Wandala
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mfj
+Description: Mefele
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mfk
+Description: North Mofu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mfl
+Description: Putai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mfm
+Description: Marghi South
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mfn
+Description: Cross River Mbembe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mfo
+Description: Mbe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mfp
+Description: Makassar Malay
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mfq
+Description: Moba
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mfr
+Description: Marithiel
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mfs
+Description: Mexican Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mft
+Description: Mokerang
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mfu
+Description: Mbwela
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mfv
+Description: Mandjak
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mfw
+Description: Mulaha
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mfx
+Description: Melo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mfy
+Description: Mayo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mfz
+Description: Mabaan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mga
+Description: Middle Irish (900-1200)
+Added: 2005-10-16
+%%
+Type: language
+Subtag: mgb
+Description: Mararit
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mgc
+Description: Morokodo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mgd
+Description: Moru
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mge
+Description: Mango
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mgf
+Description: Maklew
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mgg
+Description: Mpumpong
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mgh
+Description: Makhuwa-Meetto
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mgi
+Description: Lijili
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mgj
+Description: Abureni
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mgk
+Description: Mawes
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mgl
+Description: Maleu-Kilenge
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mgm
+Description: Mambae
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mgn
+Description: Mbangi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mgo
+Description: Meta'
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mgp
+Description: Eastern Magar
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mgq
+Description: Malila
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mgr
+Description: Mambwe-Lungu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mgs
+Description: Manda (Tanzania)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mgt
+Description: Mongol
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mgu
+Description: Mailu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mgv
+Description: Matengo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mgw
+Description: Matumbi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mgx
+Description: Omati
+Added: 2009-07-29
+Deprecated: 2012-08-12
+Comments: see jbk, jmw
+%%
+Type: language
+Subtag: mgy
+Description: Mbunga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mgz
+Description: Mbugwe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mha
+Description: Manda (India)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mhb
+Description: Mahongwe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mhc
+Description: Mocho
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mhd
+Description: Mbugu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mhe
+Description: Besisi
+Description: Mah Meri
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mhf
+Description: Mamaa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mhg
+Description: Margu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mhh
+Description: Maskoy Pidgin
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mhi
+Description: Ma'di
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mhj
+Description: Mogholi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mhk
+Description: Mungaka
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mhl
+Description: Mauwake
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mhm
+Description: Makhuwa-Moniga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mhn
+Description: Mócheno
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mho
+Description: Mashi (Zambia)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mhp
+Description: Balinese Malay
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mhq
+Description: Mandan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mhr
+Description: Eastern Mari
+Added: 2009-07-29
+Macrolanguage: chm
+%%
+Type: language
+Subtag: mhs
+Description: Buru (Indonesia)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mht
+Description: Mandahuaca
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mhu
+Description: Digaro-Mishmi
+Description: Darang Deng
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mhw
+Description: Mbukushu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mhx
+Description: Maru
+Description: Lhaovo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mhy
+Description: Ma'anyan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mhz
+Description: Mor (Mor Islands)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mia
+Description: Miami
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mib
+Description: Atatláhuca Mixtec
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mic
+Description: Mi'kmaq
+Description: Micmac
+Added: 2005-10-16
+%%
+Type: language
+Subtag: mid
+Description: Mandaic
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mie
+Description: Ocotepec Mixtec
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mif
+Description: Mofu-Gudur
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mig
+Description: San Miguel El Grande Mixtec
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mih
+Description: Chayuco Mixtec
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mii
+Description: Chigmecatitlán Mixtec
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mij
+Description: Abar
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mik
+Description: Mikasuki
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mil
+Description: Peñoles Mixtec
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mim
+Description: Alacatlatzala Mixtec
+Added: 2009-07-29
+%%
+Type: language
+Subtag: min
+Description: Minangkabau
+Added: 2005-10-16
+Macrolanguage: ms
+%%
+Type: language
+Subtag: mio
+Description: Pinotepa Nacional Mixtec
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mip
+Description: Apasco-Apoala Mixtec
+Added: 2009-07-29
+%%
+Type: language
+Subtag: miq
+Description: Mískito
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mir
+Description: Isthmus Mixe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mis
+Description: Uncoded languages
+Added: 2005-10-16
+Scope: special
+%%
+Type: language
+Subtag: mit
+Description: Southern Puebla Mixtec
+Added: 2009-07-29
+%%
+Type: language
+Subtag: miu
+Description: Cacaloxtepec Mixtec
+Added: 2009-07-29
+%%
+Type: language
+Subtag: miw
+Description: Akoye
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mix
+Description: Mixtepec Mixtec
+Added: 2009-07-29
+%%
+Type: language
+Subtag: miy
+Description: Ayutla Mixtec
+Added: 2009-07-29
+%%
+Type: language
+Subtag: miz
+Description: Coatzospan Mixtec
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mja
+Description: Mahei
+Added: 2009-07-29
+Deprecated: 2011-08-16
+%%
+Type: language
+Subtag: mjc
+Description: San Juan Colorado Mixtec
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mjd
+Description: Northwest Maidu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mje
+Description: Muskum
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mjg
+Description: Tu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mjh
+Description: Mwera (Nyasa)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mji
+Description: Kim Mun
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mjj
+Description: Mawak
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mjk
+Description: Matukar
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mjl
+Description: Mandeali
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mjm
+Description: Medebur
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mjn
+Description: Ma (Papua New Guinea)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mjo
+Description: Malankuravan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mjp
+Description: Malapandaram
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mjq
+Description: Malaryan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mjr
+Description: Malavedan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mjs
+Description: Miship
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mjt
+Description: Sauria Paharia
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mju
+Description: Manna-Dora
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mjv
+Description: Mannan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mjw
+Description: Karbi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mjx
+Description: Mahali
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mjy
+Description: Mahican
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mjz
+Description: Majhi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mka
+Description: Mbre
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mkb
+Description: Mal Paharia
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mkc
+Description: Siliput
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mke
+Description: Mawchi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mkf
+Description: Miya
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mkg
+Description: Mak (China)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mkh
+Description: Mon-Khmer languages
+Added: 2005-10-16
+Scope: collection
+%%
+Type: language
+Subtag: mki
+Description: Dhatki
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mkj
+Description: Mokilese
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mkk
+Description: Byep
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mkl
+Description: Mokole
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mkm
+Description: Moklen
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mkn
+Description: Kupang Malay
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mko
+Description: Mingang Doso
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mkp
+Description: Moikodi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mkq
+Description: Bay Miwok
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mkr
+Description: Malas
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mks
+Description: Silacayoapan Mixtec
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mkt
+Description: Vamale
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mku
+Description: Konyanka Maninka
+Added: 2009-07-29
+Macrolanguage: man
+%%
+Type: language
+Subtag: mkv
+Description: Mafea
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mkw
+Description: Kituba (Congo)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mkx
+Description: Kinamiging Manobo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mky
+Description: East Makian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mkz
+Description: Makasae
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mla
+Description: Malo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mlb
+Description: Mbule
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mlc
+Description: Cao Lan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mld
+Description: Malakhel
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mle
+Description: Manambu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mlf
+Description: Mal
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mlh
+Description: Mape
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mli
+Description: Malimpung
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mlj
+Description: Miltu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mlk
+Description: Ilwana
+Description: Kiwilwana
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mll
+Description: Malua Bay
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mlm
+Description: Mulam
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mln
+Description: Malango
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mlo
+Description: Mlomp
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mlp
+Description: Bargam
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mlq
+Description: Western Maninkakan
+Added: 2009-07-29
+Macrolanguage: man
+%%
+Type: language
+Subtag: mlr
+Description: Vame
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mls
+Description: Masalit
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mlu
+Description: To'abaita
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mlv
+Description: Motlav
+Description: Mwotlap
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mlw
+Description: Moloko
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mlx
+Description: Malfaxal
+Description: Naha'ai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mlz
+Description: Malaynon
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mma
+Description: Mama
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mmb
+Description: Momina
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mmc
+Description: Michoacán Mazahua
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mmd
+Description: Maonan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mme
+Description: Mae
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mmf
+Description: Mundat
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mmg
+Description: North Ambrym
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mmh
+Description: Mehináku
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mmi
+Description: Musar
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mmj
+Description: Majhwar
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mmk
+Description: Mukha-Dora
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mml
+Description: Man Met
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mmm
+Description: Maii
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mmn
+Description: Mamanwa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mmo
+Description: Mangga Buang
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mmp
+Description: Siawi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mmq
+Description: Musak
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mmr
+Description: Western Xiangxi Miao
+Added: 2009-07-29
+Macrolanguage: hmn
+%%
+Type: language
+Subtag: mmt
+Description: Malalamai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mmu
+Description: Mmaala
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mmv
+Description: Miriti
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mmw
+Description: Emae
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mmx
+Description: Madak
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mmy
+Description: Migaama
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mmz
+Description: Mabaale
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mna
+Description: Mbula
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mnb
+Description: Muna
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mnc
+Description: Manchu
+Added: 2005-10-16
+%%
+Type: language
+Subtag: mnd
+Description: Mondé
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mne
+Description: Naba
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mnf
+Description: Mundani
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mng
+Description: Eastern Mnong
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mnh
+Description: Mono (Democratic Republic of Congo)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mni
+Description: Manipuri
+Added: 2005-10-16
+%%
+Type: language
+Subtag: mnj
+Description: Munji
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mnk
+Description: Mandinka
+Added: 2009-07-29
+Macrolanguage: man
+%%
+Type: language
+Subtag: mnl
+Description: Tiale
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mnm
+Description: Mapena
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mnn
+Description: Southern Mnong
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mno
+Description: Manobo languages
+Added: 2005-10-16
+Scope: collection
+%%
+Type: language
+Subtag: mnp
+Description: Min Bei Chinese
+Added: 2009-07-29
+Macrolanguage: zh
+%%
+Type: language
+Subtag: mnq
+Description: Minriq
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mnr
+Description: Mono (USA)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mns
+Description: Mansi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mnt
+Description: Maykulan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mnu
+Description: Mer
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mnv
+Description: Rennell-Bellona
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mnw
+Description: Mon
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mnx
+Description: Manikion
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mny
+Description: Manyawa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mnz
+Description: Moni
+Added: 2009-07-29
+%%
+Type: language
+Subtag: moa
+Description: Mwan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: moc
+Description: Mocoví
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mod
+Description: Mobilian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: moe
+Description: Montagnais
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mof
+Description: Mohegan-Montauk-Narragansett
+Added: 2009-07-29
+Deprecated: 2010-03-11
+Comments: see xnt, xpq
+%%
+Type: language
+Subtag: mog
+Description: Mongondow
+Added: 2009-07-29
+%%
+Type: language
+Subtag: moh
+Description: Mohawk
+Added: 2005-10-16
+%%
+Type: language
+Subtag: moi
+Description: Mboi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: moj
+Description: Monzombo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mok
+Description: Morori
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mom
+Description: Mangue
+Added: 2009-07-29
+%%
+Type: language
+Subtag: moo
+Description: Monom
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mop
+Description: Mopán Maya
+Added: 2009-07-29
+%%
+Type: language
+Subtag: moq
+Description: Mor (Bomberai Peninsula)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mor
+Description: Moro
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mos
+Description: Mossi
+Added: 2005-10-16
+%%
+Type: language
+Subtag: mot
+Description: Barí
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mou
+Description: Mogum
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mov
+Description: Mohave
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mow
+Description: Moi (Congo)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mox
+Description: Molima
+Added: 2009-07-29
+%%
+Type: language
+Subtag: moy
+Description: Shekkacho
+Added: 2009-07-29
+%%
+Type: language
+Subtag: moz
+Description: Mukulu
+Description: Gergiko
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mpa
+Description: Mpoto
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mpb
+Description: Mullukmulluk
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mpc
+Description: Mangarayi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mpd
+Description: Machinere
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mpe
+Description: Majang
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mpg
+Description: Marba
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mph
+Description: Maung
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mpi
+Description: Mpade
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mpj
+Description: Martu Wangka
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mpk
+Description: Mbara (Chad)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mpl
+Description: Middle Watut
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mpm
+Description: Yosondúa Mixtec
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mpn
+Description: Mindiri
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mpo
+Description: Miu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mpp
+Description: Migabac
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mpq
+Description: Matís
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mpr
+Description: Vangunu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mps
+Description: Dadibi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mpt
+Description: Mian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mpu
+Description: Makuráp
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mpv
+Description: Mungkip
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mpw
+Description: Mapidian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mpx
+Description: Misima-Panaeati
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mpy
+Description: Mapia
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mpz
+Description: Mpi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mqa
+Description: Maba (Indonesia)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mqb
+Description: Mbuko
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mqc
+Description: Mangole
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mqe
+Description: Matepi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mqf
+Description: Momuna
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mqg
+Description: Kota Bangun Kutai Malay
+Added: 2009-07-29
+Macrolanguage: ms
+%%
+Type: language
+Subtag: mqh
+Description: Tlazoyaltepec Mixtec
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mqi
+Description: Mariri
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mqj
+Description: Mamasa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mqk
+Description: Rajah Kabunsuwan Manobo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mql
+Description: Mbelime
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mqm
+Description: South Marquesan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mqn
+Description: Moronene
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mqo
+Description: Modole
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mqp
+Description: Manipa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mqq
+Description: Minokok
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mqr
+Description: Mander
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mqs
+Description: West Makian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mqt
+Description: Mok
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mqu
+Description: Mandari
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mqv
+Description: Mosimo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mqw
+Description: Murupi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mqx
+Description: Mamuju
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mqy
+Description: Manggarai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mqz
+Description: Pano
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mra
+Description: Mlabri
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mrb
+Description: Marino
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mrc
+Description: Maricopa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mrd
+Description: Western Magar
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mre
+Description: Martha's Vineyard Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mrf
+Description: Elseng
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mrg
+Description: Mising
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mrh
+Description: Mara Chin
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mrj
+Description: Western Mari
+Added: 2009-07-29
+Macrolanguage: chm
+%%
+Type: language
+Subtag: mrk
+Description: Hmwaveke
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mrl
+Description: Mortlockese
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mrm
+Description: Merlav
+Description: Mwerlap
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mrn
+Description: Cheke Holo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mro
+Description: Mru
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mrp
+Description: Morouas
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mrq
+Description: North Marquesan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mrr
+Description: Maria (India)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mrs
+Description: Maragus
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mrt
+Description: Marghi Central
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mru
+Description: Mono (Cameroon)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mrv
+Description: Mangareva
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mrw
+Description: Maranao
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mrx
+Description: Maremgi
+Description: Dineor
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mry
+Description: Mandaya
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mrz
+Description: Marind
+Added: 2009-07-29
+%%
+Type: language
+Subtag: msb
+Description: Masbatenyo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: msc
+Description: Sankaran Maninka
+Added: 2009-07-29
+Macrolanguage: man
+%%
+Type: language
+Subtag: msd
+Description: Yucatec Maya Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mse
+Description: Musey
+Added: 2009-07-29
+%%
+Type: language
+Subtag: msf
+Description: Mekwei
+Added: 2009-07-29
+%%
+Type: language
+Subtag: msg
+Description: Moraid
+Added: 2009-07-29
+%%
+Type: language
+Subtag: msh
+Description: Masikoro Malagasy
+Added: 2009-07-29
+Macrolanguage: mg
+%%
+Type: language
+Subtag: msi
+Description: Sabah Malay
+Added: 2009-07-29
+Macrolanguage: ms
+%%
+Type: language
+Subtag: msj
+Description: Ma (Democratic Republic of Congo)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: msk
+Description: Mansaka
+Added: 2009-07-29
+%%
+Type: language
+Subtag: msl
+Description: Molof
+Description: Poule
+Added: 2009-07-29
+%%
+Type: language
+Subtag: msm
+Description: Agusan Manobo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: msn
+Description: Vurës
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mso
+Description: Mombum
+Added: 2009-07-29
+%%
+Type: language
+Subtag: msp
+Description: Maritsauá
+Added: 2009-07-29
+%%
+Type: language
+Subtag: msq
+Description: Caac
+Added: 2009-07-29
+%%
+Type: language
+Subtag: msr
+Description: Mongolian Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mss
+Description: West Masela
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mst
+Description: Cataelano Mandaya
+Added: 2009-07-29
+Deprecated: 2010-03-11
+Preferred-Value: mry
+%%
+Type: language
+Subtag: msu
+Description: Musom
+Added: 2009-07-29
+%%
+Type: language
+Subtag: msv
+Description: Maslam
+Added: 2009-07-29
+%%
+Type: language
+Subtag: msw
+Description: Mansoanka
+Added: 2009-07-29
+%%
+Type: language
+Subtag: msx
+Description: Moresada
+Added: 2009-07-29
+%%
+Type: language
+Subtag: msy
+Description: Aruamu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: msz
+Description: Momare
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mta
+Description: Cotabato Manobo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mtb
+Description: Anyin Morofo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mtc
+Description: Munit
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mtd
+Description: Mualang
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mte
+Description: Mono (Solomon Islands)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mtf
+Description: Murik (Papua New Guinea)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mtg
+Description: Una
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mth
+Description: Munggui
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mti
+Description: Maiwa (Papua New Guinea)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mtj
+Description: Moskona
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mtk
+Description: Mbe'
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mtl
+Description: Montol
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mtm
+Description: Mator
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mtn
+Description: Matagalpa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mto
+Description: Totontepec Mixe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mtp
+Description: Wichí Lhamtés Nocten
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mtq
+Description: Muong
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mtr
+Description: Mewari
+Added: 2009-07-29
+Macrolanguage: mwr
+%%
+Type: language
+Subtag: mts
+Description: Yora
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mtt
+Description: Mota
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mtu
+Description: Tututepec Mixtec
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mtv
+Description: Asaro'o
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mtw
+Description: Southern Binukidnon
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mtx
+Description: Tidaá Mixtec
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mty
+Description: Nabi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mua
+Description: Mundang
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mub
+Description: Mubi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: muc
+Description: Mbu'
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mud
+Description: Mednyj Aleut
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mue
+Description: Media Lengua
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mug
+Description: Musgu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: muh
+Description: Mündü
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mui
+Description: Musi
+Added: 2009-07-29
+Macrolanguage: ms
+%%
+Type: language
+Subtag: muj
+Description: Mabire
+Added: 2009-07-29
+%%
+Type: language
+Subtag: muk
+Description: Mugom
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mul
+Description: Multiple languages
+Added: 2005-10-16
+Scope: special
+%%
+Type: language
+Subtag: mum
+Description: Maiwala
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mun
+Description: Munda languages
+Added: 2005-10-16
+Scope: collection
+%%
+Type: language
+Subtag: muo
+Description: Nyong
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mup
+Description: Malvi
+Added: 2009-07-29
+Macrolanguage: raj
+%%
+Type: language
+Subtag: muq
+Description: Eastern Xiangxi Miao
+Added: 2009-07-29
+Macrolanguage: hmn
+%%
+Type: language
+Subtag: mur
+Description: Murle
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mus
+Description: Creek
+Added: 2005-10-16
+%%
+Type: language
+Subtag: mut
+Description: Western Muria
+Added: 2009-07-29
+%%
+Type: language
+Subtag: muu
+Description: Yaaku
+Added: 2009-07-29
+%%
+Type: language
+Subtag: muv
+Description: Muthuvan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mux
+Description: Bo-Ung
+Added: 2009-07-29
+%%
+Type: language
+Subtag: muy
+Description: Muyang
+Added: 2009-07-29
+%%
+Type: language
+Subtag: muz
+Description: Mursi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mva
+Description: Manam
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mvb
+Description: Mattole
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mvd
+Description: Mamboru
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mve
+Description: Marwari (Pakistan)
+Added: 2009-07-29
+Macrolanguage: mwr
+%%
+Type: language
+Subtag: mvf
+Description: Peripheral Mongolian
+Added: 2009-07-29
+Macrolanguage: mn
+%%
+Type: language
+Subtag: mvg
+Description: Yucuañe Mixtec
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mvh
+Description: Mulgi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mvi
+Description: Miyako
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mvk
+Description: Mekmek
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mvl
+Description: Mbara (Australia)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mvm
+Description: Muya
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mvn
+Description: Minaveha
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mvo
+Description: Marovo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mvp
+Description: Duri
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mvq
+Description: Moere
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mvr
+Description: Marau
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mvs
+Description: Massep
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mvt
+Description: Mpotovoro
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mvu
+Description: Marfa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mvv
+Description: Tagal Murut
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mvw
+Description: Machinga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mvx
+Description: Meoswar
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mvy
+Description: Indus Kohistani
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mvz
+Description: Mesqan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mwa
+Description: Mwatebu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mwb
+Description: Juwal
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mwc
+Description: Are
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mwd
+Description: Mudbura
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mwe
+Description: Mwera (Chimwera)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mwf
+Description: Murrinh-Patha
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mwg
+Description: Aiklep
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mwh
+Description: Mouk-Aria
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mwi
+Description: Labo
+Description: Ninde
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mwj
+Description: Maligo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mwk
+Description: Kita Maninkakan
+Added: 2009-07-29
+Macrolanguage: man
+%%
+Type: language
+Subtag: mwl
+Description: Mirandese
+Added: 2005-10-16
+%%
+Type: language
+Subtag: mwm
+Description: Sar
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mwn
+Description: Nyamwanga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mwo
+Description: Central Maewo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mwp
+Description: Kala Lagaw Ya
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mwq
+Description: Mün Chin
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mwr
+Description: Marwari
+Added: 2005-10-16
+Scope: macrolanguage
+%%
+Type: language
+Subtag: mws
+Description: Mwimbi-Muthambi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mwt
+Description: Moken
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mwu
+Description: Mittu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mwv
+Description: Mentawai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mww
+Description: Hmong Daw
+Added: 2009-07-29
+Macrolanguage: hmn
+%%
+Type: language
+Subtag: mwx
+Description: Mediak
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mwy
+Description: Mosiro
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mwz
+Description: Moingi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mxa
+Description: Northwest Oaxaca Mixtec
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mxb
+Description: Tezoatlán Mixtec
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mxc
+Description: Manyika
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mxd
+Description: Modang
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mxe
+Description: Mele-Fila
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mxf
+Description: Malgbe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mxg
+Description: Mbangala
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mxh
+Description: Mvuba
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mxi
+Description: Mozarabic
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mxj
+Description: Miju-Mishmi
+Description: Geman Deng
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mxk
+Description: Monumbo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mxl
+Description: Maxi Gbe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mxm
+Description: Meramera
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mxn
+Description: Moi (Indonesia)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mxo
+Description: Mbowe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mxp
+Description: Tlahuitoltepec Mixe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mxq
+Description: Juquila Mixe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mxr
+Description: Murik (Malaysia)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mxs
+Description: Huitepec Mixtec
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mxt
+Description: Jamiltepec Mixtec
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mxu
+Description: Mada (Cameroon)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mxv
+Description: Metlatónoc Mixtec
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mxw
+Description: Namo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mxx
+Description: Mahou
+Description: Mawukakan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mxy
+Description: Southeastern Nochixtlán Mixtec
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mxz
+Description: Central Masela
+Added: 2009-07-29
+%%
+Type: language
+Subtag: myb
+Description: Mbay
+Added: 2009-07-29
+%%
+Type: language
+Subtag: myc
+Description: Mayeka
+Added: 2009-07-29
+%%
+Type: language
+Subtag: myd
+Description: Maramba
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mye
+Description: Myene
+Added: 2009-07-29
+%%
+Type: language
+Subtag: myf
+Description: Bambassi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: myg
+Description: Manta
+Added: 2009-07-29
+%%
+Type: language
+Subtag: myh
+Description: Makah
+Added: 2009-07-29
+%%
+Type: language
+Subtag: myi
+Description: Mina (India)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: myj
+Description: Mangayat
+Added: 2009-07-29
+%%
+Type: language
+Subtag: myk
+Description: Mamara Senoufo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: myl
+Description: Moma
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mym
+Description: Me'en
+Added: 2009-07-29
+%%
+Type: language
+Subtag: myn
+Description: Mayan languages
+Added: 2005-10-16
+Scope: collection
+%%
+Type: language
+Subtag: myo
+Description: Anfillo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: myp
+Description: Pirahã
+Added: 2009-07-29
+%%
+Type: language
+Subtag: myq
+Description: Forest Maninka
+Added: 2009-07-29
+Macrolanguage: man
+%%
+Type: language
+Subtag: myr
+Description: Muniche
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mys
+Description: Mesmes
+Added: 2009-07-29
+%%
+Type: language
+Subtag: myt
+Description: Sangab Mandaya
+Added: 2009-07-29
+Deprecated: 2010-03-11
+Preferred-Value: mry
+%%
+Type: language
+Subtag: myu
+Description: Mundurukú
+Added: 2009-07-29
+%%
+Type: language
+Subtag: myv
+Description: Erzya
+Added: 2005-10-16
+%%
+Type: language
+Subtag: myw
+Description: Muyuw
+Added: 2009-07-29
+%%
+Type: language
+Subtag: myx
+Description: Masaaba
+Added: 2009-07-29
+%%
+Type: language
+Subtag: myy
+Description: Macuna
+Added: 2009-07-29
+%%
+Type: language
+Subtag: myz
+Description: Classical Mandaic
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mza
+Description: Santa María Zacatepec Mixtec
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mzb
+Description: Tumzabt
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mzc
+Description: Madagascar Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mzd
+Description: Malimba
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mze
+Description: Morawa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mzg
+Description: Monastic Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mzh
+Description: Wichí Lhamtés Güisnay
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mzi
+Description: Ixcatlán Mazatec
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mzj
+Description: Manya
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mzk
+Description: Nigeria Mambila
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mzl
+Description: Mazatlán Mixe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mzm
+Description: Mumuye
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mzn
+Description: Mazanderani
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mzo
+Description: Matipuhy
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mzp
+Description: Movima
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mzq
+Description: Mori Atas
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mzr
+Description: Marúbo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mzs
+Description: Macanese
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mzt
+Description: Mintil
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mzu
+Description: Inapang
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mzv
+Description: Manza
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mzw
+Description: Deg
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mzx
+Description: Mawayana
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mzy
+Description: Mozambican Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: mzz
+Description: Maiadomu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: naa
+Description: Namla
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nab
+Description: Southern Nambikuára
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nac
+Description: Narak
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nad
+Description: Nijadali
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nae
+Description: Naka'ela
+Added: 2009-07-29
+%%
+Type: language
+Subtag: naf
+Description: Nabak
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nag
+Description: Naga Pidgin
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nah
+Description: Nahuatl languages
+Added: 2005-10-16
+Scope: collection
+%%
+Type: language
+Subtag: nai
+Description: North American Indian languages
+Added: 2005-10-16
+Scope: collection
+%%
+Type: language
+Subtag: naj
+Description: Nalu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nak
+Description: Nakanai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nal
+Description: Nalik
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nam
+Description: Ngan'gityemerri
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nan
+Description: Min Nan Chinese
+Added: 2009-07-29
+Macrolanguage: zh
+%%
+Type: language
+Subtag: nao
+Description: Naaba
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nap
+Description: Neapolitan
+Added: 2005-10-16
+%%
+Type: language
+Subtag: naq
+Description: Nama (Namibia)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nar
+Description: Iguta
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nas
+Description: Naasioi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nat
+Description: Hungworo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: naw
+Description: Nawuri
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nax
+Description: Nakwi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nay
+Description: Narrinyeri
+Added: 2009-07-29
+%%
+Type: language
+Subtag: naz
+Description: Coatepec Nahuatl
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nba
+Description: Nyemba
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nbb
+Description: Ndoe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nbc
+Description: Chang Naga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nbd
+Description: Ngbinda
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nbe
+Description: Konyak Naga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nbf
+Description: Naxi
+Added: 2009-07-29
+Deprecated: 2011-08-16
+Comments: see nru, nxq
+%%
+Type: language
+Subtag: nbg
+Description: Nagarchal
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nbh
+Description: Ngamo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nbi
+Description: Mao Naga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nbj
+Description: Ngarinman
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nbk
+Description: Nake
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nbm
+Description: Ngbaka Ma'bo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nbn
+Description: Kuri
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nbo
+Description: Nkukoli
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nbp
+Description: Nnam
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nbq
+Description: Nggem
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nbr
+Description: Numana-Nunku-Gbantu-Numbu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nbs
+Description: Namibian Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nbt
+Description: Na
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nbu
+Description: Rongmei Naga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nbv
+Description: Ngamambo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nbw
+Description: Southern Ngbandi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nbx
+Description: Ngura
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nby
+Description: Ningera
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nca
+Description: Iyo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ncb
+Description: Central Nicobarese
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ncc
+Description: Ponam
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ncd
+Description: Nachering
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nce
+Description: Yale
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ncf
+Description: Notsi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ncg
+Description: Nisga'a
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nch
+Description: Central Huasteca Nahuatl
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nci
+Description: Classical Nahuatl
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ncj
+Description: Northern Puebla Nahuatl
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nck
+Description: Nakara
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ncl
+Description: Michoacán Nahuatl
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ncm
+Description: Nambo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ncn
+Description: Nauna
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nco
+Description: Sibe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ncp
+Description: Ndaktup
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ncr
+Description: Ncane
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ncs
+Description: Nicaraguan Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nct
+Description: Chothe Naga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ncu
+Description: Chumburung
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ncx
+Description: Central Puebla Nahuatl
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ncz
+Description: Natchez
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nda
+Description: Ndasa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ndb
+Description: Kenswei Nsei
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ndc
+Description: Ndau
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ndd
+Description: Nde-Nsele-Nta
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ndf
+Description: Nadruvian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ndg
+Description: Ndengereko
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ndh
+Description: Ndali
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ndi
+Description: Samba Leko
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ndj
+Description: Ndamba
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ndk
+Description: Ndaka
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ndl
+Description: Ndolo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ndm
+Description: Ndam
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ndn
+Description: Ngundi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ndp
+Description: Ndo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ndq
+Description: Ndombe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ndr
+Description: Ndoola
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nds
+Description: Low German
+Description: Low Saxon
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: ndt
+Description: Ndunga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ndu
+Description: Dugun
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ndv
+Description: Ndut
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ndw
+Description: Ndobo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ndx
+Description: Nduga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ndy
+Description: Lutos
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ndz
+Description: Ndogo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nea
+Description: Eastern Ngad'a
+Added: 2009-07-29
+%%
+Type: language
+Subtag: neb
+Description: Toura (Côte d'Ivoire)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nec
+Description: Nedebang
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ned
+Description: Nde-Gbite
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nee
+Description: Nêlêmwa-Nixumwak
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nef
+Description: Nefamese
+Added: 2009-07-29
+%%
+Type: language
+Subtag: neg
+Description: Negidal
+Added: 2009-07-29
+%%
+Type: language
+Subtag: neh
+Description: Nyenkha
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nei
+Description: Neo-Hittite
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nej
+Description: Neko
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nek
+Description: Neku
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nem
+Description: Nemi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nen
+Description: Nengone
+Added: 2009-07-29
+%%
+Type: language
+Subtag: neo
+Description: Ná-Meo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: neq
+Description: North Central Mixe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ner
+Description: Yahadian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nes
+Description: Bhoti Kinnauri
+Added: 2009-07-29
+%%
+Type: language
+Subtag: net
+Description: Nete
+Added: 2009-07-29
+%%
+Type: language
+Subtag: neu
+Description: Neo
+Added: 2012-08-12
+%%
+Type: language
+Subtag: nev
+Description: Nyaheun
+Added: 2009-07-29
+%%
+Type: language
+Subtag: new
+Description: Newari
+Description: Nepal Bhasa
+Added: 2005-10-16
+%%
+Type: language
+Subtag: nex
+Description: Neme
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ney
+Description: Neyo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nez
+Description: Nez Perce
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nfa
+Description: Dhao
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nfd
+Description: Ahwai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nfl
+Description: Ayiwo
+Description: Äiwoo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nfr
+Description: Nafaanra
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nfu
+Description: Mfumte
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nga
+Description: Ngbaka
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ngb
+Description: Northern Ngbandi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ngc
+Description: Ngombe (Democratic Republic of Congo)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ngd
+Description: Ngando (Central African Republic)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nge
+Description: Ngemba
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ngf
+Description: Trans-New Guinea languages
+Added: 2009-07-29
+Scope: collection
+%%
+Type: language
+Subtag: ngg
+Description: Ngbaka Manza
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ngh
+Description: N/u
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ngi
+Description: Ngizim
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ngj
+Description: Ngie
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ngk
+Description: Ngalkbun
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ngl
+Description: Lomwe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ngm
+Description: Ngatik Men's Creole
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ngn
+Description: Ngwo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ngo
+Description: Ngoni
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ngp
+Description: Ngulu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ngq
+Description: Ngurimi
+Description: Ngoreme
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ngr
+Description: Engdewu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ngs
+Description: Gvoko
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ngt
+Description: Ngeq
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ngu
+Description: Guerrero Nahuatl
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ngv
+Description: Nagumi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ngw
+Description: Ngwaba
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ngx
+Description: Nggwahyi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ngy
+Description: Tibea
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ngz
+Description: Ngungwel
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nha
+Description: Nhanda
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nhb
+Description: Beng
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nhc
+Description: Tabasco Nahuatl
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nhd
+Description: Chiripá
+Description: Ava Guaraní
+Added: 2009-07-29
+Macrolanguage: gn
+%%
+Type: language
+Subtag: nhe
+Description: Eastern Huasteca Nahuatl
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nhf
+Description: Nhuwala
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nhg
+Description: Tetelcingo Nahuatl
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nhh
+Description: Nahari
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nhi
+Description: Zacatlán-Ahuacatlán-Tepetzintla Nahuatl
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nhk
+Description: Isthmus-Cosoleacaque Nahuatl
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nhm
+Description: Morelos Nahuatl
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nhn
+Description: Central Nahuatl
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nho
+Description: Takuu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nhp
+Description: Isthmus-Pajapan Nahuatl
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nhq
+Description: Huaxcaleca Nahuatl
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nhr
+Description: Naro
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nht
+Description: Ometepec Nahuatl
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nhu
+Description: Noone
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nhv
+Description: Temascaltepec Nahuatl
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nhw
+Description: Western Huasteca Nahuatl
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nhx
+Description: Isthmus-Mecayapan Nahuatl
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nhy
+Description: Northern Oaxaca Nahuatl
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nhz
+Description: Santa María La Alta Nahuatl
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nia
+Description: Nias
+Added: 2005-10-16
+%%
+Type: language
+Subtag: nib
+Description: Nakame
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nic
+Description: Niger-Kordofanian languages
+Added: 2005-10-16
+Scope: collection
+%%
+Type: language
+Subtag: nid
+Description: Ngandi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nie
+Description: Niellim
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nif
+Description: Nek
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nig
+Description: Ngalakan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nih
+Description: Nyiha (Tanzania)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nii
+Description: Nii
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nij
+Description: Ngaju
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nik
+Description: Southern Nicobarese
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nil
+Description: Nila
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nim
+Description: Nilamba
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nin
+Description: Ninzo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nio
+Description: Nganasan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: niq
+Description: Nandi
+Added: 2009-07-29
+Macrolanguage: kln
+%%
+Type: language
+Subtag: nir
+Description: Nimboran
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nis
+Description: Nimi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nit
+Description: Southeastern Kolami
+Added: 2009-07-29
+%%
+Type: language
+Subtag: niu
+Description: Niuean
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: niv
+Description: Gilyak
+Added: 2009-07-29
+%%
+Type: language
+Subtag: niw
+Description: Nimo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nix
+Description: Hema
+Added: 2009-07-29
+%%
+Type: language
+Subtag: niy
+Description: Ngiti
+Added: 2009-07-29
+%%
+Type: language
+Subtag: niz
+Description: Ningil
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nja
+Description: Nzanyi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: njb
+Description: Nocte Naga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: njd
+Description: Ndonde Hamba
+Added: 2009-07-29
+%%
+Type: language
+Subtag: njh
+Description: Lotha Naga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nji
+Description: Gudanji
+Added: 2009-07-29
+%%
+Type: language
+Subtag: njj
+Description: Njen
+Added: 2009-07-29
+%%
+Type: language
+Subtag: njl
+Description: Njalgulgule
+Added: 2009-07-29
+%%
+Type: language
+Subtag: njm
+Description: Angami Naga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: njn
+Description: Liangmai Naga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: njo
+Description: Ao Naga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: njr
+Description: Njerep
+Added: 2009-07-29
+%%
+Type: language
+Subtag: njs
+Description: Nisa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: njt
+Description: Ndyuka-Trio Pidgin
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nju
+Description: Ngadjunmaya
+Added: 2009-07-29
+%%
+Type: language
+Subtag: njx
+Description: Kunyi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: njy
+Description: Njyem
+Added: 2009-07-29
+%%
+Type: language
+Subtag: njz
+Description: Nyishi
+Added: 2012-08-12
+%%
+Type: language
+Subtag: nka
+Description: Nkoya
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nkb
+Description: Khoibu Naga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nkc
+Description: Nkongho
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nkd
+Description: Koireng
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nke
+Description: Duke
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nkf
+Description: Inpui Naga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nkg
+Description: Nekgini
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nkh
+Description: Khezha Naga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nki
+Description: Thangal Naga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nkj
+Description: Nakai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nkk
+Description: Nokuku
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nkm
+Description: Namat
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nkn
+Description: Nkangala
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nko
+Description: Nkonya
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nkp
+Description: Niuatoputapu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nkq
+Description: Nkami
+Added: 2010-04-16
+%%
+Type: language
+Subtag: nkr
+Description: Nukuoro
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nks
+Description: North Asmat
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nkt
+Description: Nyika (Tanzania)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nku
+Description: Bouna Kulango
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nkv
+Description: Nyika (Malawi and Zambia)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nkw
+Description: Nkutu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nkx
+Description: Nkoroo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nkz
+Description: Nkari
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nla
+Description: Ngombale
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nlc
+Description: Nalca
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nle
+Description: East Nyala
+Added: 2009-07-29
+Macrolanguage: luy
+%%
+Type: language
+Subtag: nlg
+Description: Gela
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nli
+Description: Grangali
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nlj
+Description: Nyali
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nlk
+Description: Ninia Yali
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nll
+Description: Nihali
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nln
+Description: Durango Nahuatl
+Added: 2009-07-29
+Deprecated: 2012-08-12
+Comments: see azd, azn
+%%
+Type: language
+Subtag: nlo
+Description: Ngul
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nlr
+Description: Ngarla
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nlu
+Description: Nchumbulu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nlv
+Description: Orizaba Nahuatl
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nlx
+Description: Nahali
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nly
+Description: Nyamal
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nlz
+Description: Nalögo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nma
+Description: Maram Naga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nmb
+Description: Big Nambas
+Description: V'ënen Taut
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nmc
+Description: Ngam
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nmd
+Description: Ndumu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nme
+Description: Mzieme Naga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nmf
+Description: Tangkhul Naga (India)
+Added: 2009-07-29
+Comments: see ntx
+%%
+Type: language
+Subtag: nmg
+Description: Kwasio
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nmh
+Description: Monsang Naga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nmi
+Description: Nyam
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nmj
+Description: Ngombe (Central African Republic)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nmk
+Description: Namakura
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nml
+Description: Ndemli
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nmm
+Description: Manangba
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nmn
+Description: !Xóõ
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nmo
+Description: Moyon Naga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nmp
+Description: Nimanbur
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nmq
+Description: Nambya
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nmr
+Description: Nimbari
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nms
+Description: Letemboi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nmt
+Description: Namonuito
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nmu
+Description: Northeast Maidu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nmv
+Description: Ngamini
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nmw
+Description: Nimoa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nmx
+Description: Nama (Papua New Guinea)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nmy
+Description: Namuyi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nmz
+Description: Nawdm
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nna
+Description: Nyangumarta
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nnb
+Description: Nande
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nnc
+Description: Nancere
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nnd
+Description: West Ambae
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nne
+Description: Ngandyera
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nnf
+Description: Ngaing
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nng
+Description: Maring Naga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nnh
+Description: Ngiemboon
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nni
+Description: North Nuaulu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nnj
+Description: Nyangatom
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nnk
+Description: Nankina
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nnl
+Description: Northern Rengma Naga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nnm
+Description: Namia
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nnn
+Description: Ngete
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nnp
+Description: Wancho Naga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nnq
+Description: Ngindo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nnr
+Description: Narungga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nns
+Description: Ningye
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nnt
+Description: Nanticoke
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nnu
+Description: Dwang
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nnv
+Description: Nugunu (Australia)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nnw
+Description: Southern Nuni
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nnx
+Description: Ngong
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nny
+Description: Nyangga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nnz
+Description: Nda'nda'
+Added: 2009-07-29
+%%
+Type: language
+Subtag: noa
+Description: Woun Meu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: noc
+Description: Nuk
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nod
+Description: Northern Thai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: noe
+Description: Nimadi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nof
+Description: Nomane
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nog
+Description: Nogai
+Added: 2005-10-16
+%%
+Type: language
+Subtag: noh
+Description: Nomu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: noi
+Description: Noiri
+Added: 2009-07-29
+%%
+Type: language
+Subtag: noj
+Description: Nonuya
+Added: 2010-03-11
+%%
+Type: language
+Subtag: nok
+Description: Nooksack
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nom
+Description: Nocamán
+Added: 2009-07-29
+%%
+Type: language
+Subtag: non
+Description: Old Norse
+Added: 2005-10-16
+%%
+Type: language
+Subtag: noo
+Description: Nootka
+Added: 2009-07-29
+Deprecated: 2011-08-16
+Comments: see dtd, nuk
+%%
+Type: language
+Subtag: nop
+Description: Numanggang
+Added: 2009-07-29
+%%
+Type: language
+Subtag: noq
+Description: Ngongo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nos
+Description: Eastern Nisu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: not
+Description: Nomatsiguenga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nou
+Description: Ewage-Notu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nov
+Description: Novial
+Added: 2009-07-29
+%%
+Type: language
+Subtag: now
+Description: Nyambo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: noy
+Description: Noy
+Added: 2009-07-29
+%%
+Type: language
+Subtag: noz
+Description: Nayi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: npa
+Description: Nar Phu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: npb
+Description: Nupbikha
+Added: 2009-07-29
+%%
+Type: language
+Subtag: npg
+Description: Ponyo-Gongwang Naga
+Added: 2012-08-12
+%%
+Type: language
+Subtag: nph
+Description: Phom Naga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: npi
+Description: Nepali (individual language)
+Added: 2012-08-12
+Macrolanguage: ne
+%%
+Type: language
+Subtag: npl
+Description: Southeastern Puebla Nahuatl
+Added: 2009-07-29
+%%
+Type: language
+Subtag: npn
+Description: Mondropolon
+Added: 2009-07-29
+%%
+Type: language
+Subtag: npo
+Description: Pochuri Naga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nps
+Description: Nipsan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: npu
+Description: Puimei Naga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: npy
+Description: Napu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nqg
+Description: Southern Nago
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nqk
+Description: Kura Ede Nago
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nqm
+Description: Ndom
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nqn
+Description: Nen
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nqo
+Description: N'Ko
+Description: N’Ko
+Added: 2006-06-05
+Suppress-Script: Nkoo
+%%
+Type: language
+Subtag: nqy
+Description: Akyaung Ari Naga
+Added: 2012-08-12
+%%
+Type: language
+Subtag: nra
+Description: Ngom
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nrb
+Description: Nara
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nrc
+Description: Noric
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nre
+Description: Southern Rengma Naga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nrg
+Description: Narango
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nri
+Description: Chokri Naga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nrl
+Description: Ngarluma
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nrm
+Description: Narom
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nrn
+Description: Norn
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nrp
+Description: North Picene
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nrr
+Description: Norra
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nrt
+Description: Northern Kalapuya
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nru
+Description: Narua
+Added: 2011-08-16
+%%
+Type: language
+Subtag: nrx
+Description: Ngurmbur
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nrz
+Description: Lala
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nsa
+Description: Sangtam Naga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nsc
+Description: Nshi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nsd
+Description: Southern Nisu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nse
+Description: Nsenga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nsf
+Description: Northwestern Nisu
+Added: 2012-08-12
+%%
+Type: language
+Subtag: nsg
+Description: Ngasa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nsh
+Description: Ngoshie
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nsi
+Description: Nigerian Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nsk
+Description: Naskapi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nsl
+Description: Norwegian Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nsm
+Description: Sumi Naga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nsn
+Description: Nehan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nso
+Description: Pedi
+Description: Northern Sotho
+Description: Sepedi
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: nsp
+Description: Nepalese Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nsq
+Description: Northern Sierra Miwok
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nsr
+Description: Maritime Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nss
+Description: Nali
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nst
+Description: Tase Naga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nsu
+Description: Sierra Negra Nahuatl
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nsv
+Description: Southwestern Nisu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nsw
+Description: Navut
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nsx
+Description: Nsongo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nsy
+Description: Nasal
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nsz
+Description: Nisenan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nte
+Description: Nathembo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nti
+Description: Natioro
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ntj
+Description: Ngaanyatjarra
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ntk
+Description: Ikoma-Nata-Isenye
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ntm
+Description: Nateni
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nto
+Description: Ntomba
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ntp
+Description: Northern Tepehuan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ntr
+Description: Delo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nts
+Description: Natagaimas
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ntu
+Description: Natügu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ntw
+Description: Nottoway
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ntx
+Description: Tangkhul Naga (Myanmar)
+Added: 2012-08-12
+Comments: see nmf
+%%
+Type: language
+Subtag: nty
+Description: Mantsi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ntz
+Description: Natanzi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nua
+Description: Yuaga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nub
+Description: Nubian languages
+Added: 2005-10-16
+Scope: collection
+%%
+Type: language
+Subtag: nuc
+Description: Nukuini
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nud
+Description: Ngala
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nue
+Description: Ngundu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nuf
+Description: Nusu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nug
+Description: Nungali
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nuh
+Description: Ndunda
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nui
+Description: Ngumbi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nuj
+Description: Nyole
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nuk
+Description: Nuu-chah-nulth
+Description: Nuuchahnulth
+Added: 2011-08-16
+%%
+Type: language
+Subtag: nul
+Description: Nusa Laut
+Added: 2009-07-29
+%%
+Type: language
+Subtag: num
+Description: Niuafo'ou
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nun
+Description: Anong
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nuo
+Description: Nguôn
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nup
+Description: Nupe-Nupe-Tako
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nuq
+Description: Nukumanu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nur
+Description: Nukuria
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nus
+Description: Nuer
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nut
+Description: Nung (Viet Nam)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nuu
+Description: Ngbundu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nuv
+Description: Northern Nuni
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nuw
+Description: Nguluwan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nux
+Description: Mehek
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nuy
+Description: Nunggubuyu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nuz
+Description: Tlamacazapa Nahuatl
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nvh
+Description: Nasarian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nvm
+Description: Namiae
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nvo
+Description: Nyokon
+Added: 2012-08-12
+%%
+Type: language
+Subtag: nwa
+Description: Nawathinehena
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nwb
+Description: Nyabwa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nwc
+Description: Classical Newari
+Description: Classical Nepal Bhasa
+Description: Old Newari
+Added: 2005-10-16
+%%
+Type: language
+Subtag: nwe
+Description: Ngwe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nwg
+Description: Ngayawung
+Added: 2012-08-12
+%%
+Type: language
+Subtag: nwi
+Description: Southwest Tanna
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nwm
+Description: Nyamusa-Molo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nwo
+Description: Nauo
+Added: 2012-08-12
+%%
+Type: language
+Subtag: nwr
+Description: Nawaru
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nwx
+Description: Middle Newar
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nwy
+Description: Nottoway-Meherrin
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nxa
+Description: Nauete
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nxd
+Description: Ngando (Democratic Republic of Congo)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nxe
+Description: Nage
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nxg
+Description: Ngad'a
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nxi
+Description: Nindi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nxk
+Description: Koki Naga
+Added: 2012-08-12
+%%
+Type: language
+Subtag: nxl
+Description: South Nuaulu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nxm
+Description: Numidian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nxn
+Description: Ngawun
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nxq
+Description: Naxi
+Added: 2011-08-16
+%%
+Type: language
+Subtag: nxr
+Description: Ninggerum
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nxu
+Description: Narau
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nxx
+Description: Nafri
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nyb
+Description: Nyangbo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nyc
+Description: Nyanga-li
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nyd
+Description: Nyore
+Description: Olunyole
+Added: 2009-07-29
+Macrolanguage: luy
+%%
+Type: language
+Subtag: nye
+Description: Nyengo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nyf
+Description: Giryama
+Description: Kigiryama
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nyg
+Description: Nyindu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nyh
+Description: Nyigina
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nyi
+Description: Ama (Sudan)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nyj
+Description: Nyanga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nyk
+Description: Nyaneka
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nyl
+Description: Nyeu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nym
+Description: Nyamwezi
+Added: 2005-10-16
+%%
+Type: language
+Subtag: nyn
+Description: Nyankole
+Added: 2005-10-16
+%%
+Type: language
+Subtag: nyo
+Description: Nyoro
+Added: 2005-10-16
+%%
+Type: language
+Subtag: nyp
+Description: Nyang'i
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nyq
+Description: Nayini
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nyr
+Description: Nyiha (Malawi)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nys
+Description: Nyunga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nyt
+Description: Nyawaygi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nyu
+Description: Nyungwe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nyv
+Description: Nyulnyul
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nyw
+Description: Nyaw
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nyx
+Description: Nganyaywana
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nyy
+Description: Nyakyusa-Ngonde
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nza
+Description: Tigon Mbembe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nzb
+Description: Njebi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nzi
+Description: Nzima
+Added: 2005-10-16
+%%
+Type: language
+Subtag: nzk
+Description: Nzakara
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nzm
+Description: Zeme Naga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nzs
+Description: New Zealand Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nzu
+Description: Teke-Nzikou
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nzy
+Description: Nzakambay
+Added: 2009-07-29
+%%
+Type: language
+Subtag: nzz
+Description: Nanga Dama Dogon
+Added: 2010-03-11
+%%
+Type: language
+Subtag: oaa
+Description: Orok
+Added: 2009-07-29
+%%
+Type: language
+Subtag: oac
+Description: Oroch
+Added: 2009-07-29
+%%
+Type: language
+Subtag: oar
+Description: Old Aramaic (up to 700 BCE)
+Description: Ancient Aramaic (up to 700 BCE)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: oav
+Description: Old Avar
+Added: 2009-07-29
+%%
+Type: language
+Subtag: obi
+Description: Obispeño
+Added: 2009-07-29
+%%
+Type: language
+Subtag: obk
+Description: Southern Bontok
+Added: 2010-03-11
+Macrolanguage: bnc
+%%
+Type: language
+Subtag: obl
+Description: Oblo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: obm
+Description: Moabite
+Added: 2009-07-29
+%%
+Type: language
+Subtag: obo
+Description: Obo Manobo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: obr
+Description: Old Burmese
+Added: 2009-07-29
+%%
+Type: language
+Subtag: obt
+Description: Old Breton
+Added: 2009-07-29
+%%
+Type: language
+Subtag: obu
+Description: Obulom
+Added: 2009-07-29
+%%
+Type: language
+Subtag: oca
+Description: Ocaina
+Added: 2009-07-29
+%%
+Type: language
+Subtag: och
+Description: Old Chinese
+Added: 2009-07-29
+%%
+Type: language
+Subtag: oco
+Description: Old Cornish
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ocu
+Description: Atzingo Matlatzinca
+Added: 2009-07-29
+%%
+Type: language
+Subtag: oda
+Description: Odut
+Added: 2009-07-29
+%%
+Type: language
+Subtag: odk
+Description: Od
+Added: 2009-07-29
+%%
+Type: language
+Subtag: odt
+Description: Old Dutch
+Added: 2009-07-29
+%%
+Type: language
+Subtag: odu
+Description: Odual
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ofo
+Description: Ofo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ofs
+Description: Old Frisian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ofu
+Description: Efutop
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ogb
+Description: Ogbia
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ogc
+Description: Ogbah
+Added: 2009-07-29
+%%
+Type: language
+Subtag: oge
+Description: Old Georgian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ogg
+Description: Ogbogolo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ogo
+Description: Khana
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ogu
+Description: Ogbronuagum
+Added: 2009-07-29
+%%
+Type: language
+Subtag: oht
+Description: Old Hittite
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ohu
+Description: Old Hungarian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: oia
+Description: Oirata
+Added: 2009-07-29
+%%
+Type: language
+Subtag: oin
+Description: Inebu One
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ojb
+Description: Northwestern Ojibwa
+Added: 2009-07-29
+Macrolanguage: oj
+%%
+Type: language
+Subtag: ojc
+Description: Central Ojibwa
+Added: 2009-07-29
+Macrolanguage: oj
+%%
+Type: language
+Subtag: ojg
+Description: Eastern Ojibwa
+Added: 2009-07-29
+Macrolanguage: oj
+%%
+Type: language
+Subtag: ojp
+Description: Old Japanese
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ojs
+Description: Severn Ojibwa
+Added: 2009-07-29
+Macrolanguage: oj
+%%
+Type: language
+Subtag: ojv
+Description: Ontong Java
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ojw
+Description: Western Ojibwa
+Added: 2009-07-29
+Macrolanguage: oj
+%%
+Type: language
+Subtag: oka
+Description: Okanagan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: okb
+Description: Okobo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: okd
+Description: Okodia
+Added: 2009-07-29
+%%
+Type: language
+Subtag: oke
+Description: Okpe (Southwestern Edo)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: okg
+Description: Koko Babangk
+Added: 2012-08-12
+%%
+Type: language
+Subtag: okh
+Description: Koresh-e Rostam
+Added: 2009-07-29
+%%
+Type: language
+Subtag: oki
+Description: Okiek
+Added: 2009-07-29
+Macrolanguage: kln
+%%
+Type: language
+Subtag: okj
+Description: Oko-Juwoi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: okk
+Description: Kwamtim One
+Added: 2009-07-29
+%%
+Type: language
+Subtag: okl
+Description: Old Kentish Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: okm
+Description: Middle Korean (10th-16th cent.)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: okn
+Description: Oki-No-Erabu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: oko
+Description: Old Korean (3rd-9th cent.)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: okr
+Description: Kirike
+Added: 2009-07-29
+%%
+Type: language
+Subtag: oks
+Description: Oko-Eni-Osayen
+Added: 2009-07-29
+%%
+Type: language
+Subtag: oku
+Description: Oku
+Added: 2009-07-29
+%%
+Type: language
+Subtag: okv
+Description: Orokaiva
+Added: 2009-07-29
+%%
+Type: language
+Subtag: okx
+Description: Okpe (Northwestern Edo)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ola
+Description: Walungge
+Added: 2009-07-29
+%%
+Type: language
+Subtag: old
+Description: Mochi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ole
+Description: Olekha
+Added: 2009-07-29
+%%
+Type: language
+Subtag: olm
+Description: Oloma
+Added: 2009-07-29
+%%
+Type: language
+Subtag: olo
+Description: Livvi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: olr
+Description: Olrat
+Added: 2009-07-29
+%%
+Type: language
+Subtag: oma
+Description: Omaha-Ponca
+Added: 2009-07-29
+%%
+Type: language
+Subtag: omb
+Description: East Ambae
+Added: 2009-07-29
+%%
+Type: language
+Subtag: omc
+Description: Mochica
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ome
+Description: Omejes
+Added: 2009-07-29
+%%
+Type: language
+Subtag: omg
+Description: Omagua
+Added: 2009-07-29
+%%
+Type: language
+Subtag: omi
+Description: Omi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: omk
+Description: Omok
+Added: 2009-07-29
+%%
+Type: language
+Subtag: oml
+Description: Ombo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: omn
+Description: Minoan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: omo
+Description: Utarmbung
+Added: 2009-07-29
+%%
+Type: language
+Subtag: omp
+Description: Old Manipuri
+Added: 2009-07-29
+%%
+Type: language
+Subtag: omq
+Description: Oto-Manguean languages
+Added: 2009-07-29
+Scope: collection
+%%
+Type: language
+Subtag: omr
+Description: Old Marathi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: omt
+Description: Omotik
+Added: 2009-07-29
+%%
+Type: language
+Subtag: omu
+Description: Omurano
+Added: 2009-07-29
+%%
+Type: language
+Subtag: omv
+Description: Omotic languages
+Added: 2009-07-29
+Scope: collection
+%%
+Type: language
+Subtag: omw
+Description: South Tairora
+Added: 2009-07-29
+%%
+Type: language
+Subtag: omx
+Description: Old Mon
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ona
+Description: Ona
+Added: 2009-07-29
+%%
+Type: language
+Subtag: onb
+Description: Lingao
+Added: 2009-07-29
+%%
+Type: language
+Subtag: one
+Description: Oneida
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ong
+Description: Olo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: oni
+Description: Onin
+Added: 2009-07-29
+%%
+Type: language
+Subtag: onj
+Description: Onjob
+Added: 2009-07-29
+%%
+Type: language
+Subtag: onk
+Description: Kabore One
+Added: 2009-07-29
+%%
+Type: language
+Subtag: onn
+Description: Onobasulu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ono
+Description: Onondaga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: onp
+Description: Sartang
+Added: 2009-07-29
+%%
+Type: language
+Subtag: onr
+Description: Northern One
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ons
+Description: Ono
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ont
+Description: Ontenu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: onu
+Description: Unua
+Added: 2009-07-29
+%%
+Type: language
+Subtag: onw
+Description: Old Nubian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: onx
+Description: Onin Based Pidgin
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ood
+Description: Tohono O'odham
+Added: 2009-07-29
+%%
+Type: language
+Subtag: oog
+Description: Ong
+Added: 2009-07-29
+%%
+Type: language
+Subtag: oon
+Description: Önge
+Added: 2009-07-29
+%%
+Type: language
+Subtag: oor
+Description: Oorlams
+Added: 2009-07-29
+%%
+Type: language
+Subtag: oos
+Description: Old Ossetic
+Added: 2009-07-29
+%%
+Type: language
+Subtag: opa
+Description: Okpamheri
+Added: 2009-07-29
+%%
+Type: language
+Subtag: opk
+Description: Kopkaka
+Added: 2009-07-29
+%%
+Type: language
+Subtag: opm
+Description: Oksapmin
+Added: 2009-07-29
+%%
+Type: language
+Subtag: opo
+Description: Opao
+Added: 2009-07-29
+%%
+Type: language
+Subtag: opt
+Description: Opata
+Added: 2009-07-29
+%%
+Type: language
+Subtag: opy
+Description: Ofayé
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ora
+Description: Oroha
+Added: 2009-07-29
+%%
+Type: language
+Subtag: orc
+Description: Orma
+Added: 2009-07-29
+Macrolanguage: om
+%%
+Type: language
+Subtag: ore
+Description: Orejón
+Added: 2009-07-29
+%%
+Type: language
+Subtag: org
+Description: Oring
+Added: 2009-07-29
+%%
+Type: language
+Subtag: orh
+Description: Oroqen
+Added: 2009-07-29
+%%
+Type: language
+Subtag: orn
+Description: Orang Kanaq
+Added: 2009-07-29
+Macrolanguage: ms
+%%
+Type: language
+Subtag: oro
+Description: Orokolo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: orr
+Description: Oruma
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ors
+Description: Orang Seletar
+Added: 2009-07-29
+Macrolanguage: ms
+%%
+Type: language
+Subtag: ort
+Description: Adivasi Oriya
+Added: 2009-07-29
+%%
+Type: language
+Subtag: oru
+Description: Ormuri
+Added: 2009-07-29
+%%
+Type: language
+Subtag: orv
+Description: Old Russian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: orw
+Description: Oro Win
+Added: 2009-07-29
+%%
+Type: language
+Subtag: orx
+Description: Oro
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ory
+Description: Oriya (individual language)
+Added: 2012-08-12
+Macrolanguage: or
+%%
+Type: language
+Subtag: orz
+Description: Ormu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: osa
+Description: Osage
+Added: 2005-10-16
+%%
+Type: language
+Subtag: osc
+Description: Oscan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: osi
+Description: Osing
+Added: 2009-07-29
+%%
+Type: language
+Subtag: oso
+Description: Ososo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: osp
+Description: Old Spanish
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ost
+Description: Osatu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: osu
+Description: Southern One
+Added: 2009-07-29
+%%
+Type: language
+Subtag: osx
+Description: Old Saxon
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ota
+Description: Ottoman Turkish (1500-1928)
+Added: 2005-10-16
+%%
+Type: language
+Subtag: otb
+Description: Old Tibetan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: otd
+Description: Ot Danum
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ote
+Description: Mezquital Otomi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: oti
+Description: Oti
+Added: 2009-07-29
+%%
+Type: language
+Subtag: otk
+Description: Old Turkish
+Added: 2009-07-29
+%%
+Type: language
+Subtag: otl
+Description: Tilapa Otomi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: otm
+Description: Eastern Highland Otomi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: otn
+Description: Tenango Otomi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: oto
+Description: Otomian languages
+Added: 2005-10-16
+Scope: collection
+%%
+Type: language
+Subtag: otq
+Description: Querétaro Otomi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: otr
+Description: Otoro
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ots
+Description: Estado de México Otomi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ott
+Description: Temoaya Otomi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: otu
+Description: Otuke
+Added: 2009-07-29
+%%
+Type: language
+Subtag: otw
+Description: Ottawa
+Added: 2009-07-29
+Macrolanguage: oj
+%%
+Type: language
+Subtag: otx
+Description: Texcatepec Otomi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: oty
+Description: Old Tamil
+Added: 2009-07-29
+%%
+Type: language
+Subtag: otz
+Description: Ixtenco Otomi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: oua
+Description: Tagargrent
+Added: 2009-07-29
+%%
+Type: language
+Subtag: oub
+Description: Glio-Oubi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: oue
+Description: Oune
+Added: 2009-07-29
+%%
+Type: language
+Subtag: oui
+Description: Old Uighur
+Added: 2009-07-29
+%%
+Type: language
+Subtag: oum
+Description: Ouma
+Added: 2009-07-29
+%%
+Type: language
+Subtag: oun
+Description: !O!ung
+Added: 2009-07-29
+%%
+Type: language
+Subtag: owi
+Description: Owiniga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: owl
+Description: Old Welsh
+Added: 2009-07-29
+%%
+Type: language
+Subtag: oyb
+Description: Oy
+Added: 2009-07-29
+%%
+Type: language
+Subtag: oyd
+Description: Oyda
+Added: 2009-07-29
+%%
+Type: language
+Subtag: oym
+Description: Wayampi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: oyy
+Description: Oya'oya
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ozm
+Description: Koonzime
+Added: 2009-07-29
+%%
+Type: language
+Subtag: paa
+Description: Papuan languages
+Added: 2005-10-16
+Scope: collection
+%%
+Type: language
+Subtag: pab
+Description: Parecís
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pac
+Description: Pacoh
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pad
+Description: Paumarí
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pae
+Description: Pagibete
+Added: 2009-07-29
+%%
+Type: language
+Subtag: paf
+Description: Paranawát
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pag
+Description: Pangasinan
+Added: 2005-10-16
+%%
+Type: language
+Subtag: pah
+Description: Tenharim
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pai
+Description: Pe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pak
+Description: Parakanã
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pal
+Description: Pahlavi
+Added: 2005-10-16
+%%
+Type: language
+Subtag: pam
+Description: Pampanga
+Description: Kapampangan
+Added: 2005-10-16
+%%
+Type: language
+Subtag: pao
+Description: Northern Paiute
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pap
+Description: Papiamento
+Added: 2005-10-16
+%%
+Type: language
+Subtag: paq
+Description: Parya
+Added: 2009-07-29
+%%
+Type: language
+Subtag: par
+Description: Panamint
+Description: Timbisha
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pas
+Description: Papasena
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pat
+Description: Papitalai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pau
+Description: Palauan
+Added: 2005-10-16
+%%
+Type: language
+Subtag: pav
+Description: Pakaásnovos
+Added: 2009-07-29
+%%
+Type: language
+Subtag: paw
+Description: Pawnee
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pax
+Description: Pankararé
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pay
+Description: Pech
+Added: 2009-07-29
+%%
+Type: language
+Subtag: paz
+Description: Pankararú
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pbb
+Description: Páez
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pbc
+Description: Patamona
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pbe
+Description: Mezontla Popoloca
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pbf
+Description: Coyotepec Popoloca
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pbg
+Description: Paraujano
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pbh
+Description: E'ñapa Woromaipu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pbi
+Description: Parkwa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pbl
+Description: Mak (Nigeria)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pbn
+Description: Kpasam
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pbo
+Description: Papel
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pbp
+Description: Badyara
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pbr
+Description: Pangwa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pbs
+Description: Central Pame
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pbt
+Description: Southern Pashto
+Added: 2009-07-29
+Macrolanguage: ps
+%%
+Type: language
+Subtag: pbu
+Description: Northern Pashto
+Added: 2009-07-29
+Macrolanguage: ps
+%%
+Type: language
+Subtag: pbv
+Description: Pnar
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pby
+Description: Pyu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pbz
+Description: Palu
+Added: 2009-07-29
+Deprecated: 2012-08-12
+%%
+Type: language
+Subtag: pca
+Description: Santa Inés Ahuatempan Popoloca
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pcb
+Description: Pear
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pcc
+Description: Bouyei
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pcd
+Description: Picard
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pce
+Description: Ruching Palaung
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pcf
+Description: Paliyan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pcg
+Description: Paniya
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pch
+Description: Pardhan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pci
+Description: Duruwa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pcj
+Description: Parenga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pck
+Description: Paite Chin
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pcl
+Description: Pardhi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pcm
+Description: Nigerian Pidgin
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pcn
+Description: Piti
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pcp
+Description: Pacahuara
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pcr
+Description: Panang
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pcw
+Description: Pyapun
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pda
+Description: Anam
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pdc
+Description: Pennsylvania German
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pdi
+Description: Pa Di
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pdn
+Description: Podena
+Description: Fedan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pdo
+Description: Padoe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pdt
+Description: Plautdietsch
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pdu
+Description: Kayan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pea
+Description: Peranakan Indonesian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: peb
+Description: Eastern Pomo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ped
+Description: Mala (Papua New Guinea)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pee
+Description: Taje
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pef
+Description: Northeastern Pomo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: peg
+Description: Pengo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: peh
+Description: Bonan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pei
+Description: Chichimeca-Jonaz
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pej
+Description: Northern Pomo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pek
+Description: Penchal
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pel
+Description: Pekal
+Added: 2009-07-29
+Macrolanguage: ms
+%%
+Type: language
+Subtag: pem
+Description: Phende
+Added: 2009-07-29
+%%
+Type: language
+Subtag: peo
+Description: Old Persian (ca. 600-400 B.C.)
+Added: 2005-10-16
+%%
+Type: language
+Subtag: pep
+Description: Kunja
+Added: 2009-07-29
+%%
+Type: language
+Subtag: peq
+Description: Southern Pomo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pes
+Description: Iranian Persian
+Added: 2009-07-29
+Macrolanguage: fa
+%%
+Type: language
+Subtag: pev
+Description: Pémono
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pex
+Description: Petats
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pey
+Description: Petjo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pez
+Description: Eastern Penan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pfa
+Description: Pááfang
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pfe
+Description: Peere
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pfl
+Description: Pfaelzisch
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pga
+Description: Sudanese Creole Arabic
+Added: 2009-07-29
+Macrolanguage: ar
+%%
+Type: language
+Subtag: pgg
+Description: Pangwali
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pgi
+Description: Pagi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pgk
+Description: Rerep
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pgl
+Description: Primitive Irish
+Added: 2011-08-16
+%%
+Type: language
+Subtag: pgn
+Description: Paelignian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pgs
+Description: Pangseng
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pgu
+Description: Pagu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pgy
+Description: Pongyong
+Added: 2009-07-29
+Deprecated: 2012-08-12
+%%
+Type: language
+Subtag: pha
+Description: Pa-Hng
+Added: 2009-07-29
+%%
+Type: language
+Subtag: phd
+Description: Phudagi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: phg
+Description: Phuong
+Added: 2009-07-29
+%%
+Type: language
+Subtag: phh
+Description: Phukha
+Added: 2009-07-29
+%%
+Type: language
+Subtag: phi
+Description: Philippine languages
+Added: 2005-10-16
+Scope: collection
+%%
+Type: language
+Subtag: phk
+Description: Phake
+Added: 2009-07-29
+%%
+Type: language
+Subtag: phl
+Description: Phalura
+Description: Palula
+Added: 2009-07-29
+%%
+Type: language
+Subtag: phm
+Description: Phimbi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: phn
+Description: Phoenician
+Added: 2005-10-16
+%%
+Type: language
+Subtag: pho
+Description: Phunoi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: phq
+Description: Phana'
+Added: 2009-07-29
+%%
+Type: language
+Subtag: phr
+Description: Pahari-Potwari
+Added: 2009-07-29
+Macrolanguage: lah
+%%
+Type: language
+Subtag: pht
+Description: Phu Thai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: phu
+Description: Phuan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: phv
+Description: Pahlavani
+Added: 2009-07-29
+%%
+Type: language
+Subtag: phw
+Description: Phangduwali
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pia
+Description: Pima Bajo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pib
+Description: Yine
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pic
+Description: Pinji
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pid
+Description: Piaroa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pie
+Description: Piro
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pif
+Description: Pingelapese
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pig
+Description: Pisabo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pih
+Description: Pitcairn-Norfolk
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pii
+Description: Pini
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pij
+Description: Pijao
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pil
+Description: Yom
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pim
+Description: Powhatan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pin
+Description: Piame
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pio
+Description: Piapoco
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pip
+Description: Pero
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pir
+Description: Piratapuyo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pis
+Description: Pijin
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pit
+Description: Pitta Pitta
+Added: 2009-07-29
+%%
+Type: language
+Subtag: piu
+Description: Pintupi-Luritja
+Added: 2009-07-29
+%%
+Type: language
+Subtag: piv
+Description: Pileni
+Description: Vaeakau-Taumako
+Added: 2009-07-29
+%%
+Type: language
+Subtag: piw
+Description: Pimbwe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pix
+Description: Piu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: piy
+Description: Piya-Kwonci
+Added: 2009-07-29
+%%
+Type: language
+Subtag: piz
+Description: Pije
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pjt
+Description: Pitjantjatjara
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pka
+Description: Ardhamāgadhī Prākrit
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pkb
+Description: Pokomo
+Description: Kipfokomo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pkc
+Description: Paekche
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pkg
+Description: Pak-Tong
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pkh
+Description: Pankhu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pkn
+Description: Pakanha
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pko
+Description: Pökoot
+Added: 2009-07-29
+Macrolanguage: kln
+%%
+Type: language
+Subtag: pkp
+Description: Pukapuka
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pkr
+Description: Attapady Kurumba
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pks
+Description: Pakistan Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pkt
+Description: Maleng
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pku
+Description: Paku
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pla
+Description: Miani
+Added: 2009-07-29
+%%
+Type: language
+Subtag: plb
+Description: Polonombauk
+Added: 2009-07-29
+%%
+Type: language
+Subtag: plc
+Description: Central Palawano
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pld
+Description: Polari
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ple
+Description: Palu'e
+Added: 2009-07-29
+%%
+Type: language
+Subtag: plf
+Description: Central Malayo-Polynesian languages
+Added: 2009-07-29
+Scope: collection
+%%
+Type: language
+Subtag: plg
+Description: Pilagá
+Added: 2009-07-29
+%%
+Type: language
+Subtag: plh
+Description: Paulohi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: plj
+Description: Polci
+Added: 2009-07-29
+%%
+Type: language
+Subtag: plk
+Description: Kohistani Shina
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pll
+Description: Shwe Palaung
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pln
+Description: Palenquero
+Added: 2009-07-29
+%%
+Type: language
+Subtag: plo
+Description: Oluta Popoluca
+Added: 2009-07-29
+%%
+Type: language
+Subtag: plp
+Description: Palpa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: plq
+Description: Palaic
+Added: 2009-07-29
+%%
+Type: language
+Subtag: plr
+Description: Palaka Senoufo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pls
+Description: San Marcos Tlalcoyalco Popoloca
+Added: 2009-07-29
+%%
+Type: language
+Subtag: plt
+Description: Plateau Malagasy
+Added: 2009-07-29
+Macrolanguage: mg
+%%
+Type: language
+Subtag: plu
+Description: Palikúr
+Added: 2009-07-29
+%%
+Type: language
+Subtag: plv
+Description: Southwest Palawano
+Added: 2009-07-29
+%%
+Type: language
+Subtag: plw
+Description: Brooke's Point Palawano
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ply
+Description: Bolyu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: plz
+Description: Paluan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pma
+Description: Paama
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pmb
+Description: Pambia
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pmc
+Description: Palumata
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pmd
+Description: Pallanganmiddang
+Added: 2012-08-12
+%%
+Type: language
+Subtag: pme
+Description: Pwaamei
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pmf
+Description: Pamona
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pmh
+Description: Māhārāṣṭri Prākrit
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pmi
+Description: Northern Pumi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pmj
+Description: Southern Pumi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pmk
+Description: Pamlico
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pml
+Description: Lingua Franca
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pmm
+Description: Pomo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pmn
+Description: Pam
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pmo
+Description: Pom
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pmq
+Description: Northern Pame
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pmr
+Description: Paynamar
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pms
+Description: Piemontese
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pmt
+Description: Tuamotuan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pmu
+Description: Mirpur Panjabi
+Added: 2009-07-29
+Macrolanguage: lah
+%%
+Type: language
+Subtag: pmw
+Description: Plains Miwok
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pmx
+Description: Poumei Naga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pmy
+Description: Papuan Malay
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pmz
+Description: Southern Pame
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pna
+Description: Punan Bah-Biau
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pnb
+Description: Western Panjabi
+Added: 2009-07-29
+Macrolanguage: lah
+%%
+Type: language
+Subtag: pnc
+Description: Pannei
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pne
+Description: Western Penan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: png
+Description: Pongu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pnh
+Description: Penrhyn
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pni
+Description: Aoheng
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pnk
+Description: Paunaka
+Added: 2012-08-12
+%%
+Type: language
+Subtag: pnm
+Description: Punan Batu 1
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pnn
+Description: Pinai-Hagahai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pno
+Description: Panobo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pnp
+Description: Pancana
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pnq
+Description: Pana (Burkina Faso)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pnr
+Description: Panim
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pns
+Description: Ponosakan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pnt
+Description: Pontic
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pnu
+Description: Jiongnai Bunu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pnv
+Description: Pinigura
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pnw
+Description: Panytyima
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pnx
+Description: Phong-Kniang
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pny
+Description: Pinyin
+Added: 2009-07-29
+Comments: a Niger-Congo language spoken in Cameroon; not to be confused
+  with the Pinyin romanization systems used for Chinese and Tibetan
+%%
+Type: language
+Subtag: pnz
+Description: Pana (Central African Republic)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: poc
+Description: Poqomam
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pod
+Description: Ponares
+Added: 2009-07-29
+%%
+Type: language
+Subtag: poe
+Description: San Juan Atzingo Popoloca
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pof
+Description: Poke
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pog
+Description: Potiguára
+Added: 2009-07-29
+%%
+Type: language
+Subtag: poh
+Description: Poqomchi'
+Added: 2009-07-29
+%%
+Type: language
+Subtag: poi
+Description: Highland Popoluca
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pok
+Description: Pokangá
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pom
+Description: Southeastern Pomo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pon
+Description: Pohnpeian
+Added: 2005-10-16
+%%
+Type: language
+Subtag: poo
+Description: Central Pomo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pop
+Description: Pwapwa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: poq
+Description: Texistepec Popoluca
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pos
+Description: Sayula Popoluca
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pot
+Description: Potawatomi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pov
+Description: Upper Guinea Crioulo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pow
+Description: San Felipe Otlaltepec Popoloca
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pox
+Description: Polabian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: poy
+Description: Pogolo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: poz
+Description: Malayo-Polynesian languages
+Added: 2009-07-29
+Scope: collection
+%%
+Type: language
+Subtag: ppa
+Description: Pao
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ppe
+Description: Papi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ppi
+Description: Paipai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ppk
+Description: Uma
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ppl
+Description: Pipil
+Description: Nicarao
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ppm
+Description: Papuma
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ppn
+Description: Papapana
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ppo
+Description: Folopa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ppp
+Description: Pelende
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ppq
+Description: Pei
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ppr
+Description: Piru
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pps
+Description: San Luís Temalacayuca Popoloca
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ppt
+Description: Pare
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ppu
+Description: Papora
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pqa
+Description: Pa'a
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pqe
+Description: Eastern Malayo-Polynesian languages
+Added: 2009-07-29
+Scope: collection
+%%
+Type: language
+Subtag: pqm
+Description: Malecite-Passamaquoddy
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pqw
+Description: Western Malayo-Polynesian languages
+Added: 2009-07-29
+Scope: collection
+%%
+Type: language
+Subtag: pra
+Description: Prakrit languages
+Added: 2005-10-16
+Scope: collection
+%%
+Type: language
+Subtag: prb
+Description: Lua'
+Added: 2009-07-29
+%%
+Type: language
+Subtag: prc
+Description: Parachi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: prd
+Description: Parsi-Dari
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pre
+Description: Principense
+Added: 2009-07-29
+%%
+Type: language
+Subtag: prf
+Description: Paranan
+Added: 2010-03-11
+%%
+Type: language
+Subtag: prg
+Description: Prussian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: prh
+Description: Porohanon
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pri
+Description: Paicî
+Added: 2009-07-29
+%%
+Type: language
+Subtag: prk
+Description: Parauk
+Added: 2009-07-29
+%%
+Type: language
+Subtag: prl
+Description: Peruvian Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: prm
+Description: Kibiri
+Added: 2009-07-29
+%%
+Type: language
+Subtag: prn
+Description: Prasuni
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pro
+Description: Old Provençal (to 1500)
+Description: Old Occitan (to 1500)
+Added: 2005-10-16
+%%
+Type: language
+Subtag: prp
+Description: Parsi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: prq
+Description: Ashéninka Perené
+Added: 2009-07-29
+%%
+Type: language
+Subtag: prr
+Description: Puri
+Added: 2009-07-29
+%%
+Type: language
+Subtag: prs
+Description: Dari
+Description: Afghan Persian
+Added: 2009-07-29
+Macrolanguage: fa
+%%
+Type: language
+Subtag: prt
+Description: Phai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pru
+Description: Puragi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: prw
+Description: Parawen
+Added: 2009-07-29
+%%
+Type: language
+Subtag: prx
+Description: Purik
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pry
+Description: Pray 3
+Added: 2009-07-29
+%%
+Type: language
+Subtag: prz
+Description: Providencia Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: psa
+Description: Asue Awyu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: psc
+Description: Persian Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: psd
+Description: Plains Indian Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pse
+Description: Central Malay
+Added: 2009-07-29
+Macrolanguage: ms
+%%
+Type: language
+Subtag: psg
+Description: Penang Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: psh
+Description: Southwest Pashayi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: psi
+Description: Southeast Pashayi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: psl
+Description: Puerto Rican Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: psm
+Description: Pauserna
+Added: 2009-07-29
+%%
+Type: language
+Subtag: psn
+Description: Panasuan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pso
+Description: Polish Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: psp
+Description: Philippine Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: psq
+Description: Pasi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: psr
+Description: Portuguese Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pss
+Description: Kaulong
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pst
+Description: Central Pashto
+Added: 2009-07-29
+Macrolanguage: ps
+%%
+Type: language
+Subtag: psu
+Description: Sauraseni Prākrit
+Added: 2009-07-29
+%%
+Type: language
+Subtag: psw
+Description: Port Sandwich
+Added: 2009-07-29
+%%
+Type: language
+Subtag: psy
+Description: Piscataway
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pta
+Description: Pai Tavytera
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pth
+Description: Pataxó Hã-Ha-Hãe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pti
+Description: Pintiini
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ptn
+Description: Patani
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pto
+Description: Zo'é
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ptp
+Description: Patep
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ptr
+Description: Piamatsina
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ptt
+Description: Enrekang
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ptu
+Description: Bambam
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ptv
+Description: Port Vato
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ptw
+Description: Pentlatch
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pty
+Description: Pathiya
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pua
+Description: Western Highland Purepecha
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pub
+Description: Purum
+Added: 2009-07-29
+%%
+Type: language
+Subtag: puc
+Description: Punan Merap
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pud
+Description: Punan Aput
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pue
+Description: Puelche
+Added: 2009-07-29
+%%
+Type: language
+Subtag: puf
+Description: Punan Merah
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pug
+Description: Phuie
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pui
+Description: Puinave
+Added: 2009-07-29
+%%
+Type: language
+Subtag: puj
+Description: Punan Tubu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: puk
+Description: Pu Ko
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pum
+Description: Puma
+Added: 2009-07-29
+%%
+Type: language
+Subtag: puo
+Description: Puoc
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pup
+Description: Pulabu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: puq
+Description: Puquina
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pur
+Description: Puruborá
+Added: 2009-07-29
+%%
+Type: language
+Subtag: put
+Description: Putoh
+Added: 2009-07-29
+%%
+Type: language
+Subtag: puu
+Description: Punu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: puw
+Description: Puluwatese
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pux
+Description: Puare
+Added: 2009-07-29
+%%
+Type: language
+Subtag: puy
+Description: Purisimeño
+Added: 2009-07-29
+%%
+Type: language
+Subtag: puz
+Description: Purum Naga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pwa
+Description: Pawaia
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pwb
+Description: Panawa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pwg
+Description: Gapapaiwa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pwm
+Description: Molbog
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pwn
+Description: Paiwan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pwo
+Description: Pwo Western Karen
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pwr
+Description: Powari
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pww
+Description: Pwo Northern Karen
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pxm
+Description: Quetzaltepec Mixe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pye
+Description: Pye Krumen
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pym
+Description: Fyam
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pyn
+Description: Poyanáwa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pys
+Description: Paraguayan Sign Language
+Description: Lengua de Señas del Paraguay
+Added: 2010-03-11
+%%
+Type: language
+Subtag: pyu
+Description: Puyuma
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pyx
+Description: Pyu (Myanmar)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pyy
+Description: Pyen
+Added: 2009-07-29
+%%
+Type: language
+Subtag: pzn
+Description: Para Naga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: qaa..qtz
+Description: Private use
+Added: 2005-10-16
+Scope: private-use
+%%
+Type: language
+Subtag: qua
+Description: Quapaw
+Added: 2009-07-29
+%%
+Type: language
+Subtag: qub
+Description: Huallaga Huánuco Quechua
+Added: 2009-07-29
+Macrolanguage: qu
+%%
+Type: language
+Subtag: quc
+Description: K'iche'
+Description: Quiché
+Added: 2009-07-29
+%%
+Type: language
+Subtag: qud
+Description: Calderón Highland Quichua
+Added: 2009-07-29
+Macrolanguage: qu
+%%
+Type: language
+Subtag: quf
+Description: Lambayeque Quechua
+Added: 2009-07-29
+Macrolanguage: qu
+%%
+Type: language
+Subtag: qug
+Description: Chimborazo Highland Quichua
+Added: 2009-07-29
+Macrolanguage: qu
+%%
+Type: language
+Subtag: quh
+Description: South Bolivian Quechua
+Added: 2009-07-29
+Macrolanguage: qu
+%%
+Type: language
+Subtag: qui
+Description: Quileute
+Added: 2009-07-29
+%%
+Type: language
+Subtag: quk
+Description: Chachapoyas Quechua
+Added: 2009-07-29
+Macrolanguage: qu
+%%
+Type: language
+Subtag: qul
+Description: North Bolivian Quechua
+Added: 2009-07-29
+Macrolanguage: qu
+%%
+Type: language
+Subtag: qum
+Description: Sipacapense
+Added: 2009-07-29
+%%
+Type: language
+Subtag: qun
+Description: Quinault
+Added: 2009-07-29
+%%
+Type: language
+Subtag: qup
+Description: Southern Pastaza Quechua
+Added: 2009-07-29
+Macrolanguage: qu
+%%
+Type: language
+Subtag: quq
+Description: Quinqui
+Added: 2009-07-29
+%%
+Type: language
+Subtag: qur
+Description: Yanahuanca Pasco Quechua
+Added: 2009-07-29
+Macrolanguage: qu
+%%
+Type: language
+Subtag: qus
+Description: Santiago del Estero Quichua
+Added: 2009-07-29
+Macrolanguage: qu
+%%
+Type: language
+Subtag: quv
+Description: Sacapulteco
+Added: 2009-07-29
+%%
+Type: language
+Subtag: quw
+Description: Tena Lowland Quichua
+Added: 2009-07-29
+Macrolanguage: qu
+%%
+Type: language
+Subtag: qux
+Description: Yauyos Quechua
+Added: 2009-07-29
+Macrolanguage: qu
+%%
+Type: language
+Subtag: quy
+Description: Ayacucho Quechua
+Added: 2009-07-29
+Macrolanguage: qu
+%%
+Type: language
+Subtag: quz
+Description: Cusco Quechua
+Added: 2009-07-29
+Macrolanguage: qu
+%%
+Type: language
+Subtag: qva
+Description: Ambo-Pasco Quechua
+Added: 2009-07-29
+Macrolanguage: qu
+%%
+Type: language
+Subtag: qvc
+Description: Cajamarca Quechua
+Added: 2009-07-29
+Macrolanguage: qu
+%%
+Type: language
+Subtag: qve
+Description: Eastern Apurímac Quechua
+Added: 2009-07-29
+Macrolanguage: qu
+%%
+Type: language
+Subtag: qvh
+Description: Huamalíes-Dos de Mayo Huánuco Quechua
+Added: 2009-07-29
+Macrolanguage: qu
+%%
+Type: language
+Subtag: qvi
+Description: Imbabura Highland Quichua
+Added: 2009-07-29
+Macrolanguage: qu
+%%
+Type: language
+Subtag: qvj
+Description: Loja Highland Quichua
+Added: 2009-07-29
+Macrolanguage: qu
+%%
+Type: language
+Subtag: qvl
+Description: Cajatambo North Lima Quechua
+Added: 2009-07-29
+Macrolanguage: qu
+%%
+Type: language
+Subtag: qvm
+Description: Margos-Yarowilca-Lauricocha Quechua
+Added: 2009-07-29
+Macrolanguage: qu
+%%
+Type: language
+Subtag: qvn
+Description: North Junín Quechua
+Added: 2009-07-29
+Macrolanguage: qu
+%%
+Type: language
+Subtag: qvo
+Description: Napo Lowland Quechua
+Added: 2009-07-29
+Macrolanguage: qu
+%%
+Type: language
+Subtag: qvp
+Description: Pacaraos Quechua
+Added: 2009-07-29
+Macrolanguage: qu
+%%
+Type: language
+Subtag: qvs
+Description: San Martín Quechua
+Added: 2009-07-29
+Macrolanguage: qu
+%%
+Type: language
+Subtag: qvw
+Description: Huaylla Wanca Quechua
+Added: 2009-07-29
+Macrolanguage: qu
+%%
+Type: language
+Subtag: qvy
+Description: Queyu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: qvz
+Description: Northern Pastaza Quichua
+Added: 2009-07-29
+Macrolanguage: qu
+%%
+Type: language
+Subtag: qwa
+Description: Corongo Ancash Quechua
+Added: 2009-07-29
+Macrolanguage: qu
+%%
+Type: language
+Subtag: qwc
+Description: Classical Quechua
+Added: 2009-07-29
+Macrolanguage: qu
+%%
+Type: language
+Subtag: qwe
+Description: Quechuan (family)
+Added: 2009-07-29
+Scope: collection
+%%
+Type: language
+Subtag: qwh
+Description: Huaylas Ancash Quechua
+Added: 2009-07-29
+Macrolanguage: qu
+%%
+Type: language
+Subtag: qwm
+Description: Kuman (Russia)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: qws
+Description: Sihuas Ancash Quechua
+Added: 2009-07-29
+Macrolanguage: qu
+%%
+Type: language
+Subtag: qwt
+Description: Kwalhioqua-Tlatskanai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: qxa
+Description: Chiquián Ancash Quechua
+Added: 2009-07-29
+Macrolanguage: qu
+%%
+Type: language
+Subtag: qxc
+Description: Chincha Quechua
+Added: 2009-07-29
+Macrolanguage: qu
+%%
+Type: language
+Subtag: qxh
+Description: Panao Huánuco Quechua
+Added: 2009-07-29
+Macrolanguage: qu
+%%
+Type: language
+Subtag: qxl
+Description: Salasaca Highland Quichua
+Added: 2009-07-29
+Macrolanguage: qu
+%%
+Type: language
+Subtag: qxn
+Description: Northern Conchucos Ancash Quechua
+Added: 2009-07-29
+Macrolanguage: qu
+%%
+Type: language
+Subtag: qxo
+Description: Southern Conchucos Ancash Quechua
+Added: 2009-07-29
+Macrolanguage: qu
+%%
+Type: language
+Subtag: qxp
+Description: Puno Quechua
+Added: 2009-07-29
+Macrolanguage: qu
+%%
+Type: language
+Subtag: qxq
+Description: Qashqa'i
+Added: 2009-07-29
+%%
+Type: language
+Subtag: qxr
+Description: Cañar Highland Quichua
+Added: 2009-07-29
+Macrolanguage: qu
+%%
+Type: language
+Subtag: qxs
+Description: Southern Qiang
+Added: 2009-07-29
+%%
+Type: language
+Subtag: qxt
+Description: Santa Ana de Tusi Pasco Quechua
+Added: 2009-07-29
+Macrolanguage: qu
+%%
+Type: language
+Subtag: qxu
+Description: Arequipa-La Unión Quechua
+Added: 2009-07-29
+Macrolanguage: qu
+%%
+Type: language
+Subtag: qxw
+Description: Jauja Wanca Quechua
+Added: 2009-07-29
+Macrolanguage: qu
+%%
+Type: language
+Subtag: qya
+Description: Quenya
+Added: 2009-07-29
+%%
+Type: language
+Subtag: qyp
+Description: Quiripi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: raa
+Description: Dungmali
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rab
+Description: Camling
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rac
+Description: Rasawa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rad
+Description: Rade
+Added: 2009-07-29
+%%
+Type: language
+Subtag: raf
+Description: Western Meohang
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rag
+Description: Logooli
+Description: Lulogooli
+Added: 2009-07-29
+Macrolanguage: luy
+%%
+Type: language
+Subtag: rah
+Description: Rabha
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rai
+Description: Ramoaaina
+Added: 2009-07-29
+%%
+Type: language
+Subtag: raj
+Description: Rajasthani
+Added: 2005-10-16
+Scope: macrolanguage
+%%
+Type: language
+Subtag: rak
+Description: Tulu-Bohuai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ral
+Description: Ralte
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ram
+Description: Canela
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ran
+Description: Riantana
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rao
+Description: Rao
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rap
+Description: Rapanui
+Added: 2005-10-16
+%%
+Type: language
+Subtag: raq
+Description: Saam
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rar
+Description: Rarotongan
+Description: Cook Islands Maori
+Added: 2005-10-16
+%%
+Type: language
+Subtag: ras
+Description: Tegali
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rat
+Description: Razajerdi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rau
+Description: Raute
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rav
+Description: Sampang
+Added: 2009-07-29
+%%
+Type: language
+Subtag: raw
+Description: Rawang
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rax
+Description: Rang
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ray
+Description: Rapa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: raz
+Description: Rahambuu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rbb
+Description: Rumai Palaung
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rbk
+Description: Northern Bontok
+Added: 2010-03-11
+Macrolanguage: bnc
+%%
+Type: language
+Subtag: rbl
+Description: Miraya Bikol
+Added: 2010-03-11
+Macrolanguage: bik
+%%
+Type: language
+Subtag: rbp
+Description: Barababaraba
+Added: 2012-08-12
+%%
+Type: language
+Subtag: rcf
+Description: Réunion Creole French
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rdb
+Description: Rudbari
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rea
+Description: Rerau
+Added: 2009-07-29
+%%
+Type: language
+Subtag: reb
+Description: Rembong
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ree
+Description: Rejang Kayan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: reg
+Description: Kara (Tanzania)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rei
+Description: Reli
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rej
+Description: Rejang
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rel
+Description: Rendille
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rem
+Description: Remo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ren
+Description: Rengao
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rer
+Description: Rer Bare
+Added: 2009-07-29
+%%
+Type: language
+Subtag: res
+Description: Reshe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ret
+Description: Retta
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rey
+Description: Reyesano
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rga
+Description: Roria
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rge
+Description: Romano-Greek
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rgk
+Description: Rangkas
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rgn
+Description: Romagnol
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rgr
+Description: Resígaro
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rgs
+Description: Southern Roglai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rgu
+Description: Ringgou
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rhg
+Description: Rohingya
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rhp
+Description: Yahang
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ria
+Description: Riang (India)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rie
+Description: Rien
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rif
+Description: Tarifit
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ril
+Description: Riang (Myanmar)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rim
+Description: Nyaturu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rin
+Description: Nungu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rir
+Description: Ribun
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rit
+Description: Ritarungo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: riu
+Description: Riung
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rjg
+Description: Rajong
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rji
+Description: Raji
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rjs
+Description: Rajbanshi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rka
+Description: Kraol
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rkb
+Description: Rikbaktsa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rkh
+Description: Rakahanga-Manihiki
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rki
+Description: Rakhine
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rkm
+Description: Marka
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rkt
+Description: Rangpuri
+Description: Kamta
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rma
+Description: Rama
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rmb
+Description: Rembarunga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rmc
+Description: Carpathian Romani
+Added: 2009-07-29
+Macrolanguage: rom
+%%
+Type: language
+Subtag: rmd
+Description: Traveller Danish
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rme
+Description: Angloromani
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rmf
+Description: Kalo Finnish Romani
+Added: 2009-07-29
+Macrolanguage: rom
+%%
+Type: language
+Subtag: rmg
+Description: Traveller Norwegian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rmh
+Description: Murkim
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rmi
+Description: Lomavren
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rmk
+Description: Romkun
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rml
+Description: Baltic Romani
+Added: 2009-07-29
+Macrolanguage: rom
+%%
+Type: language
+Subtag: rmm
+Description: Roma
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rmn
+Description: Balkan Romani
+Added: 2009-07-29
+Macrolanguage: rom
+%%
+Type: language
+Subtag: rmo
+Description: Sinte Romani
+Added: 2009-07-29
+Macrolanguage: rom
+%%
+Type: language
+Subtag: rmp
+Description: Rempi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rmq
+Description: Caló
+Added: 2010-03-11
+%%
+Type: language
+Subtag: rmr
+Description: Caló
+Added: 2009-07-29
+Deprecated: 2010-03-11
+Comments: see emx, rmq
+%%
+Type: language
+Subtag: rms
+Description: Romanian Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rmt
+Description: Domari
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rmu
+Description: Tavringer Romani
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rmv
+Description: Romanova
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rmw
+Description: Welsh Romani
+Added: 2009-07-29
+Macrolanguage: rom
+%%
+Type: language
+Subtag: rmx
+Description: Romam
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rmy
+Description: Vlax Romani
+Added: 2009-07-29
+Macrolanguage: rom
+%%
+Type: language
+Subtag: rmz
+Description: Marma
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rna
+Description: Runa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rnd
+Description: Ruund
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rng
+Description: Ronga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rnl
+Description: Ranglong
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rnn
+Description: Roon
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rnp
+Description: Rongpo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rnr
+Description: Nari Nari
+Added: 2012-08-20
+%%
+Type: language
+Subtag: rnw
+Description: Rungwa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: roa
+Description: Romance languages
+Added: 2005-10-16
+Scope: collection
+%%
+Type: language
+Subtag: rob
+Description: Tae'
+Added: 2009-07-29
+%%
+Type: language
+Subtag: roc
+Description: Cacgia Roglai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rod
+Description: Rogo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: roe
+Description: Ronji
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rof
+Description: Rombo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rog
+Description: Northern Roglai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rol
+Description: Romblomanon
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rom
+Description: Romany
+Added: 2005-10-16
+Scope: macrolanguage
+%%
+Type: language
+Subtag: roo
+Description: Rotokas
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rop
+Description: Kriol
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ror
+Description: Rongga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rou
+Description: Runga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: row
+Description: Dela-Oenale
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rpn
+Description: Repanbitip
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rpt
+Description: Rapting
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rri
+Description: Ririo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rro
+Description: Waima
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rrt
+Description: Arritinngithigh
+Added: 2012-08-12
+%%
+Type: language
+Subtag: rsb
+Description: Romano-Serbian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rsi
+Description: Rennellese Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rsl
+Description: Russian Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rtc
+Description: Rungtu Chin
+Added: 2012-08-12
+%%
+Type: language
+Subtag: rth
+Description: Ratahan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rtm
+Description: Rotuman
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rtw
+Description: Rathawi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rub
+Description: Gungu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ruc
+Description: Ruuli
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rue
+Description: Rusyn
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ruf
+Description: Luguru
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rug
+Description: Roviana
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ruh
+Description: Ruga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rui
+Description: Rufiji
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ruk
+Description: Che
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ruo
+Description: Istro Romanian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rup
+Description: Macedo-Romanian
+Description: Aromanian
+Description: Arumanian
+Added: 2005-10-16
+%%
+Type: language
+Subtag: ruq
+Description: Megleno Romanian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rut
+Description: Rutul
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ruu
+Description: Lanas Lobu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ruy
+Description: Mala (Nigeria)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ruz
+Description: Ruma
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rwa
+Description: Rawo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rwk
+Description: Rwa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rwm
+Description: Amba (Uganda)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rwo
+Description: Rawa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rwr
+Description: Marwari (India)
+Added: 2009-07-29
+Macrolanguage: mwr
+%%
+Type: language
+Subtag: ryn
+Description: Northern Amami-Oshima
+Added: 2009-07-29
+%%
+Type: language
+Subtag: rys
+Description: Yaeyama
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ryu
+Description: Central Okinawan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: saa
+Description: Saba
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sab
+Description: Buglere
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sac
+Description: Meskwaki
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sad
+Description: Sandawe
+Added: 2005-10-16
+%%
+Type: language
+Subtag: sae
+Description: Sabanê
+Added: 2009-07-29
+%%
+Type: language
+Subtag: saf
+Description: Safaliba
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sah
+Description: Yakut
+Added: 2005-10-16
+%%
+Type: language
+Subtag: sai
+Description: South American Indian languages
+Added: 2005-10-16
+Scope: collection
+%%
+Type: language
+Subtag: saj
+Description: Sahu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sak
+Description: Sake
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sal
+Description: Salishan languages
+Added: 2005-10-16
+Scope: collection
+%%
+Type: language
+Subtag: sam
+Description: Samaritan Aramaic
+Added: 2005-10-16
+%%
+Type: language
+Subtag: sao
+Description: Sause
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sap
+Description: Sanapaná
+Added: 2009-07-29
+%%
+Type: language
+Subtag: saq
+Description: Samburu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sar
+Description: Saraveca
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sas
+Description: Sasak
+Added: 2005-10-16
+%%
+Type: language
+Subtag: sat
+Description: Santali
+Added: 2005-10-16
+%%
+Type: language
+Subtag: sau
+Description: Saleman
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sav
+Description: Saafi-Saafi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: saw
+Description: Sawi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sax
+Description: Sa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: say
+Description: Saya
+Added: 2009-07-29
+%%
+Type: language
+Subtag: saz
+Description: Saurashtra
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sba
+Description: Ngambay
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sbb
+Description: Simbo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sbc
+Description: Kele (Papua New Guinea)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sbd
+Description: Southern Samo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sbe
+Description: Saliba
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sbf
+Description: Shabo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sbg
+Description: Seget
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sbh
+Description: Sori-Harengan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sbi
+Description: Seti
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sbj
+Description: Surbakhal
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sbk
+Description: Safwa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sbl
+Description: Botolan Sambal
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sbm
+Description: Sagala
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sbn
+Description: Sindhi Bhil
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sbo
+Description: Sabüm
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sbp
+Description: Sangu (Tanzania)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sbq
+Description: Sileibi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sbr
+Description: Sembakung Murut
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sbs
+Description: Subiya
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sbt
+Description: Kimki
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sbu
+Description: Stod Bhoti
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sbv
+Description: Sabine
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sbw
+Description: Simba
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sbx
+Description: Seberuang
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sby
+Description: Soli
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sbz
+Description: Sara Kaba
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sca
+Description: Sansu
+Added: 2009-07-29
+Deprecated: 2012-08-12
+Preferred-Value: hle
+%%
+Type: language
+Subtag: scb
+Description: Chut
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sce
+Description: Dongxiang
+Added: 2009-07-29
+%%
+Type: language
+Subtag: scf
+Description: San Miguel Creole French
+Added: 2009-07-29
+%%
+Type: language
+Subtag: scg
+Description: Sanggau
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sch
+Description: Sakachep
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sci
+Description: Sri Lankan Creole Malay
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sck
+Description: Sadri
+Added: 2009-07-29
+%%
+Type: language
+Subtag: scl
+Description: Shina
+Added: 2009-07-29
+%%
+Type: language
+Subtag: scn
+Description: Sicilian
+Added: 2005-10-16
+%%
+Type: language
+Subtag: sco
+Description: Scots
+Added: 2005-10-16
+%%
+Type: language
+Subtag: scp
+Description: Helambu Sherpa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: scq
+Description: Sa'och
+Added: 2009-07-29
+%%
+Type: language
+Subtag: scs
+Description: North Slavey
+Added: 2009-07-29
+Macrolanguage: den
+%%
+Type: language
+Subtag: scu
+Description: Shumcho
+Added: 2009-07-29
+%%
+Type: language
+Subtag: scv
+Description: Sheni
+Added: 2009-07-29
+%%
+Type: language
+Subtag: scw
+Description: Sha
+Added: 2009-07-29
+%%
+Type: language
+Subtag: scx
+Description: Sicel
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sda
+Description: Toraja-Sa'dan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sdb
+Description: Shabak
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sdc
+Description: Sassarese Sardinian
+Added: 2009-07-29
+Macrolanguage: sc
+%%
+Type: language
+Subtag: sde
+Description: Surubu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sdf
+Description: Sarli
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sdg
+Description: Savi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sdh
+Description: Southern Kurdish
+Added: 2009-07-29
+Macrolanguage: ku
+%%
+Type: language
+Subtag: sdj
+Description: Suundi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sdk
+Description: Sos Kundi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sdl
+Description: Saudi Arabian Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sdm
+Description: Semandang
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sdn
+Description: Gallurese Sardinian
+Added: 2009-07-29
+Macrolanguage: sc
+%%
+Type: language
+Subtag: sdo
+Description: Bukar-Sadung Bidayuh
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sdp
+Description: Sherdukpen
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sdr
+Description: Oraon Sadri
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sds
+Description: Sened
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sdt
+Description: Shuadit
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sdu
+Description: Sarudu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sdv
+Description: Eastern Sudanic languages
+Added: 2009-07-29
+Scope: collection
+%%
+Type: language
+Subtag: sdx
+Description: Sibu Melanau
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sdz
+Description: Sallands
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sea
+Description: Semai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: seb
+Description: Shempire Senoufo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sec
+Description: Sechelt
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sed
+Description: Sedang
+Added: 2009-07-29
+%%
+Type: language
+Subtag: see
+Description: Seneca
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sef
+Description: Cebaara Senoufo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: seg
+Description: Segeju
+Added: 2009-07-29
+%%
+Type: language
+Subtag: seh
+Description: Sena
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sei
+Description: Seri
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sej
+Description: Sene
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sek
+Description: Sekani
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sel
+Description: Selkup
+Added: 2005-10-16
+%%
+Type: language
+Subtag: sem
+Description: Semitic languages
+Added: 2005-10-16
+Scope: collection
+%%
+Type: language
+Subtag: sen
+Description: Nanerigé Sénoufo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: seo
+Description: Suarmin
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sep
+Description: Sìcìté Sénoufo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: seq
+Description: Senara Sénoufo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ser
+Description: Serrano
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ses
+Description: Koyraboro Senni Songhai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: set
+Description: Sentani
+Added: 2009-07-29
+%%
+Type: language
+Subtag: seu
+Description: Serui-Laut
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sev
+Description: Nyarafolo Senoufo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sew
+Description: Sewa Bay
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sey
+Description: Secoya
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sez
+Description: Senthang Chin
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sfb
+Description: Langue des signes de Belgique Francophone
+Description: French Belgian Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sfe
+Description: Eastern Subanen
+Added: 2012-08-12
+%%
+Type: language
+Subtag: sfm
+Description: Small Flowery Miao
+Added: 2009-07-29
+Macrolanguage: hmn
+%%
+Type: language
+Subtag: sfs
+Description: South African Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sfw
+Description: Sehwi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sga
+Description: Old Irish (to 900)
+Added: 2005-10-16
+%%
+Type: language
+Subtag: sgb
+Description: Mag-antsi Ayta
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sgc
+Description: Kipsigis
+Added: 2009-07-29
+Macrolanguage: kln
+%%
+Type: language
+Subtag: sgd
+Description: Surigaonon
+Added: 2010-03-11
+%%
+Type: language
+Subtag: sge
+Description: Segai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sgg
+Description: Swiss-German Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sgh
+Description: Shughni
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sgi
+Description: Suga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sgj
+Description: Surgujia
+Added: 2012-08-12
+%%
+Type: language
+Subtag: sgk
+Description: Sangkong
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sgl
+Description: Sanglechi-Ishkashimi
+Added: 2009-07-29
+Deprecated: 2010-03-11
+Comments: see isk, sgy
+%%
+Type: language
+Subtag: sgm
+Description: Singa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sgn
+Description: Sign languages
+Added: 2005-10-16
+Scope: collection
+%%
+Type: language
+Subtag: sgo
+Description: Songa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sgp
+Description: Singpho
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sgr
+Description: Sangisari
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sgs
+Description: Samogitian
+Added: 2010-07-26
+%%
+Type: language
+Subtag: sgt
+Description: Brokpake
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sgu
+Description: Salas
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sgw
+Description: Sebat Bet Gurage
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sgx
+Description: Sierra Leone Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sgy
+Description: Sanglechi
+Added: 2010-03-11
+%%
+Type: language
+Subtag: sgz
+Description: Sursurunga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sha
+Description: Shall-Zwall
+Added: 2009-07-29
+%%
+Type: language
+Subtag: shb
+Description: Ninam
+Added: 2009-07-29
+%%
+Type: language
+Subtag: shc
+Description: Sonde
+Added: 2009-07-29
+%%
+Type: language
+Subtag: shd
+Description: Kundal Shahi
+Added: 2010-03-11
+%%
+Type: language
+Subtag: she
+Description: Sheko
+Added: 2009-07-29
+%%
+Type: language
+Subtag: shg
+Description: Shua
+Added: 2009-07-29
+%%
+Type: language
+Subtag: shh
+Description: Shoshoni
+Added: 2009-07-29
+%%
+Type: language
+Subtag: shi
+Description: Tachelhit
+Added: 2009-07-29
+%%
+Type: language
+Subtag: shj
+Description: Shatt
+Added: 2009-07-29
+%%
+Type: language
+Subtag: shk
+Description: Shilluk
+Added: 2009-07-29
+%%
+Type: language
+Subtag: shl
+Description: Shendu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: shm
+Description: Shahrudi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: shn
+Description: Shan
+Added: 2005-10-16
+%%
+Type: language
+Subtag: sho
+Description: Shanga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: shp
+Description: Shipibo-Conibo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: shq
+Description: Sala
+Added: 2009-07-29
+%%
+Type: language
+Subtag: shr
+Description: Shi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: shs
+Description: Shuswap
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sht
+Description: Shasta
+Added: 2009-07-29
+%%
+Type: language
+Subtag: shu
+Description: Chadian Arabic
+Added: 2009-07-29
+Macrolanguage: ar
+%%
+Type: language
+Subtag: shv
+Description: Shehri
+Added: 2009-07-29
+%%
+Type: language
+Subtag: shw
+Description: Shwai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: shx
+Description: She
+Added: 2009-07-29
+%%
+Type: language
+Subtag: shy
+Description: Tachawit
+Added: 2009-07-29
+%%
+Type: language
+Subtag: shz
+Description: Syenara Senoufo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sia
+Description: Akkala Sami
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sib
+Description: Sebop
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sid
+Description: Sidamo
+Added: 2005-10-16
+%%
+Type: language
+Subtag: sie
+Description: Simaa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sif
+Description: Siamou
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sig
+Description: Paasaal
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sih
+Description: Zire
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sii
+Description: Shom Peng
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sij
+Description: Numbami
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sik
+Description: Sikiana
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sil
+Description: Tumulung Sisaala
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sim
+Description: Mende (Papua New Guinea)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sio
+Description: Siouan languages
+Added: 2005-10-16
+Scope: collection
+%%
+Type: language
+Subtag: sip
+Description: Sikkimese
+Added: 2009-07-29
+%%
+Type: language
+Subtag: siq
+Description: Sonia
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sir
+Description: Siri
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sis
+Description: Siuslaw
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sit
+Description: Sino-Tibetan languages
+Added: 2005-10-16
+Scope: collection
+%%
+Type: language
+Subtag: siu
+Description: Sinagen
+Added: 2009-07-29
+%%
+Type: language
+Subtag: siv
+Description: Sumariup
+Added: 2009-07-29
+%%
+Type: language
+Subtag: siw
+Description: Siwai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: six
+Description: Sumau
+Added: 2009-07-29
+%%
+Type: language
+Subtag: siy
+Description: Sivandi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: siz
+Description: Siwi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sja
+Description: Epena
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sjb
+Description: Sajau Basap
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sjd
+Description: Kildin Sami
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sje
+Description: Pite Sami
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sjg
+Description: Assangori
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sjk
+Description: Kemi Sami
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sjl
+Description: Sajalong
+Description: Miji
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sjm
+Description: Mapun
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sjn
+Description: Sindarin
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sjo
+Description: Xibe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sjp
+Description: Surjapuri
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sjr
+Description: Siar-Lak
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sjs
+Description: Senhaja De Srair
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sjt
+Description: Ter Sami
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sju
+Description: Ume Sami
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sjw
+Description: Shawnee
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ska
+Description: Skagit
+Added: 2009-07-29
+%%
+Type: language
+Subtag: skb
+Description: Saek
+Added: 2009-07-29
+%%
+Type: language
+Subtag: skc
+Description: Ma Manda
+Added: 2009-07-29
+%%
+Type: language
+Subtag: skd
+Description: Southern Sierra Miwok
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ske
+Description: Seke (Vanuatu)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: skf
+Description: Sakirabiá
+Added: 2009-07-29
+%%
+Type: language
+Subtag: skg
+Description: Sakalava Malagasy
+Added: 2009-07-29
+Macrolanguage: mg
+%%
+Type: language
+Subtag: skh
+Description: Sikule
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ski
+Description: Sika
+Added: 2009-07-29
+%%
+Type: language
+Subtag: skj
+Description: Seke (Nepal)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: skk
+Description: Sok
+Added: 2009-07-29
+%%
+Type: language
+Subtag: skm
+Description: Kutong
+Added: 2009-07-29
+%%
+Type: language
+Subtag: skn
+Description: Kolibugan Subanon
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sko
+Description: Seko Tengah
+Added: 2009-07-29
+%%
+Type: language
+Subtag: skp
+Description: Sekapan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: skq
+Description: Sininkere
+Added: 2009-07-29
+%%
+Type: language
+Subtag: skr
+Description: Seraiki
+Added: 2009-07-29
+Macrolanguage: lah
+%%
+Type: language
+Subtag: sks
+Description: Maia
+Added: 2009-07-29
+%%
+Type: language
+Subtag: skt
+Description: Sakata
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sku
+Description: Sakao
+Added: 2009-07-29
+%%
+Type: language
+Subtag: skv
+Description: Skou
+Added: 2009-07-29
+%%
+Type: language
+Subtag: skw
+Description: Skepi Creole Dutch
+Added: 2009-07-29
+%%
+Type: language
+Subtag: skx
+Description: Seko Padang
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sky
+Description: Sikaiana
+Added: 2009-07-29
+%%
+Type: language
+Subtag: skz
+Description: Sekar
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sla
+Description: Slavic languages
+Added: 2005-10-16
+Scope: collection
+%%
+Type: language
+Subtag: slc
+Description: Sáliba
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sld
+Description: Sissala
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sle
+Description: Sholaga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: slf
+Description: Swiss-Italian Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: slg
+Description: Selungai Murut
+Added: 2009-07-29
+%%
+Type: language
+Subtag: slh
+Description: Southern Puget Sound Salish
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sli
+Description: Lower Silesian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: slj
+Description: Salumá
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sll
+Description: Salt-Yui
+Added: 2009-07-29
+%%
+Type: language
+Subtag: slm
+Description: Pangutaran Sama
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sln
+Description: Salinan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: slp
+Description: Lamaholot
+Added: 2009-07-29
+%%
+Type: language
+Subtag: slq
+Description: Salchuq
+Added: 2009-07-29
+%%
+Type: language
+Subtag: slr
+Description: Salar
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sls
+Description: Singapore Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: slt
+Description: Sila
+Added: 2009-07-29
+%%
+Type: language
+Subtag: slu
+Description: Selaru
+Added: 2009-07-29
+%%
+Type: language
+Subtag: slw
+Description: Sialum
+Added: 2009-07-29
+%%
+Type: language
+Subtag: slx
+Description: Salampasu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sly
+Description: Selayar
+Added: 2009-07-29
+%%
+Type: language
+Subtag: slz
+Description: Ma'ya
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sma
+Description: Southern Sami
+Added: 2005-10-16
+%%
+Type: language
+Subtag: smb
+Description: Simbari
+Added: 2009-07-29
+%%
+Type: language
+Subtag: smc
+Description: Som
+Added: 2009-07-29
+%%
+Type: language
+Subtag: smd
+Description: Sama
+Added: 2009-07-29
+%%
+Type: language
+Subtag: smf
+Description: Auwe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: smg
+Description: Simbali
+Added: 2009-07-29
+%%
+Type: language
+Subtag: smh
+Description: Samei
+Added: 2009-07-29
+%%
+Type: language
+Subtag: smi
+Description: Sami languages
+Added: 2005-10-16
+Scope: collection
+%%
+Type: language
+Subtag: smj
+Description: Lule Sami
+Added: 2005-10-16
+%%
+Type: language
+Subtag: smk
+Description: Bolinao
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sml
+Description: Central Sama
+Added: 2009-07-29
+%%
+Type: language
+Subtag: smm
+Description: Musasa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: smn
+Description: Inari Sami
+Added: 2005-10-16
+%%
+Type: language
+Subtag: smp
+Description: Samaritan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: smq
+Description: Samo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: smr
+Description: Simeulue
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sms
+Description: Skolt Sami
+Added: 2005-10-16
+%%
+Type: language
+Subtag: smt
+Description: Simte
+Added: 2009-07-29
+%%
+Type: language
+Subtag: smu
+Description: Somray
+Added: 2009-07-29
+%%
+Type: language
+Subtag: smv
+Description: Samvedi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: smw
+Description: Sumbawa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: smx
+Description: Samba
+Added: 2009-07-29
+%%
+Type: language
+Subtag: smy
+Description: Semnani
+Added: 2009-07-29
+%%
+Type: language
+Subtag: smz
+Description: Simeku
+Added: 2009-07-29
+%%
+Type: language
+Subtag: snb
+Description: Sebuyau
+Added: 2009-07-29
+%%
+Type: language
+Subtag: snc
+Description: Sinaugoro
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sne
+Description: Bau Bidayuh
+Added: 2009-07-29
+%%
+Type: language
+Subtag: snf
+Description: Noon
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sng
+Description: Sanga (Democratic Republic of Congo)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: snh
+Description: Shinabo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sni
+Description: Sensi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: snj
+Description: Riverain Sango
+Added: 2009-07-29
+%%
+Type: language
+Subtag: snk
+Description: Soninke
+Added: 2005-10-16
+%%
+Type: language
+Subtag: snl
+Description: Sangil
+Added: 2009-07-29
+%%
+Type: language
+Subtag: snm
+Description: Southern Ma'di
+Added: 2009-07-29
+%%
+Type: language
+Subtag: snn
+Description: Siona
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sno
+Description: Snohomish
+Added: 2009-07-29
+%%
+Type: language
+Subtag: snp
+Description: Siane
+Added: 2009-07-29
+%%
+Type: language
+Subtag: snq
+Description: Sangu (Gabon)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: snr
+Description: Sihan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sns
+Description: South West Bay
+Description: Nahavaq
+Added: 2009-07-29
+%%
+Type: language
+Subtag: snu
+Description: Senggi
+Description: Viid
+Added: 2009-07-29
+%%
+Type: language
+Subtag: snv
+Description: Sa'ban
+Added: 2009-07-29
+%%
+Type: language
+Subtag: snw
+Description: Selee
+Added: 2009-07-29
+%%
+Type: language
+Subtag: snx
+Description: Sam
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sny
+Description: Saniyo-Hiyewe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: snz
+Description: Sinsauru
+Added: 2009-07-29
+%%
+Type: language
+Subtag: soa
+Description: Thai Song
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sob
+Description: Sobei
+Added: 2009-07-29
+%%
+Type: language
+Subtag: soc
+Description: So (Democratic Republic of Congo)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sod
+Description: Songoora
+Added: 2009-07-29
+%%
+Type: language
+Subtag: soe
+Description: Songomeno
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sog
+Description: Sogdian
+Added: 2005-10-16
+%%
+Type: language
+Subtag: soh
+Description: Aka
+Added: 2009-07-29
+%%
+Type: language
+Subtag: soi
+Description: Sonha
+Added: 2009-07-29
+%%
+Type: language
+Subtag: soj
+Description: Soi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sok
+Description: Sokoro
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sol
+Description: Solos
+Added: 2009-07-29
+%%
+Type: language
+Subtag: son
+Description: Songhai languages
+Added: 2005-10-16
+Scope: collection
+%%
+Type: language
+Subtag: soo
+Description: Songo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sop
+Description: Songe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: soq
+Description: Kanasi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sor
+Description: Somrai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sos
+Description: Seeku
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sou
+Description: Southern Thai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sov
+Description: Sonsorol
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sow
+Description: Sowanda
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sox
+Description: Swo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: soy
+Description: Miyobe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: soz
+Description: Temi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: spb
+Description: Sepa (Indonesia)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: spc
+Description: Sapé
+Added: 2009-07-29
+%%
+Type: language
+Subtag: spd
+Description: Saep
+Added: 2009-07-29
+%%
+Type: language
+Subtag: spe
+Description: Sepa (Papua New Guinea)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: spg
+Description: Sian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: spi
+Description: Saponi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: spk
+Description: Sengo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: spl
+Description: Selepet
+Added: 2009-07-29
+%%
+Type: language
+Subtag: spm
+Description: Akukem
+Added: 2009-07-29
+%%
+Type: language
+Subtag: spo
+Description: Spokane
+Added: 2009-07-29
+%%
+Type: language
+Subtag: spp
+Description: Supyire Senoufo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: spq
+Description: Loreto-Ucayali Spanish
+Added: 2009-07-29
+%%
+Type: language
+Subtag: spr
+Description: Saparua
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sps
+Description: Saposa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: spt
+Description: Spiti Bhoti
+Added: 2009-07-29
+%%
+Type: language
+Subtag: spu
+Description: Sapuan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: spv
+Description: Sambalpuri
+Description: Kosli
+Added: 2012-08-12
+Macrolanguage: or
+%%
+Type: language
+Subtag: spx
+Description: South Picene
+Added: 2009-07-29
+%%
+Type: language
+Subtag: spy
+Description: Sabaot
+Added: 2009-07-29
+Macrolanguage: kln
+%%
+Type: language
+Subtag: sqa
+Description: Shama-Sambuga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sqh
+Description: Shau
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sqj
+Description: Albanian languages
+Added: 2009-07-29
+Scope: collection
+%%
+Type: language
+Subtag: sqk
+Description: Albanian Sign Language
+Added: 2012-08-12
+%%
+Type: language
+Subtag: sqm
+Description: Suma
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sqn
+Description: Susquehannock
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sqo
+Description: Sorkhei
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sqq
+Description: Sou
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sqr
+Description: Siculo Arabic
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sqs
+Description: Sri Lankan Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sqt
+Description: Soqotri
+Added: 2009-07-29
+%%
+Type: language
+Subtag: squ
+Description: Squamish
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sra
+Description: Saruga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: srb
+Description: Sora
+Added: 2009-07-29
+%%
+Type: language
+Subtag: src
+Description: Logudorese Sardinian
+Added: 2009-07-29
+Macrolanguage: sc
+%%
+Type: language
+Subtag: sre
+Description: Sara
+Added: 2009-07-29
+%%
+Type: language
+Subtag: srf
+Description: Nafi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: srg
+Description: Sulod
+Added: 2009-07-29
+%%
+Type: language
+Subtag: srh
+Description: Sarikoli
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sri
+Description: Siriano
+Added: 2009-07-29
+%%
+Type: language
+Subtag: srk
+Description: Serudung Murut
+Added: 2009-07-29
+%%
+Type: language
+Subtag: srl
+Description: Isirawa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: srm
+Description: Saramaccan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: srn
+Description: Sranan Tongo
+Added: 2005-10-16
+%%
+Type: language
+Subtag: sro
+Description: Campidanese Sardinian
+Added: 2009-07-29
+Macrolanguage: sc
+%%
+Type: language
+Subtag: srq
+Description: Sirionó
+Added: 2009-07-29
+%%
+Type: language
+Subtag: srr
+Description: Serer
+Added: 2005-10-16
+%%
+Type: language
+Subtag: srs
+Description: Sarsi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: srt
+Description: Sauri
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sru
+Description: Suruí
+Added: 2009-07-29
+%%
+Type: language
+Subtag: srv
+Description: Southern Sorsoganon
+Added: 2009-07-29
+%%
+Type: language
+Subtag: srw
+Description: Serua
+Added: 2009-07-29
+%%
+Type: language
+Subtag: srx
+Description: Sirmauri
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sry
+Description: Sera
+Added: 2009-07-29
+%%
+Type: language
+Subtag: srz
+Description: Shahmirzadi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ssa
+Description: Nilo-Saharan languages
+Added: 2005-10-16
+Scope: collection
+%%
+Type: language
+Subtag: ssb
+Description: Southern Sama
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ssc
+Description: Suba-Simbiti
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ssd
+Description: Siroi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sse
+Description: Balangingi
+Description: Bangingih Sama
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ssf
+Description: Thao
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ssg
+Description: Seimat
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ssh
+Description: Shihhi Arabic
+Added: 2009-07-29
+Macrolanguage: ar
+%%
+Type: language
+Subtag: ssi
+Description: Sansi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ssj
+Description: Sausi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ssk
+Description: Sunam
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ssl
+Description: Western Sisaala
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ssm
+Description: Semnam
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ssn
+Description: Waata
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sso
+Description: Sissano
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ssp
+Description: Spanish Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ssq
+Description: So'a
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ssr
+Description: Swiss-French Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sss
+Description: Sô
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sst
+Description: Sinasina
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ssu
+Description: Susuami
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ssv
+Description: Shark Bay
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ssx
+Description: Samberigi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ssy
+Description: Saho
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ssz
+Description: Sengseng
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sta
+Description: Settla
+Added: 2009-07-29
+%%
+Type: language
+Subtag: stb
+Description: Northern Subanen
+Added: 2009-07-29
+%%
+Type: language
+Subtag: std
+Description: Sentinel
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ste
+Description: Liana-Seti
+Added: 2009-07-29
+%%
+Type: language
+Subtag: stf
+Description: Seta
+Added: 2009-07-29
+%%
+Type: language
+Subtag: stg
+Description: Trieng
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sth
+Description: Shelta
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sti
+Description: Bulo Stieng
+Added: 2009-07-29
+%%
+Type: language
+Subtag: stj
+Description: Matya Samo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: stk
+Description: Arammba
+Added: 2009-07-29
+%%
+Type: language
+Subtag: stl
+Description: Stellingwerfs
+Added: 2009-07-29
+%%
+Type: language
+Subtag: stm
+Description: Setaman
+Added: 2009-07-29
+%%
+Type: language
+Subtag: stn
+Description: Owa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sto
+Description: Stoney
+Added: 2009-07-29
+%%
+Type: language
+Subtag: stp
+Description: Southeastern Tepehuan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: stq
+Description: Saterfriesisch
+Added: 2009-07-29
+%%
+Type: language
+Subtag: str
+Description: Straits Salish
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sts
+Description: Shumashti
+Added: 2009-07-29
+%%
+Type: language
+Subtag: stt
+Description: Budeh Stieng
+Added: 2009-07-29
+%%
+Type: language
+Subtag: stu
+Description: Samtao
+Added: 2009-07-29
+%%
+Type: language
+Subtag: stv
+Description: Silt'e
+Added: 2009-07-29
+%%
+Type: language
+Subtag: stw
+Description: Satawalese
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sua
+Description: Sulka
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sub
+Description: Suku
+Added: 2009-07-29
+%%
+Type: language
+Subtag: suc
+Description: Western Subanon
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sue
+Description: Suena
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sug
+Description: Suganga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sui
+Description: Suki
+Added: 2009-07-29
+%%
+Type: language
+Subtag: suj
+Description: Shubi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: suk
+Description: Sukuma
+Added: 2005-10-16
+%%
+Type: language
+Subtag: sul
+Description: Surigaonon
+Added: 2009-07-29
+Deprecated: 2010-03-11
+Comments: see sgd, tgn
+%%
+Type: language
+Subtag: sum
+Description: Sumo-Mayangna
+Added: 2009-07-29
+Deprecated: 2010-03-11
+Comments: see ulw, yan
+%%
+Type: language
+Subtag: suq
+Description: Suri
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sur
+Description: Mwaghavul
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sus
+Description: Susu
+Added: 2005-10-16
+%%
+Type: language
+Subtag: sut
+Description: Subtiaba
+Added: 2009-07-29
+%%
+Type: language
+Subtag: suv
+Description: Puroik
+Added: 2009-07-29
+%%
+Type: language
+Subtag: suw
+Description: Sumbwa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sux
+Description: Sumerian
+Added: 2005-10-16
+%%
+Type: language
+Subtag: suy
+Description: Suyá
+Added: 2009-07-29
+%%
+Type: language
+Subtag: suz
+Description: Sunwar
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sva
+Description: Svan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: svb
+Description: Ulau-Suain
+Added: 2009-07-29
+%%
+Type: language
+Subtag: svc
+Description: Vincentian Creole English
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sve
+Description: Serili
+Added: 2009-07-29
+%%
+Type: language
+Subtag: svk
+Description: Slovakian Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: svr
+Description: Savara
+Added: 2009-07-29
+%%
+Type: language
+Subtag: svs
+Description: Savosavo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: svx
+Description: Skalvian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: swb
+Description: Maore Comorian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: swc
+Description: Congo Swahili
+Added: 2009-07-29
+Macrolanguage: sw
+%%
+Type: language
+Subtag: swf
+Description: Sere
+Added: 2009-07-29
+%%
+Type: language
+Subtag: swg
+Description: Swabian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: swh
+Description: Swahili (individual language)
+Description: Kiswahili
+Added: 2009-07-29
+Macrolanguage: sw
+%%
+Type: language
+Subtag: swi
+Description: Sui
+Added: 2009-07-29
+%%
+Type: language
+Subtag: swj
+Description: Sira
+Added: 2009-07-29
+%%
+Type: language
+Subtag: swk
+Description: Malawi Sena
+Added: 2009-07-29
+%%
+Type: language
+Subtag: swl
+Description: Swedish Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: swm
+Description: Samosa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: swn
+Description: Sawknah
+Added: 2009-07-29
+%%
+Type: language
+Subtag: swo
+Description: Shanenawa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: swp
+Description: Suau
+Added: 2009-07-29
+%%
+Type: language
+Subtag: swq
+Description: Sharwa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: swr
+Description: Saweru
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sws
+Description: Seluwasan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: swt
+Description: Sawila
+Added: 2009-07-29
+%%
+Type: language
+Subtag: swu
+Description: Suwawa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: swv
+Description: Shekhawati
+Added: 2009-07-29
+Macrolanguage: mwr
+%%
+Type: language
+Subtag: sww
+Description: Sowa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: swx
+Description: Suruahá
+Added: 2009-07-29
+%%
+Type: language
+Subtag: swy
+Description: Sarua
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sxb
+Description: Suba
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sxc
+Description: Sicanian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sxe
+Description: Sighu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sxg
+Description: Shixing
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sxk
+Description: Southern Kalapuya
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sxl
+Description: Selian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sxm
+Description: Samre
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sxn
+Description: Sangir
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sxo
+Description: Sorothaptic
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sxr
+Description: Saaroa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sxs
+Description: Sasaru
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sxu
+Description: Upper Saxon
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sxw
+Description: Saxwe Gbe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sya
+Description: Siang
+Added: 2009-07-29
+%%
+Type: language
+Subtag: syb
+Description: Central Subanen
+Added: 2009-07-29
+%%
+Type: language
+Subtag: syc
+Description: Classical Syriac
+Added: 2007-04-03
+%%
+Type: language
+Subtag: syd
+Description: Samoyedic languages
+Added: 2009-07-29
+Scope: collection
+%%
+Type: language
+Subtag: syi
+Description: Seki
+Added: 2009-07-29
+%%
+Type: language
+Subtag: syk
+Description: Sukur
+Added: 2009-07-29
+%%
+Type: language
+Subtag: syl
+Description: Sylheti
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sym
+Description: Maya Samo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: syn
+Description: Senaya
+Added: 2009-07-29
+%%
+Type: language
+Subtag: syo
+Description: Suoy
+Added: 2009-07-29
+%%
+Type: language
+Subtag: syr
+Description: Syriac
+Added: 2005-10-16
+Scope: macrolanguage
+%%
+Type: language
+Subtag: sys
+Description: Sinyar
+Added: 2009-07-29
+%%
+Type: language
+Subtag: syw
+Description: Kagate
+Added: 2009-07-29
+%%
+Type: language
+Subtag: syy
+Description: Al-Sayyid Bedouin Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sza
+Description: Semelai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: szb
+Description: Ngalum
+Added: 2009-07-29
+%%
+Type: language
+Subtag: szc
+Description: Semaq Beri
+Added: 2009-07-29
+%%
+Type: language
+Subtag: szd
+Description: Seru
+Added: 2009-07-29
+%%
+Type: language
+Subtag: sze
+Description: Seze
+Added: 2009-07-29
+%%
+Type: language
+Subtag: szg
+Description: Sengele
+Added: 2009-07-29
+%%
+Type: language
+Subtag: szl
+Description: Silesian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: szn
+Description: Sula
+Added: 2009-07-29
+%%
+Type: language
+Subtag: szp
+Description: Suabo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: szv
+Description: Isu (Fako Division)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: szw
+Description: Sawai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: taa
+Description: Lower Tanana
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tab
+Description: Tabassaran
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tac
+Description: Lowland Tarahumara
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tad
+Description: Tause
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tae
+Description: Tariana
+Added: 2009-07-29
+%%
+Type: language
+Subtag: taf
+Description: Tapirapé
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tag
+Description: Tagoi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tai
+Description: Tai languages
+Added: 2005-10-16
+Scope: collection
+%%
+Type: language
+Subtag: taj
+Description: Eastern Tamang
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tak
+Description: Tala
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tal
+Description: Tal
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tan
+Description: Tangale
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tao
+Description: Yami
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tap
+Description: Taabwa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: taq
+Description: Tamasheq
+Added: 2009-07-29
+Macrolanguage: tmh
+%%
+Type: language
+Subtag: tar
+Description: Central Tarahumara
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tas
+Description: Tay Boi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tau
+Description: Upper Tanana
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tav
+Description: Tatuyo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: taw
+Description: Tai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tax
+Description: Tamki
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tay
+Description: Atayal
+Added: 2009-07-29
+%%
+Type: language
+Subtag: taz
+Description: Tocho
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tba
+Description: Aikanã
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tbb
+Description: Tapeba
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tbc
+Description: Takia
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tbd
+Description: Kaki Ae
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tbe
+Description: Tanimbili
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tbf
+Description: Mandara
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tbg
+Description: North Tairora
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tbh
+Description: Thurawal
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tbi
+Description: Gaam
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tbj
+Description: Tiang
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tbk
+Description: Calamian Tagbanwa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tbl
+Description: Tboli
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tbm
+Description: Tagbu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tbn
+Description: Barro Negro Tunebo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tbo
+Description: Tawala
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tbp
+Description: Taworta
+Description: Diebroud
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tbq
+Description: Tibeto-Burman languages
+Added: 2009-07-29
+Scope: collection
+%%
+Type: language
+Subtag: tbr
+Description: Tumtum
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tbs
+Description: Tanguat
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tbt
+Description: Tembo (Kitembo)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tbu
+Description: Tubar
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tbv
+Description: Tobo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tbw
+Description: Tagbanwa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tbx
+Description: Kapin
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tby
+Description: Tabaru
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tbz
+Description: Ditammari
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tca
+Description: Ticuna
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tcb
+Description: Tanacross
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tcc
+Description: Datooga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tcd
+Description: Tafi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tce
+Description: Southern Tutchone
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tcf
+Description: Malinaltepec Me'phaa
+Description: Malinaltepec Tlapanec
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tcg
+Description: Tamagario
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tch
+Description: Turks And Caicos Creole English
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tci
+Description: Wára
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tck
+Description: Tchitchege
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tcl
+Description: Taman (Myanmar)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tcm
+Description: Tanahmerah
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tcn
+Description: Tichurong
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tco
+Description: Taungyo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tcp
+Description: Tawr Chin
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tcq
+Description: Kaiy
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tcs
+Description: Torres Strait Creole
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tct
+Description: T'en
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tcu
+Description: Southeastern Tarahumara
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tcw
+Description: Tecpatlán Totonac
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tcx
+Description: Toda
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tcy
+Description: Tulu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tcz
+Description: Thado Chin
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tda
+Description: Tagdal
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tdb
+Description: Panchpargania
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tdc
+Description: Emberá-Tadó
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tdd
+Description: Tai Nüa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tde
+Description: Tiranige Diga Dogon
+Added: 2010-03-11
+%%
+Type: language
+Subtag: tdf
+Description: Talieng
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tdg
+Description: Western Tamang
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tdh
+Description: Thulung
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tdi
+Description: Tomadino
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tdj
+Description: Tajio
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tdk
+Description: Tambas
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tdl
+Description: Sur
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tdn
+Description: Tondano
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tdo
+Description: Teme
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tdq
+Description: Tita
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tdr
+Description: Todrah
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tds
+Description: Doutai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tdt
+Description: Tetun Dili
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tdu
+Description: Tempasuk Dusun
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tdv
+Description: Toro
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tdx
+Description: Tandroy-Mahafaly Malagasy
+Added: 2009-07-29
+Macrolanguage: mg
+%%
+Type: language
+Subtag: tdy
+Description: Tadyawan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tea
+Description: Temiar
+Added: 2009-07-29
+%%
+Type: language
+Subtag: teb
+Description: Tetete
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tec
+Description: Terik
+Added: 2009-07-29
+Macrolanguage: kln
+%%
+Type: language
+Subtag: ted
+Description: Tepo Krumen
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tee
+Description: Huehuetla Tepehua
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tef
+Description: Teressa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: teg
+Description: Teke-Tege
+Added: 2009-07-29
+%%
+Type: language
+Subtag: teh
+Description: Tehuelche
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tei
+Description: Torricelli
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tek
+Description: Ibali Teke
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tem
+Description: Timne
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: ten
+Description: Tama (Colombia)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: teo
+Description: Teso
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tep
+Description: Tepecano
+Added: 2009-07-29
+%%
+Type: language
+Subtag: teq
+Description: Temein
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ter
+Description: Tereno
+Added: 2005-10-16
+%%
+Type: language
+Subtag: tes
+Description: Tengger
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tet
+Description: Tetum
+Added: 2005-10-16
+%%
+Type: language
+Subtag: teu
+Description: Soo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tev
+Description: Teor
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tew
+Description: Tewa (USA)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tex
+Description: Tennet
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tey
+Description: Tulishi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tfi
+Description: Tofin Gbe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tfn
+Description: Tanaina
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tfo
+Description: Tefaro
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tfr
+Description: Teribe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tft
+Description: Ternate
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tga
+Description: Sagalla
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tgb
+Description: Tobilung
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tgc
+Description: Tigak
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tgd
+Description: Ciwogai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tge
+Description: Eastern Gorkha Tamang
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tgf
+Description: Chalikha
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tgg
+Description: Tangga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tgh
+Description: Tobagonian Creole English
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tgi
+Description: Lawunuia
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tgj
+Description: Tagin
+Added: 2012-08-12
+%%
+Type: language
+Subtag: tgn
+Description: Tandaganon
+Added: 2010-03-11
+%%
+Type: language
+Subtag: tgo
+Description: Sudest
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tgp
+Description: Tangoa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tgq
+Description: Tring
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tgr
+Description: Tareng
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tgs
+Description: Nume
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tgt
+Description: Central Tagbanwa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tgu
+Description: Tanggu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tgv
+Description: Tingui-Boto
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tgw
+Description: Tagwana Senoufo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tgx
+Description: Tagish
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tgy
+Description: Togoyo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tgz
+Description: Tagalaka
+Added: 2012-08-12
+%%
+Type: language
+Subtag: thc
+Description: Tai Hang Tong
+Added: 2009-07-29
+%%
+Type: language
+Subtag: thd
+Description: Thayore
+Added: 2009-07-29
+%%
+Type: language
+Subtag: the
+Description: Chitwania Tharu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: thf
+Description: Thangmi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: thh
+Description: Northern Tarahumara
+Added: 2009-07-29
+%%
+Type: language
+Subtag: thi
+Description: Tai Long
+Added: 2009-07-29
+%%
+Type: language
+Subtag: thk
+Description: Tharaka
+Description: Kitharaka
+Added: 2009-07-29
+%%
+Type: language
+Subtag: thl
+Description: Dangaura Tharu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: thm
+Description: Aheu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: thn
+Description: Thachanadan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: thp
+Description: Thompson
+Added: 2009-07-29
+%%
+Type: language
+Subtag: thq
+Description: Kochila Tharu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: thr
+Description: Rana Tharu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ths
+Description: Thakali
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tht
+Description: Tahltan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: thu
+Description: Thuri
+Added: 2009-07-29
+%%
+Type: language
+Subtag: thv
+Description: Tahaggart Tamahaq
+Added: 2009-07-29
+Macrolanguage: tmh
+%%
+Type: language
+Subtag: thw
+Description: Thudam
+Added: 2009-07-29
+%%
+Type: language
+Subtag: thx
+Description: The
+Added: 2009-07-29
+%%
+Type: language
+Subtag: thy
+Description: Tha
+Added: 2009-07-29
+%%
+Type: language
+Subtag: thz
+Description: Tayart Tamajeq
+Added: 2009-07-29
+Macrolanguage: tmh
+%%
+Type: language
+Subtag: tia
+Description: Tidikelt Tamazight
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tic
+Description: Tira
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tid
+Description: Tidong
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tie
+Description: Tingal
+Added: 2009-07-29
+Deprecated: 2011-08-16
+Preferred-Value: ras
+%%
+Type: language
+Subtag: tif
+Description: Tifal
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tig
+Description: Tigre
+Added: 2005-10-16
+%%
+Type: language
+Subtag: tih
+Description: Timugon Murut
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tii
+Description: Tiene
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tij
+Description: Tilung
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tik
+Description: Tikar
+Added: 2009-07-29
+%%
+Type: language
+Subtag: til
+Description: Tillamook
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tim
+Description: Timbe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tin
+Description: Tindi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tio
+Description: Teop
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tip
+Description: Trimuris
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tiq
+Description: Tiéfo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tis
+Description: Masadiit Itneg
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tit
+Description: Tinigua
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tiu
+Description: Adasen
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tiv
+Description: Tiv
+Added: 2005-10-16
+%%
+Type: language
+Subtag: tiw
+Description: Tiwi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tix
+Description: Southern Tiwa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tiy
+Description: Tiruray
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tiz
+Description: Tai Hongjin
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tja
+Description: Tajuasohn
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tjg
+Description: Tunjung
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tji
+Description: Northern Tujia
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tjl
+Description: Tai Laing
+Added: 2012-08-12
+%%
+Type: language
+Subtag: tjm
+Description: Timucua
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tjn
+Description: Tonjon
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tjo
+Description: Temacine Tamazight
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tjs
+Description: Southern Tujia
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tju
+Description: Tjurruru
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tka
+Description: Truká
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tkb
+Description: Buksa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tkd
+Description: Tukudede
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tke
+Description: Takwane
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tkf
+Description: Tukumanféd
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tkg
+Description: Tesaka Malagasy
+Added: 2011-08-16
+Macrolanguage: mg
+%%
+Type: language
+Subtag: tkk
+Description: Takpa
+Added: 2009-07-29
+Deprecated: 2011-08-16
+Preferred-Value: twm
+%%
+Type: language
+Subtag: tkl
+Description: Tokelau
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: tkm
+Description: Takelma
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tkn
+Description: Toku-No-Shima
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tkp
+Description: Tikopia
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tkq
+Description: Tee
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tkr
+Description: Tsakhur
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tks
+Description: Takestani
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tkt
+Description: Kathoriya Tharu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tku
+Description: Upper Necaxa Totonac
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tkw
+Description: Teanu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tkx
+Description: Tangko
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tkz
+Description: Takua
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tla
+Description: Southwestern Tepehuan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tlb
+Description: Tobelo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tlc
+Description: Yecuatla Totonac
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tld
+Description: Talaud
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tlf
+Description: Telefol
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tlg
+Description: Tofanma
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tlh
+Description: Klingon
+Description: tlhIngan-Hol
+Added: 2005-10-16
+%%
+Type: language
+Subtag: tli
+Description: Tlingit
+Added: 2005-10-16
+%%
+Type: language
+Subtag: tlj
+Description: Talinga-Bwisi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tlk
+Description: Taloki
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tll
+Description: Tetela
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tlm
+Description: Tolomako
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tln
+Description: Talondo'
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tlo
+Description: Talodi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tlp
+Description: Filomena Mata-Coahuitlán Totonac
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tlq
+Description: Tai Loi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tlr
+Description: Talise
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tls
+Description: Tambotalo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tlt
+Description: Teluti
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tlu
+Description: Tulehu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tlv
+Description: Taliabu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tlw
+Description: South Wemale
+Added: 2009-07-29
+Deprecated: 2012-08-12
+Preferred-Value: weo
+%%
+Type: language
+Subtag: tlx
+Description: Khehek
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tly
+Description: Talysh
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tma
+Description: Tama (Chad)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tmb
+Description: Katbol
+Description: Avava
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tmc
+Description: Tumak
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tmd
+Description: Haruai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tme
+Description: Tremembé
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tmf
+Description: Toba-Maskoy
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tmg
+Description: Ternateño
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tmh
+Description: Tamashek
+Added: 2005-10-16
+Suppress-Script: Latn
+Scope: macrolanguage
+%%
+Type: language
+Subtag: tmi
+Description: Tutuba
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tmj
+Description: Samarokena
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tmk
+Description: Northwestern Tamang
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tml
+Description: Tamnim Citak
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tmm
+Description: Tai Thanh
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tmn
+Description: Taman (Indonesia)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tmo
+Description: Temoq
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tmp
+Description: Tai Mène
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tmq
+Description: Tumleo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tmr
+Description: Jewish Babylonian Aramaic (ca. 200-1200 CE)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tms
+Description: Tima
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tmt
+Description: Tasmate
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tmu
+Description: Iau
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tmv
+Description: Tembo (Motembo)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tmw
+Description: Temuan
+Added: 2009-07-29
+Macrolanguage: ms
+%%
+Type: language
+Subtag: tmy
+Description: Tami
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tmz
+Description: Tamanaku
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tna
+Description: Tacana
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tnb
+Description: Western Tunebo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tnc
+Description: Tanimuca-Retuarã
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tnd
+Description: Angosturas Tunebo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tne
+Description: Tinoc Kallahan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tnf
+Description: Tangshewi
+Added: 2009-07-29
+Deprecated: 2010-03-11
+Preferred-Value: prs
+%%
+Type: language
+Subtag: tng
+Description: Tobanga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tnh
+Description: Maiani
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tni
+Description: Tandia
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tnk
+Description: Kwamera
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tnl
+Description: Lenakel
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tnm
+Description: Tabla
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tnn
+Description: North Tanna
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tno
+Description: Toromono
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tnp
+Description: Whitesands
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tnq
+Description: Taino
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tnr
+Description: Bedik
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tns
+Description: Tenis
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tnt
+Description: Tontemboan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tnu
+Description: Tay Khang
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tnv
+Description: Tangchangya
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tnw
+Description: Tonsawang
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tnx
+Description: Tanema
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tny
+Description: Tongwe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tnz
+Description: Tonga (Thailand)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tob
+Description: Toba
+Added: 2009-07-29
+%%
+Type: language
+Subtag: toc
+Description: Coyutla Totonac
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tod
+Description: Toma
+Added: 2009-07-29
+%%
+Type: language
+Subtag: toe
+Description: Tomedes
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tof
+Description: Gizrra
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tog
+Description: Tonga (Nyasa)
+Added: 2005-10-16
+%%
+Type: language
+Subtag: toh
+Description: Gitonga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: toi
+Description: Tonga (Zambia)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: toj
+Description: Tojolabal
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tol
+Description: Tolowa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tom
+Description: Tombulu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: too
+Description: Xicotepec De Juárez Totonac
+Added: 2009-07-29
+%%
+Type: language
+Subtag: top
+Description: Papantla Totonac
+Added: 2009-07-29
+%%
+Type: language
+Subtag: toq
+Description: Toposa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tor
+Description: Togbo-Vara Banda
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tos
+Description: Highland Totonac
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tou
+Description: Tho
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tov
+Description: Upper Taromi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tow
+Description: Jemez
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tox
+Description: Tobian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: toy
+Description: Topoiyo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: toz
+Description: To
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tpa
+Description: Taupota
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tpc
+Description: Azoyú Me'phaa
+Description: Azoyú Tlapanec
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tpe
+Description: Tippera
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tpf
+Description: Tarpia
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tpg
+Description: Kula
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tpi
+Description: Tok Pisin
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: tpj
+Description: Tapieté
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tpk
+Description: Tupinikin
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tpl
+Description: Tlacoapa Me'phaa
+Description: Tlacoapa Tlapanec
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tpm
+Description: Tampulma
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tpn
+Description: Tupinambá
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tpo
+Description: Tai Pao
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tpp
+Description: Pisaflores Tepehua
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tpq
+Description: Tukpa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tpr
+Description: Tuparí
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tpt
+Description: Tlachichilco Tepehua
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tpu
+Description: Tampuan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tpv
+Description: Tanapag
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tpw
+Description: Tupí
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tpx
+Description: Acatepec Me'phaa
+Description: Acatepec Tlapanec
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tpy
+Description: Trumai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tpz
+Description: Tinputz
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tqb
+Description: Tembé
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tql
+Description: Lehali
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tqm
+Description: Turumsa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tqn
+Description: Tenino
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tqo
+Description: Toaripi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tqp
+Description: Tomoip
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tqq
+Description: Tunni
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tqr
+Description: Torona
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tqt
+Description: Western Totonac
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tqu
+Description: Touo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tqw
+Description: Tonkawa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tra
+Description: Tirahi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: trb
+Description: Terebu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: trc
+Description: Copala Triqui
+Added: 2009-07-29
+%%
+Type: language
+Subtag: trd
+Description: Turi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tre
+Description: East Tarangan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: trf
+Description: Trinidadian Creole English
+Added: 2009-07-29
+%%
+Type: language
+Subtag: trg
+Description: Lishán Didán
+Added: 2009-07-29
+%%
+Type: language
+Subtag: trh
+Description: Turaka
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tri
+Description: Trió
+Added: 2009-07-29
+%%
+Type: language
+Subtag: trj
+Description: Toram
+Added: 2009-07-29
+%%
+Type: language
+Subtag: trk
+Description: Turkic languages
+Added: 2009-07-29
+Scope: collection
+%%
+Type: language
+Subtag: trl
+Description: Traveller Scottish
+Added: 2009-07-29
+%%
+Type: language
+Subtag: trm
+Description: Tregami
+Added: 2009-07-29
+%%
+Type: language
+Subtag: trn
+Description: Trinitario
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tro
+Description: Tarao Naga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: trp
+Description: Kok Borok
+Added: 2009-07-29
+%%
+Type: language
+Subtag: trq
+Description: San Martín Itunyoso Triqui
+Added: 2009-07-29
+%%
+Type: language
+Subtag: trr
+Description: Taushiro
+Added: 2009-07-29
+%%
+Type: language
+Subtag: trs
+Description: Chicahuaxtla Triqui
+Added: 2009-07-29
+%%
+Type: language
+Subtag: trt
+Description: Tunggare
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tru
+Description: Turoyo
+Description: Surayt
+Added: 2009-07-29
+%%
+Type: language
+Subtag: trv
+Description: Taroko
+Added: 2009-07-29
+%%
+Type: language
+Subtag: trw
+Description: Torwali
+Added: 2009-07-29
+%%
+Type: language
+Subtag: trx
+Description: Tringgus-Sembaan Bidayuh
+Added: 2009-07-29
+%%
+Type: language
+Subtag: try
+Description: Turung
+Added: 2009-07-29
+%%
+Type: language
+Subtag: trz
+Description: Torá
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tsa
+Description: Tsaangi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tsb
+Description: Tsamai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tsc
+Description: Tswa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tsd
+Description: Tsakonian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tse
+Description: Tunisian Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tsf
+Description: Southwestern Tamang
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tsg
+Description: Tausug
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tsh
+Description: Tsuvan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tsi
+Description: Tsimshian
+Added: 2005-10-16
+%%
+Type: language
+Subtag: tsj
+Description: Tshangla
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tsk
+Description: Tseku
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tsl
+Description: Ts'ün-Lao
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tsm
+Description: Turkish Sign Language
+Description: Türk İşaret Dili
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tsp
+Description: Northern Toussian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tsq
+Description: Thai Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tsr
+Description: Akei
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tss
+Description: Taiwan Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tst
+Description: Tondi Songway Kiini
+Added: 2011-08-16
+%%
+Type: language
+Subtag: tsu
+Description: Tsou
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tsv
+Description: Tsogo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tsw
+Description: Tsishingini
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tsx
+Description: Mubami
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tsy
+Description: Tebul Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tsz
+Description: Purepecha
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tta
+Description: Tutelo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ttb
+Description: Gaa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ttc
+Description: Tektiteko
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ttd
+Description: Tauade
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tte
+Description: Bwanabwana
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ttf
+Description: Tuotomb
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ttg
+Description: Tutong
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tth
+Description: Upper Ta'oih
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tti
+Description: Tobati
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ttj
+Description: Tooro
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ttk
+Description: Totoro
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ttl
+Description: Totela
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ttm
+Description: Northern Tutchone
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ttn
+Description: Towei
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tto
+Description: Lower Ta'oih
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ttp
+Description: Tombelala
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ttq
+Description: Tawallammat Tamajaq
+Added: 2009-07-29
+Macrolanguage: tmh
+%%
+Type: language
+Subtag: ttr
+Description: Tera
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tts
+Description: Northeastern Thai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ttt
+Description: Muslim Tat
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ttu
+Description: Torau
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ttv
+Description: Titan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ttw
+Description: Long Wat
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tty
+Description: Sikaritai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ttz
+Description: Tsum
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tua
+Description: Wiarumus
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tub
+Description: Tübatulabal
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tuc
+Description: Mutu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tud
+Description: Tuxá
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tue
+Description: Tuyuca
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tuf
+Description: Central Tunebo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tug
+Description: Tunia
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tuh
+Description: Taulil
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tui
+Description: Tupuri
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tuj
+Description: Tugutil
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tul
+Description: Tula
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tum
+Description: Tumbuka
+Added: 2005-10-16
+%%
+Type: language
+Subtag: tun
+Description: Tunica
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tuo
+Description: Tucano
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tup
+Description: Tupi languages
+Added: 2005-10-16
+Scope: collection
+%%
+Type: language
+Subtag: tuq
+Description: Tedaga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tus
+Description: Tuscarora
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tut
+Description: Altaic languages
+Added: 2005-10-16
+Scope: collection
+%%
+Type: language
+Subtag: tuu
+Description: Tututni
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tuv
+Description: Turkana
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tuw
+Description: Tungus languages
+Added: 2009-07-29
+Scope: collection
+%%
+Type: language
+Subtag: tux
+Description: Tuxináwa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tuy
+Description: Tugen
+Added: 2009-07-29
+Macrolanguage: kln
+%%
+Type: language
+Subtag: tuz
+Description: Turka
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tva
+Description: Vaghua
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tvd
+Description: Tsuvadi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tve
+Description: Te'un
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tvk
+Description: Southeast Ambrym
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tvl
+Description: Tuvalu
+Added: 2005-10-16
+Suppress-Script: Latn
+%%
+Type: language
+Subtag: tvm
+Description: Tela-Masbuar
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tvn
+Description: Tavoyan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tvo
+Description: Tidore
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tvs
+Description: Taveta
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tvt
+Description: Tutsa Naga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tvu
+Description: Tunen
+Added: 2012-08-12
+%%
+Type: language
+Subtag: tvw
+Description: Sedoa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tvy
+Description: Timor Pidgin
+Added: 2009-07-29
+%%
+Type: language
+Subtag: twa
+Description: Twana
+Added: 2009-07-29
+%%
+Type: language
+Subtag: twb
+Description: Western Tawbuid
+Added: 2009-07-29
+%%
+Type: language
+Subtag: twc
+Description: Teshenawa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: twd
+Description: Twents
+Added: 2009-07-29
+%%
+Type: language
+Subtag: twe
+Description: Tewa (Indonesia)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: twf
+Description: Northern Tiwa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: twg
+Description: Tereweng
+Added: 2009-07-29
+%%
+Type: language
+Subtag: twh
+Description: Tai Dón
+Added: 2009-07-29
+%%
+Type: language
+Subtag: twl
+Description: Tawara
+Added: 2009-07-29
+%%
+Type: language
+Subtag: twm
+Description: Tawang Monpa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: twn
+Description: Twendi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: two
+Description: Tswapong
+Added: 2009-07-29
+%%
+Type: language
+Subtag: twp
+Description: Ere
+Added: 2009-07-29
+%%
+Type: language
+Subtag: twq
+Description: Tasawaq
+Added: 2009-07-29
+%%
+Type: language
+Subtag: twr
+Description: Southwestern Tarahumara
+Added: 2009-07-29
+%%
+Type: language
+Subtag: twt
+Description: Turiwára
+Added: 2009-07-29
+%%
+Type: language
+Subtag: twu
+Description: Termanu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tww
+Description: Tuwari
+Added: 2009-07-29
+%%
+Type: language
+Subtag: twx
+Description: Tewe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: twy
+Description: Tawoyan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: txa
+Description: Tombonuo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: txb
+Description: Tokharian B
+Added: 2009-07-29
+%%
+Type: language
+Subtag: txc
+Description: Tsetsaut
+Added: 2009-07-29
+%%
+Type: language
+Subtag: txe
+Description: Totoli
+Added: 2009-07-29
+%%
+Type: language
+Subtag: txg
+Description: Tangut
+Added: 2009-07-29
+%%
+Type: language
+Subtag: txh
+Description: Thracian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: txi
+Description: Ikpeng
+Added: 2009-07-29
+%%
+Type: language
+Subtag: txm
+Description: Tomini
+Added: 2009-07-29
+%%
+Type: language
+Subtag: txn
+Description: West Tarangan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: txo
+Description: Toto
+Added: 2009-07-29
+%%
+Type: language
+Subtag: txq
+Description: Tii
+Added: 2009-07-29
+%%
+Type: language
+Subtag: txr
+Description: Tartessian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: txs
+Description: Tonsea
+Added: 2009-07-29
+%%
+Type: language
+Subtag: txt
+Description: Citak
+Added: 2009-07-29
+%%
+Type: language
+Subtag: txu
+Description: Kayapó
+Added: 2009-07-29
+%%
+Type: language
+Subtag: txx
+Description: Tatana
+Added: 2009-07-29
+%%
+Type: language
+Subtag: txy
+Description: Tanosy Malagasy
+Added: 2009-07-29
+Macrolanguage: mg
+%%
+Type: language
+Subtag: tya
+Description: Tauya
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tye
+Description: Kyenga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tyh
+Description: O'du
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tyi
+Description: Teke-Tsaayi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tyj
+Description: Tai Do
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tyl
+Description: Thu Lao
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tyn
+Description: Kombai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: typ
+Description: Thaypan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tyr
+Description: Tai Daeng
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tys
+Description: Tày Sa Pa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tyt
+Description: Tày Tac
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tyu
+Description: Kua
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tyv
+Description: Tuvinian
+Added: 2005-10-16
+%%
+Type: language
+Subtag: tyx
+Description: Teke-Tyee
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tyz
+Description: Tày
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tza
+Description: Tanzanian Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tzh
+Description: Tzeltal
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tzj
+Description: Tz'utujil
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tzm
+Description: Central Atlas Tamazight
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tzn
+Description: Tugun
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tzo
+Description: Tzotzil
+Added: 2009-07-29
+%%
+Type: language
+Subtag: tzx
+Description: Tabriak
+Added: 2009-07-29
+%%
+Type: language
+Subtag: uam
+Description: Uamué
+Added: 2009-07-29
+%%
+Type: language
+Subtag: uan
+Description: Kuan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: uar
+Description: Tairuma
+Added: 2009-07-29
+%%
+Type: language
+Subtag: uba
+Description: Ubang
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ubi
+Description: Ubi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ubl
+Description: Buhi'non Bikol
+Added: 2010-03-11
+Macrolanguage: bik
+%%
+Type: language
+Subtag: ubr
+Description: Ubir
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ubu
+Description: Umbu-Ungu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: uby
+Description: Ubykh
+Added: 2009-07-29
+%%
+Type: language
+Subtag: uda
+Description: Uda
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ude
+Description: Udihe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: udg
+Description: Muduga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: udi
+Description: Udi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: udj
+Description: Ujir
+Added: 2009-07-29
+%%
+Type: language
+Subtag: udl
+Description: Wuzlam
+Added: 2009-07-29
+%%
+Type: language
+Subtag: udm
+Description: Udmurt
+Added: 2005-10-16
+%%
+Type: language
+Subtag: udu
+Description: Uduk
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ues
+Description: Kioko
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ufi
+Description: Ufim
+Added: 2009-07-29
+%%
+Type: language
+Subtag: uga
+Description: Ugaritic
+Added: 2005-10-16
+%%
+Type: language
+Subtag: ugb
+Description: Kuku-Ugbanh
+Added: 2009-07-29
+%%
+Type: language
+Subtag: uge
+Description: Ughele
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ugn
+Description: Ugandan Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ugo
+Description: Ugong
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ugy
+Description: Uruguayan Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: uha
+Description: Uhami
+Added: 2009-07-29
+%%
+Type: language
+Subtag: uhn
+Description: Damal
+Added: 2009-07-29
+%%
+Type: language
+Subtag: uis
+Description: Uisai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: uiv
+Description: Iyive
+Added: 2009-07-29
+%%
+Type: language
+Subtag: uji
+Description: Tanjijili
+Added: 2009-07-29
+%%
+Type: language
+Subtag: uka
+Description: Kaburi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ukg
+Description: Ukuriguma
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ukh
+Description: Ukhwejo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ukl
+Description: Ukrainian Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ukp
+Description: Ukpe-Bayobiri
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ukq
+Description: Ukwa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: uks
+Description: Urubú-Kaapor Sign Language
+Description: Kaapor Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: uku
+Description: Ukue
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ukw
+Description: Ukwuani-Aboh-Ndoni
+Added: 2009-07-29
+%%
+Type: language
+Subtag: uky
+Description: Kuuk-Yak
+Added: 2012-08-12
+%%
+Type: language
+Subtag: ula
+Description: Fungwa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ulb
+Description: Ulukwumi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ulc
+Description: Ulch
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ulf
+Description: Usku
+Description: Afra
+Added: 2009-07-29
+%%
+Type: language
+Subtag: uli
+Description: Ulithian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ulk
+Description: Meriam
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ull
+Description: Ullatan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ulm
+Description: Ulumanda'
+Added: 2009-07-29
+%%
+Type: language
+Subtag: uln
+Description: Unserdeutsch
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ulu
+Description: Uma' Lung
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ulw
+Description: Ulwa
+Added: 2010-03-11
+%%
+Type: language
+Subtag: uma
+Description: Umatilla
+Added: 2009-07-29
+%%
+Type: language
+Subtag: umb
+Description: Umbundu
+Added: 2005-10-16
+%%
+Type: language
+Subtag: umc
+Description: Marrucinian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: umd
+Description: Umbindhamu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: umg
+Description: Umbuygamu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: umi
+Description: Ukit
+Added: 2009-07-29
+%%
+Type: language
+Subtag: umm
+Description: Umon
+Added: 2009-07-29
+%%
+Type: language
+Subtag: umn
+Description: Makyan Naga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: umo
+Description: Umotína
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ump
+Description: Umpila
+Added: 2009-07-29
+%%
+Type: language
+Subtag: umr
+Description: Umbugarla
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ums
+Description: Pendau
+Added: 2009-07-29
+%%
+Type: language
+Subtag: umu
+Description: Munsee
+Added: 2009-07-29
+Macrolanguage: del
+%%
+Type: language
+Subtag: una
+Description: North Watut
+Added: 2009-07-29
+%%
+Type: language
+Subtag: und
+Description: Undetermined
+Added: 2005-10-16
+Scope: special
+%%
+Type: language
+Subtag: une
+Description: Uneme
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ung
+Description: Ngarinyin
+Added: 2009-07-29
+%%
+Type: language
+Subtag: unk
+Description: Enawené-Nawé
+Added: 2009-07-29
+%%
+Type: language
+Subtag: unm
+Description: Unami
+Added: 2009-07-29
+Macrolanguage: del
+%%
+Type: language
+Subtag: unp
+Description: Worora
+Added: 2009-07-29
+Deprecated: 2012-08-12
+Comments: see wro, xgu
+%%
+Type: language
+Subtag: unr
+Description: Mundari
+Added: 2009-07-29
+%%
+Type: language
+Subtag: unx
+Description: Munda
+Added: 2009-07-29
+%%
+Type: language
+Subtag: unz
+Description: Unde Kaili
+Added: 2009-07-29
+%%
+Type: language
+Subtag: uok
+Description: Uokha
+Added: 2009-07-29
+%%
+Type: language
+Subtag: upi
+Description: Umeda
+Added: 2009-07-29
+%%
+Type: language
+Subtag: upv
+Description: Uripiv-Wala-Rano-Atchin
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ura
+Description: Urarina
+Added: 2009-07-29
+%%
+Type: language
+Subtag: urb
+Description: Urubú-Kaapor
+Description: Kaapor
+Added: 2009-07-29
+%%
+Type: language
+Subtag: urc
+Description: Urningangg
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ure
+Description: Uru
+Added: 2009-07-29
+%%
+Type: language
+Subtag: urf
+Description: Uradhi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: urg
+Description: Urigina
+Added: 2009-07-29
+%%
+Type: language
+Subtag: urh
+Description: Urhobo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: uri
+Description: Urim
+Added: 2009-07-29
+%%
+Type: language
+Subtag: urj
+Description: Uralic languages
+Added: 2009-07-29
+Scope: collection
+%%
+Type: language
+Subtag: urk
+Description: Urak Lawoi'
+Added: 2009-07-29
+Macrolanguage: ms
+%%
+Type: language
+Subtag: url
+Description: Urali
+Added: 2009-07-29
+%%
+Type: language
+Subtag: urm
+Description: Urapmin
+Added: 2009-07-29
+%%
+Type: language
+Subtag: urn
+Description: Uruangnirin
+Added: 2009-07-29
+%%
+Type: language
+Subtag: uro
+Description: Ura (Papua New Guinea)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: urp
+Description: Uru-Pa-In
+Added: 2009-07-29
+%%
+Type: language
+Subtag: urr
+Description: Lehalurup
+Description: Löyöp
+Added: 2009-07-29
+%%
+Type: language
+Subtag: urt
+Description: Urat
+Added: 2009-07-29
+%%
+Type: language
+Subtag: uru
+Description: Urumi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: urv
+Description: Uruava
+Added: 2009-07-29
+%%
+Type: language
+Subtag: urw
+Description: Sop
+Added: 2009-07-29
+%%
+Type: language
+Subtag: urx
+Description: Urimo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ury
+Description: Orya
+Added: 2009-07-29
+%%
+Type: language
+Subtag: urz
+Description: Uru-Eu-Wau-Wau
+Added: 2009-07-29
+%%
+Type: language
+Subtag: usa
+Description: Usarufa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ush
+Description: Ushojo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: usi
+Description: Usui
+Added: 2009-07-29
+%%
+Type: language
+Subtag: usk
+Description: Usaghade
+Added: 2009-07-29
+%%
+Type: language
+Subtag: usp
+Description: Uspanteco
+Added: 2009-07-29
+%%
+Type: language
+Subtag: usu
+Description: Uya
+Added: 2009-07-29
+%%
+Type: language
+Subtag: uta
+Description: Otank
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ute
+Description: Ute-Southern Paiute
+Added: 2009-07-29
+%%
+Type: language
+Subtag: utp
+Description: Amba (Solomon Islands)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: utr
+Description: Etulo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: utu
+Description: Utu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: uum
+Description: Urum
+Added: 2009-07-29
+%%
+Type: language
+Subtag: uun
+Description: Kulon-Pazeh
+Added: 2009-07-29
+%%
+Type: language
+Subtag: uur
+Description: Ura (Vanuatu)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: uuu
+Description: U
+Added: 2009-07-29
+%%
+Type: language
+Subtag: uve
+Description: West Uvean
+Added: 2009-07-29
+%%
+Type: language
+Subtag: uvh
+Description: Uri
+Added: 2009-07-29
+%%
+Type: language
+Subtag: uvl
+Description: Lote
+Added: 2009-07-29
+%%
+Type: language
+Subtag: uwa
+Description: Kuku-Uwanh
+Added: 2009-07-29
+%%
+Type: language
+Subtag: uya
+Description: Doko-Uyanga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: uzn
+Description: Northern Uzbek
+Added: 2009-07-29
+Macrolanguage: uz
+%%
+Type: language
+Subtag: uzs
+Description: Southern Uzbek
+Added: 2009-07-29
+Macrolanguage: uz
+%%
+Type: language
+Subtag: vaa
+Description: Vaagri Booli
+Added: 2009-07-29
+%%
+Type: language
+Subtag: vae
+Description: Vale
+Added: 2009-07-29
+%%
+Type: language
+Subtag: vaf
+Description: Vafsi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: vag
+Description: Vagla
+Added: 2009-07-29
+%%
+Type: language
+Subtag: vah
+Description: Varhadi-Nagpuri
+Added: 2009-07-29
+%%
+Type: language
+Subtag: vai
+Description: Vai
+Added: 2005-10-16
+%%
+Type: language
+Subtag: vaj
+Description: Vasekela Bushman
+Added: 2009-07-29
+%%
+Type: language
+Subtag: val
+Description: Vehes
+Added: 2009-07-29
+%%
+Type: language
+Subtag: vam
+Description: Vanimo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: van
+Description: Valman
+Added: 2009-07-29
+%%
+Type: language
+Subtag: vao
+Description: Vao
+Added: 2009-07-29
+%%
+Type: language
+Subtag: vap
+Description: Vaiphei
+Added: 2009-07-29
+%%
+Type: language
+Subtag: var
+Description: Huarijio
+Added: 2009-07-29
+%%
+Type: language
+Subtag: vas
+Description: Vasavi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: vau
+Description: Vanuma
+Added: 2009-07-29
+%%
+Type: language
+Subtag: vav
+Description: Varli
+Added: 2009-07-29
+%%
+Type: language
+Subtag: vay
+Description: Wayu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: vbb
+Description: Southeast Babar
+Added: 2009-07-29
+%%
+Type: language
+Subtag: vbk
+Description: Southwestern Bontok
+Added: 2010-03-11
+Macrolanguage: bnc
+%%
+Type: language
+Subtag: vec
+Description: Venetian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ved
+Description: Veddah
+Added: 2009-07-29
+%%
+Type: language
+Subtag: vel
+Description: Veluws
+Added: 2009-07-29
+%%
+Type: language
+Subtag: vem
+Description: Vemgo-Mabas
+Added: 2009-07-29
+%%
+Type: language
+Subtag: veo
+Description: Ventureño
+Added: 2009-07-29
+%%
+Type: language
+Subtag: vep
+Description: Veps
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ver
+Description: Mom Jango
+Added: 2009-07-29
+%%
+Type: language
+Subtag: vgr
+Description: Vaghri
+Added: 2009-07-29
+%%
+Type: language
+Subtag: vgt
+Description: Vlaamse Gebarentaal
+Description: Flemish Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: vic
+Description: Virgin Islands Creole English
+Added: 2009-07-29
+%%
+Type: language
+Subtag: vid
+Description: Vidunda
+Added: 2009-07-29
+%%
+Type: language
+Subtag: vif
+Description: Vili
+Added: 2009-07-29
+%%
+Type: language
+Subtag: vig
+Description: Viemo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: vil
+Description: Vilela
+Added: 2009-07-29
+%%
+Type: language
+Subtag: vin
+Description: Vinza
+Added: 2009-07-29
+%%
+Type: language
+Subtag: vis
+Description: Vishavan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: vit
+Description: Viti
+Added: 2009-07-29
+%%
+Type: language
+Subtag: viv
+Description: Iduna
+Added: 2009-07-29
+%%
+Type: language
+Subtag: vka
+Description: Kariyarra
+Added: 2009-07-29
+%%
+Type: language
+Subtag: vki
+Description: Ija-Zuba
+Added: 2009-07-29
+%%
+Type: language
+Subtag: vkj
+Description: Kujarge
+Added: 2009-07-29
+%%
+Type: language
+Subtag: vkk
+Description: Kaur
+Added: 2009-07-29
+Macrolanguage: ms
+%%
+Type: language
+Subtag: vkl
+Description: Kulisusu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: vkm
+Description: Kamakan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: vko
+Description: Kodeoha
+Added: 2009-07-29
+%%
+Type: language
+Subtag: vkp
+Description: Korlai Creole Portuguese
+Added: 2009-07-29
+%%
+Type: language
+Subtag: vkt
+Description: Tenggarong Kutai Malay
+Added: 2009-07-29
+Macrolanguage: ms
+%%
+Type: language
+Subtag: vku
+Description: Kurrama
+Added: 2009-07-29
+%%
+Type: language
+Subtag: vlp
+Description: Valpei
+Added: 2009-07-29
+%%
+Type: language
+Subtag: vls
+Description: Vlaams
+Added: 2009-07-29
+%%
+Type: language
+Subtag: vma
+Description: Martuyhunira
+Added: 2009-07-29
+%%
+Type: language
+Subtag: vmb
+Description: Mbabaram
+Added: 2009-07-29
+%%
+Type: language
+Subtag: vmc
+Description: Juxtlahuaca Mixtec
+Added: 2009-07-29
+%%
+Type: language
+Subtag: vmd
+Description: Mudu Koraga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: vme
+Description: East Masela
+Added: 2009-07-29
+%%
+Type: language
+Subtag: vmf
+Description: Mainfränkisch
+Added: 2009-07-29
+%%
+Type: language
+Subtag: vmg
+Description: Minigir
+Added: 2009-07-29
+%%
+Type: language
+Subtag: vmh
+Description: Maraghei
+Added: 2009-07-29
+%%
+Type: language
+Subtag: vmi
+Description: Miwa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: vmj
+Description: Ixtayutla Mixtec
+Added: 2009-07-29
+%%
+Type: language
+Subtag: vmk
+Description: Makhuwa-Shirima
+Added: 2009-07-29
+%%
+Type: language
+Subtag: vml
+Description: Malgana
+Added: 2009-07-29
+%%
+Type: language
+Subtag: vmm
+Description: Mitlatongo Mixtec
+Added: 2009-07-29
+%%
+Type: language
+Subtag: vmp
+Description: Soyaltepec Mazatec
+Added: 2009-07-29
+%%
+Type: language
+Subtag: vmq
+Description: Soyaltepec Mixtec
+Added: 2009-07-29
+%%
+Type: language
+Subtag: vmr
+Description: Marenje
+Added: 2009-07-29
+%%
+Type: language
+Subtag: vms
+Description: Moksela
+Added: 2009-07-29
+%%
+Type: language
+Subtag: vmu
+Description: Muluridyi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: vmv
+Description: Valley Maidu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: vmw
+Description: Makhuwa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: vmx
+Description: Tamazola Mixtec
+Added: 2009-07-29
+%%
+Type: language
+Subtag: vmy
+Description: Ayautla Mazatec
+Added: 2009-07-29
+%%
+Type: language
+Subtag: vmz
+Description: Mazatlán Mazatec
+Added: 2009-07-29
+%%
+Type: language
+Subtag: vnk
+Description: Vano
+Description: Lovono
+Added: 2009-07-29
+%%
+Type: language
+Subtag: vnm
+Description: Vinmavis
+Description: Neve'ei
+Added: 2009-07-29
+%%
+Type: language
+Subtag: vnp
+Description: Vunapu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: vor
+Description: Voro
+Added: 2009-07-29
+%%
+Type: language
+Subtag: vot
+Description: Votic
+Added: 2005-10-16
+%%
+Type: language
+Subtag: vra
+Description: Vera'a
+Added: 2009-07-29
+%%
+Type: language
+Subtag: vro
+Description: Võro
+Added: 2009-07-29
+Macrolanguage: et
+%%
+Type: language
+Subtag: vrs
+Description: Varisi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: vrt
+Description: Burmbar
+Description: Banam Bay
+Added: 2009-07-29
+%%
+Type: language
+Subtag: vsi
+Description: Moldova Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: vsl
+Description: Venezuelan Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: vsv
+Description: Valencian Sign Language
+Description: Llengua de signes valenciana
+Added: 2009-07-29
+%%
+Type: language
+Subtag: vto
+Description: Vitou
+Added: 2009-07-29
+%%
+Type: language
+Subtag: vum
+Description: Vumbu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: vun
+Description: Vunjo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: vut
+Description: Vute
+Added: 2009-07-29
+%%
+Type: language
+Subtag: vwa
+Description: Awa (China)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: waa
+Description: Walla Walla
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wab
+Description: Wab
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wac
+Description: Wasco-Wishram
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wad
+Description: Wandamen
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wae
+Description: Walser
+Added: 2009-07-29
+%%
+Type: language
+Subtag: waf
+Description: Wakoná
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wag
+Description: Wa'ema
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wah
+Description: Watubela
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wai
+Description: Wares
+Added: 2009-07-29
+%%
+Type: language
+Subtag: waj
+Description: Waffa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wak
+Description: Wakashan languages
+Added: 2005-10-16
+Scope: collection
+%%
+Type: language
+Subtag: wal
+Description: Wolaytta
+Description: Wolaitta
+Added: 2005-10-16
+%%
+Type: language
+Subtag: wam
+Description: Wampanoag
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wan
+Description: Wan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wao
+Description: Wappo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wap
+Description: Wapishana
+Added: 2009-07-29
+%%
+Type: language
+Subtag: waq
+Description: Wageman
+Added: 2009-07-29
+%%
+Type: language
+Subtag: war
+Description: Waray (Philippines)
+Added: 2005-10-16
+%%
+Type: language
+Subtag: was
+Description: Washo
+Added: 2005-10-16
+%%
+Type: language
+Subtag: wat
+Description: Kaninuwa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wau
+Description: Waurá
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wav
+Description: Waka
+Added: 2009-07-29
+%%
+Type: language
+Subtag: waw
+Description: Waiwai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wax
+Description: Watam
+Added: 2009-07-29
+%%
+Type: language
+Subtag: way
+Description: Wayana
+Added: 2009-07-29
+%%
+Type: language
+Subtag: waz
+Description: Wampur
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wba
+Description: Warao
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wbb
+Description: Wabo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wbe
+Description: Waritai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wbf
+Description: Wara
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wbh
+Description: Wanda
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wbi
+Description: Vwanji
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wbj
+Description: Alagwa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wbk
+Description: Waigali
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wbl
+Description: Wakhi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wbm
+Description: Wa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wbp
+Description: Warlpiri
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wbq
+Description: Waddar
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wbr
+Description: Wagdi
+Added: 2009-07-29
+Macrolanguage: raj
+%%
+Type: language
+Subtag: wbt
+Description: Wanman
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wbv
+Description: Wajarri
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wbw
+Description: Woi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wca
+Description: Yanomámi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wci
+Description: Waci Gbe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wdd
+Description: Wandji
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wdg
+Description: Wadaginam
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wdj
+Description: Wadjiginy
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wdu
+Description: Wadjigu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wea
+Description: Wewaw
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wec
+Description: Wè Western
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wed
+Description: Wedau
+Added: 2009-07-29
+%%
+Type: language
+Subtag: weh
+Description: Weh
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wei
+Description: Kiunum
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wem
+Description: Weme Gbe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wen
+Description: Sorbian languages
+Added: 2005-10-16
+Scope: collection
+%%
+Type: language
+Subtag: weo
+Description: Wemale
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wep
+Description: Westphalien
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wer
+Description: Weri
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wes
+Description: Cameroon Pidgin
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wet
+Description: Perai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: weu
+Description: Rawngtu Chin
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wew
+Description: Wejewa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wfg
+Description: Yafi
+Description: Zorop
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wga
+Description: Wagaya
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wgb
+Description: Wagawaga
+Added: 2010-03-11
+%%
+Type: language
+Subtag: wgg
+Description: Wangganguru
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wgi
+Description: Wahgi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wgo
+Description: Waigeo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wgu
+Description: Wirangu
+Added: 2012-08-12
+%%
+Type: language
+Subtag: wgw
+Description: Wagawaga
+Added: 2009-07-29
+Deprecated: 2010-03-11
+Comments: see wgb, ylb
+%%
+Type: language
+Subtag: wgy
+Description: Warrgamay
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wha
+Description: Manusela
+Added: 2009-07-29
+%%
+Type: language
+Subtag: whg
+Description: North Wahgi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: whk
+Description: Wahau Kenyah
+Added: 2009-07-29
+%%
+Type: language
+Subtag: whu
+Description: Wahau Kayan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wib
+Description: Southern Toussian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wic
+Description: Wichita
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wie
+Description: Wik-Epa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wif
+Description: Wik-Keyangan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wig
+Description: Wik-Ngathana
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wih
+Description: Wik-Me'anha
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wii
+Description: Minidien
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wij
+Description: Wik-Iiyanh
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wik
+Description: Wikalkan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wil
+Description: Wilawila
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wim
+Description: Wik-Mungkan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: win
+Description: Ho-Chunk
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wir
+Description: Wiraféd
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wit
+Description: Wintu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wiu
+Description: Wiru
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wiv
+Description: Vitu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wiw
+Description: Wirangu
+Added: 2009-07-29
+Deprecated: 2012-08-12
+Comments: see nwo, wgu
+%%
+Type: language
+Subtag: wiy
+Description: Wiyot
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wja
+Description: Waja
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wji
+Description: Warji
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wka
+Description: Kw'adza
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wkb
+Description: Kumbaran
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wkd
+Description: Wakde
+Description: Mo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wkl
+Description: Kalanadi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wku
+Description: Kunduvadi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wkw
+Description: Wakawaka
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wla
+Description: Walio
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wlc
+Description: Mwali Comorian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wle
+Description: Wolane
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wlg
+Description: Kunbarlang
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wli
+Description: Waioli
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wlk
+Description: Wailaki
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wll
+Description: Wali (Sudan)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wlm
+Description: Middle Welsh
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wlo
+Description: Wolio
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wlr
+Description: Wailapa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wls
+Description: Wallisian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wlu
+Description: Wuliwuli
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wlv
+Description: Wichí Lhamtés Vejoz
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wlw
+Description: Walak
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wlx
+Description: Wali (Ghana)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wly
+Description: Waling
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wma
+Description: Mawa (Nigeria)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wmb
+Description: Wambaya
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wmc
+Description: Wamas
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wmd
+Description: Mamaindé
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wme
+Description: Wambule
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wmh
+Description: Waima'a
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wmi
+Description: Wamin
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wmm
+Description: Maiwa (Indonesia)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wmn
+Description: Waamwang
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wmo
+Description: Wom (Papua New Guinea)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wms
+Description: Wambon
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wmt
+Description: Walmajarri
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wmw
+Description: Mwani
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wmx
+Description: Womo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wnb
+Description: Wanambre
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wnc
+Description: Wantoat
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wnd
+Description: Wandarang
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wne
+Description: Waneci
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wng
+Description: Wanggom
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wni
+Description: Ndzwani Comorian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wnk
+Description: Wanukaka
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wnm
+Description: Wanggamala
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wno
+Description: Wano
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wnp
+Description: Wanap
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wnu
+Description: Usan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wny
+Description: Wanyi
+Added: 2012-08-12
+%%
+Type: language
+Subtag: woa
+Description: Tyaraity
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wob
+Description: Wè Northern
+Added: 2009-07-29
+%%
+Type: language
+Subtag: woc
+Description: Wogeo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wod
+Description: Wolani
+Added: 2009-07-29
+%%
+Type: language
+Subtag: woe
+Description: Woleaian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wof
+Description: Gambian Wolof
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wog
+Description: Wogamusin
+Added: 2009-07-29
+%%
+Type: language
+Subtag: woi
+Description: Kamang
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wok
+Description: Longto
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wom
+Description: Wom (Nigeria)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: won
+Description: Wongo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: woo
+Description: Manombai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wor
+Description: Woria
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wos
+Description: Hanga Hundi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wow
+Description: Wawonii
+Added: 2009-07-29
+%%
+Type: language
+Subtag: woy
+Description: Weyto
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wpc
+Description: Maco
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wra
+Description: Warapu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wrb
+Description: Warluwara
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wrd
+Description: Warduji
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wrg
+Description: Warungu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wrh
+Description: Wiradhuri
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wri
+Description: Wariyangga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wrk
+Description: Garrwa
+Added: 2012-08-12
+%%
+Type: language
+Subtag: wrl
+Description: Warlmanpa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wrm
+Description: Warumungu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wrn
+Description: Warnang
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wro
+Description: Worrorra
+Added: 2012-08-12
+%%
+Type: language
+Subtag: wrp
+Description: Waropen
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wrr
+Description: Wardaman
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wrs
+Description: Waris
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wru
+Description: Waru
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wrv
+Description: Waruna
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wrw
+Description: Gugu Warra
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wrx
+Description: Wae Rana
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wry
+Description: Merwari
+Added: 2009-07-29
+Macrolanguage: mwr
+%%
+Type: language
+Subtag: wrz
+Description: Waray (Australia)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wsa
+Description: Warembori
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wsi
+Description: Wusi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wsk
+Description: Waskia
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wsr
+Description: Owenia
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wss
+Description: Wasa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wsu
+Description: Wasu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wsv
+Description: Wotapuri-Katarqalai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wtf
+Description: Watiwa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wti
+Description: Berta
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wtk
+Description: Watakataui
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wtm
+Description: Mewati
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wtw
+Description: Wotu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wua
+Description: Wikngenchera
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wub
+Description: Wunambal
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wud
+Description: Wudu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wuh
+Description: Wutunhua
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wul
+Description: Silimo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wum
+Description: Wumbvu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wun
+Description: Bungu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wur
+Description: Wurrugu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wut
+Description: Wutung
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wuu
+Description: Wu Chinese
+Added: 2009-07-29
+Macrolanguage: zh
+%%
+Type: language
+Subtag: wuv
+Description: Wuvulu-Aua
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wux
+Description: Wulna
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wuy
+Description: Wauyai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wwa
+Description: Waama
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wwb
+Description: Wakabunga
+Added: 2012-08-12
+%%
+Type: language
+Subtag: wwo
+Description: Wetamut
+Description: Dorig
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wwr
+Description: Warrwa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: www
+Description: Wawa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wxa
+Description: Waxianghua
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wya
+Description: Wyandot
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wyb
+Description: Wangaaybuwan-Ngiyambaa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wym
+Description: Wymysorys
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wyr
+Description: Wayoró
+Added: 2009-07-29
+%%
+Type: language
+Subtag: wyy
+Description: Western Fijian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xaa
+Description: Andalusian Arabic
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xab
+Description: Sambe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xac
+Description: Kachari
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xad
+Description: Adai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xae
+Description: Aequian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xag
+Description: Aghwan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xai
+Description: Kaimbé
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xal
+Description: Kalmyk
+Description: Oirat
+Added: 2005-10-16
+%%
+Type: language
+Subtag: xam
+Description: /Xam
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xan
+Description: Xamtanga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xao
+Description: Khao
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xap
+Description: Apalachee
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xaq
+Description: Aquitanian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xar
+Description: Karami
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xas
+Description: Kamas
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xat
+Description: Katawixi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xau
+Description: Kauwera
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xav
+Description: Xavánte
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xaw
+Description: Kawaiisu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xay
+Description: Kayan Mahakam
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xba
+Description: Kamba (Brazil)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xbb
+Description: Lower Burdekin
+Added: 2010-03-11
+%%
+Type: language
+Subtag: xbc
+Description: Bactrian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xbi
+Description: Kombio
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xbm
+Description: Middle Breton
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xbn
+Description: Kenaboi
+Added: 2010-03-11
+%%
+Type: language
+Subtag: xbo
+Description: Bolgarian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xbr
+Description: Kambera
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xbw
+Description: Kambiwá
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xbx
+Description: Kabixí
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xcb
+Description: Cumbric
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xcc
+Description: Camunic
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xce
+Description: Celtiberian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xcg
+Description: Cisalpine Gaulish
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xch
+Description: Chemakum
+Description: Chimakum
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xcl
+Description: Classical Armenian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xcm
+Description: Comecrudo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xcn
+Description: Cotoname
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xco
+Description: Chorasmian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xcr
+Description: Carian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xct
+Description: Classical Tibetan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xcu
+Description: Curonian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xcv
+Description: Chuvantsy
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xcw
+Description: Coahuilteco
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xcy
+Description: Cayuse
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xdc
+Description: Dacian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xdm
+Description: Edomite
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xdy
+Description: Malayic Dayak
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xeb
+Description: Eblan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xed
+Description: Hdi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xeg
+Description: //Xegwi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xel
+Description: Kelo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xem
+Description: Kembayan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xep
+Description: Epi-Olmec
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xer
+Description: Xerénte
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xes
+Description: Kesawai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xet
+Description: Xetá
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xeu
+Description: Keoru-Ahia
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xfa
+Description: Faliscan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xga
+Description: Galatian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xgb
+Description: Gbin
+Added: 2012-08-12
+%%
+Type: language
+Subtag: xgf
+Description: Gabrielino-Fernandeño
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xgl
+Description: Galindan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xgn
+Description: Mongolian languages
+Added: 2009-07-29
+Scope: collection
+%%
+Type: language
+Subtag: xgr
+Description: Garza
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xgu
+Description: Unggumi
+Added: 2012-08-12
+%%
+Type: language
+Subtag: xha
+Description: Harami
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xhc
+Description: Hunnic
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xhd
+Description: Hadrami
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xhe
+Description: Khetrani
+Added: 2009-07-29
+Macrolanguage: lah
+%%
+Type: language
+Subtag: xhr
+Description: Hernican
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xht
+Description: Hattic
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xhu
+Description: Hurrian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xhv
+Description: Khua
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xia
+Description: Xiandao
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xib
+Description: Iberian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xii
+Description: Xiri
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xil
+Description: Illyrian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xin
+Description: Xinca
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xip
+Description: Xipináwa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xir
+Description: Xiriâna
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xiv
+Description: Indus Valley Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xiy
+Description: Xipaya
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xka
+Description: Kalkoti
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xkb
+Description: Northern Nago
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xkc
+Description: Kho'ini
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xkd
+Description: Mendalam Kayan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xke
+Description: Kereho
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xkf
+Description: Khengkha
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xkg
+Description: Kagoro
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xkh
+Description: Karahawyana
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xki
+Description: Kenyan Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xkj
+Description: Kajali
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xkk
+Description: Kaco'
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xkl
+Description: Mainstream Kenyah
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xkn
+Description: Kayan River Kayan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xko
+Description: Kiorr
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xkp
+Description: Kabatei
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xkq
+Description: Koroni
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xkr
+Description: Xakriabá
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xks
+Description: Kumbewaha
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xkt
+Description: Kantosi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xku
+Description: Kaamba
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xkv
+Description: Kgalagadi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xkw
+Description: Kembra
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xkx
+Description: Karore
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xky
+Description: Uma' Lasan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xkz
+Description: Kurtokha
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xla
+Description: Kamula
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xlb
+Description: Loup B
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xlc
+Description: Lycian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xld
+Description: Lydian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xle
+Description: Lemnian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xlg
+Description: Ligurian (Ancient)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xli
+Description: Liburnian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xln
+Description: Alanic
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xlo
+Description: Loup A
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xlp
+Description: Lepontic
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xls
+Description: Lusitanian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xlu
+Description: Cuneiform Luwian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xly
+Description: Elymian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xma
+Description: Mushungulu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xmb
+Description: Mbonga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xmc
+Description: Makhuwa-Marrevone
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xmd
+Description: Mbudum
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xme
+Description: Median
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xmf
+Description: Mingrelian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xmg
+Description: Mengaka
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xmh
+Description: Kuku-Muminh
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xmj
+Description: Majera
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xmk
+Description: Ancient Macedonian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xml
+Description: Malaysian Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xmm
+Description: Manado Malay
+Added: 2009-07-29
+Macrolanguage: ms
+%%
+Type: language
+Subtag: xmn
+Description: Manichaean Middle Persian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xmo
+Description: Morerebi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xmp
+Description: Kuku-Mu'inh
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xmq
+Description: Kuku-Mangk
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xmr
+Description: Meroitic
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xms
+Description: Moroccan Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xmt
+Description: Matbat
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xmu
+Description: Kamu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xmv
+Description: Antankarana Malagasy
+Description: Tankarana Malagasy
+Added: 2009-07-29
+Macrolanguage: mg
+%%
+Type: language
+Subtag: xmw
+Description: Tsimihety Malagasy
+Added: 2009-07-29
+Macrolanguage: mg
+%%
+Type: language
+Subtag: xmx
+Description: Maden
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xmy
+Description: Mayaguduna
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xmz
+Description: Mori Bawah
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xna
+Description: Ancient North Arabian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xnb
+Description: Kanakanabu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xnd
+Description: Na-Dene languages
+Added: 2009-07-29
+Scope: collection
+%%
+Type: language
+Subtag: xng
+Description: Middle Mongolian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xnh
+Description: Kuanhua
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xnn
+Description: Northern Kankanay
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xno
+Description: Anglo-Norman
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xnr
+Description: Kangri
+Added: 2009-07-29
+Macrolanguage: doi
+%%
+Type: language
+Subtag: xns
+Description: Kanashi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xnt
+Description: Narragansett
+Added: 2010-03-11
+%%
+Type: language
+Subtag: xnz
+Description: Kenzi
+Description: Mattoki
+Added: 2012-08-12
+%%
+Type: language
+Subtag: xoc
+Description: O'chi'chi'
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xod
+Description: Kokoda
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xog
+Description: Soga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xoi
+Description: Kominimung
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xok
+Description: Xokleng
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xom
+Description: Komo (Sudan)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xon
+Description: Konkomba
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xoo
+Description: Xukurú
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xop
+Description: Kopar
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xor
+Description: Korubo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xow
+Description: Kowaki
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xpc
+Description: Pecheneg
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xpe
+Description: Liberia Kpelle
+Added: 2009-07-29
+Macrolanguage: kpe
+%%
+Type: language
+Subtag: xpg
+Description: Phrygian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xpi
+Description: Pictish
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xpj
+Description: Mpalitjanh
+Added: 2012-08-12
+%%
+Type: language
+Subtag: xpk
+Description: Kulina Pano
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xpm
+Description: Pumpokol
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xpn
+Description: Kapinawá
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xpo
+Description: Pochutec
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xpp
+Description: Puyo-Paekche
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xpq
+Description: Mohegan-Pequot
+Added: 2010-03-11
+%%
+Type: language
+Subtag: xpr
+Description: Parthian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xps
+Description: Pisidian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xpu
+Description: Punic
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xpy
+Description: Puyo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xqa
+Description: Karakhanid
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xqt
+Description: Qatabanian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xra
+Description: Krahô
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xrb
+Description: Eastern Karaboro
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xre
+Description: Kreye
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xri
+Description: Krikati-Timbira
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xrm
+Description: Armazic
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xrn
+Description: Arin
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xrr
+Description: Raetic
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xrt
+Description: Aranama-Tamique
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xru
+Description: Marriammu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xrw
+Description: Karawa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xsa
+Description: Sabaean
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xsb
+Description: Sambal
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xsc
+Description: Scythian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xsd
+Description: Sidetic
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xse
+Description: Sempan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xsh
+Description: Shamang
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xsi
+Description: Sio
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xsj
+Description: Subi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xsl
+Description: South Slavey
+Added: 2009-07-29
+Macrolanguage: den
+%%
+Type: language
+Subtag: xsm
+Description: Kasem
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xsn
+Description: Sanga (Nigeria)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xso
+Description: Solano
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xsp
+Description: Silopi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xsq
+Description: Makhuwa-Saka
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xsr
+Description: Sherpa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xss
+Description: Assan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xsu
+Description: Sanumá
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xsv
+Description: Sudovian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xsy
+Description: Saisiyat
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xta
+Description: Alcozauca Mixtec
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xtb
+Description: Chazumba Mixtec
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xtc
+Description: Katcha-Kadugli-Miri
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xtd
+Description: Diuxi-Tilantongo Mixtec
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xte
+Description: Ketengban
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xtg
+Description: Transalpine Gaulish
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xti
+Description: Sinicahua Mixtec
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xtj
+Description: San Juan Teita Mixtec
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xtl
+Description: Tijaltepec Mixtec
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xtm
+Description: Magdalena Peñasco Mixtec
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xtn
+Description: Northern Tlaxiaco Mixtec
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xto
+Description: Tokharian A
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xtp
+Description: San Miguel Piedras Mixtec
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xtq
+Description: Tumshuqese
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xtr
+Description: Early Tripuri
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xts
+Description: Sindihui Mixtec
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xtt
+Description: Tacahua Mixtec
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xtu
+Description: Cuyamecalco Mixtec
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xtw
+Description: Tawandê
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xty
+Description: Yoloxochitl Mixtec
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xtz
+Description: Tasmanian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xua
+Description: Alu Kurumba
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xub
+Description: Betta Kurumba
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xud
+Description: Umiida
+Added: 2012-08-12
+%%
+Type: language
+Subtag: xug
+Description: Kunigami
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xuj
+Description: Jennu Kurumba
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xum
+Description: Umbrian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xun
+Description: Unggarranggu
+Added: 2012-08-12
+%%
+Type: language
+Subtag: xuo
+Description: Kuo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xup
+Description: Upper Umpqua
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xur
+Description: Urartian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xut
+Description: Kuthant
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xuu
+Description: Kxoe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xve
+Description: Venetic
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xvi
+Description: Kamviri
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xvn
+Description: Vandalic
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xvo
+Description: Volscian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xvs
+Description: Vestinian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xwa
+Description: Kwaza
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xwc
+Description: Woccon
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xwe
+Description: Xwela Gbe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xwg
+Description: Kwegu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xwl
+Description: Western Xwla Gbe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xwo
+Description: Written Oirat
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xwr
+Description: Kwerba Mamberamo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xxb
+Description: Boro (Ghana)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xxk
+Description: Ke'o
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xxr
+Description: Koropó
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xxt
+Description: Tambora
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xyl
+Description: Yalakalore
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xyy
+Description: Yorta Yorta
+Added: 2012-08-12
+%%
+Type: language
+Subtag: xzh
+Description: Zhang-Zhung
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xzm
+Description: Zemgalian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: xzp
+Description: Ancient Zapotec
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yaa
+Description: Yaminahua
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yab
+Description: Yuhup
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yac
+Description: Pass Valley Yali
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yad
+Description: Yagua
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yae
+Description: Pumé
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yaf
+Description: Yaka (Democratic Republic of Congo)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yag
+Description: Yámana
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yah
+Description: Yazgulyam
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yai
+Description: Yagnobi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yaj
+Description: Banda-Yangere
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yak
+Description: Yakama
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yal
+Description: Yalunka
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yam
+Description: Yamba
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yan
+Description: Mayangna
+Added: 2010-03-11
+%%
+Type: language
+Subtag: yao
+Description: Yao
+Added: 2005-10-16
+%%
+Type: language
+Subtag: yap
+Description: Yapese
+Added: 2005-10-16
+%%
+Type: language
+Subtag: yaq
+Description: Yaqui
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yar
+Description: Yabarana
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yas
+Description: Nugunu (Cameroon)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yat
+Description: Yambeta
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yau
+Description: Yuwana
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yav
+Description: Yangben
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yaw
+Description: Yawalapití
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yax
+Description: Yauma
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yay
+Description: Agwagwune
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yaz
+Description: Lokaa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yba
+Description: Yala
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ybb
+Description: Yemba
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ybd
+Description: Yangbye
+Added: 2009-07-29
+Deprecated: 2012-08-12
+Preferred-Value: rki
+%%
+Type: language
+Subtag: ybe
+Description: West Yugur
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ybh
+Description: Yakha
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ybi
+Description: Yamphu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ybj
+Description: Hasha
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ybk
+Description: Bokha
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ybl
+Description: Yukuben
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ybm
+Description: Yaben
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ybn
+Description: Yabaâna
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ybo
+Description: Yabong
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ybx
+Description: Yawiyo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yby
+Description: Yaweyuha
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ych
+Description: Chesu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ycl
+Description: Lolopo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ycn
+Description: Yucuna
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ycp
+Description: Chepya
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ydd
+Description: Eastern Yiddish
+Added: 2009-07-29
+Macrolanguage: yi
+%%
+Type: language
+Subtag: yde
+Description: Yangum Dey
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ydg
+Description: Yidgha
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ydk
+Description: Yoidik
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yds
+Description: Yiddish Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yea
+Description: Ravula
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yec
+Description: Yeniche
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yee
+Description: Yimas
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yei
+Description: Yeni
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yej
+Description: Yevanic
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yel
+Description: Yela
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yen
+Description: Yendang
+Added: 2009-07-29
+Deprecated: 2012-08-12
+Comments: see ynq, yot
+%%
+Type: language
+Subtag: yer
+Description: Tarok
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yes
+Description: Nyankpa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yet
+Description: Yetfa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yeu
+Description: Yerukula
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yev
+Description: Yapunda
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yey
+Description: Yeyi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yga
+Description: Malyangapa
+Added: 2012-08-12
+%%
+Type: language
+Subtag: ygl
+Description: Yangum Gel
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ygm
+Description: Yagomi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ygp
+Description: Gepo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ygr
+Description: Yagaria
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ygw
+Description: Yagwoia
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yha
+Description: Baha Buyang
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yhd
+Description: Judeo-Iraqi Arabic
+Added: 2009-07-29
+Macrolanguage: jrb
+%%
+Type: language
+Subtag: yhl
+Description: Hlepho Phowa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yia
+Description: Yinggarda
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yif
+Description: Ache
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yig
+Description: Wusa Nasu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yih
+Description: Western Yiddish
+Added: 2009-07-29
+Macrolanguage: yi
+%%
+Type: language
+Subtag: yii
+Description: Yidiny
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yij
+Description: Yindjibarndi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yik
+Description: Dongshanba Lalo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yil
+Description: Yindjilandji
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yim
+Description: Yimchungru Naga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yin
+Description: Yinchia
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yip
+Description: Pholo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yiq
+Description: Miqie
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yir
+Description: North Awyu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yis
+Description: Yis
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yit
+Description: Eastern Lalu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yiu
+Description: Awu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yiv
+Description: Northern Nisu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yix
+Description: Axi Yi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yiy
+Description: Yir Yoront
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yiz
+Description: Azhe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yka
+Description: Yakan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ykg
+Description: Northern Yukaghir
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yki
+Description: Yoke
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ykk
+Description: Yakaikeke
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ykl
+Description: Khlula
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ykm
+Description: Kap
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ykn
+Description: Kua-nsi
+Added: 2012-08-12
+%%
+Type: language
+Subtag: yko
+Description: Yasa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ykr
+Description: Yekora
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ykt
+Description: Kathu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yku
+Description: Kuamasi
+Added: 2012-08-12
+%%
+Type: language
+Subtag: yky
+Description: Yakoma
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yla
+Description: Yaul
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ylb
+Description: Yaleba
+Added: 2010-03-11
+%%
+Type: language
+Subtag: yle
+Description: Yele
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ylg
+Description: Yelogu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yli
+Description: Angguruk Yali
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yll
+Description: Yil
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ylm
+Description: Limi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yln
+Description: Langnian Buyang
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ylo
+Description: Naluo Yi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ylr
+Description: Yalarnnga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ylu
+Description: Aribwaung
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yly
+Description: Nyâlayu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yma
+Description: Yamphe
+Added: 2009-07-29
+Deprecated: 2012-08-12
+Preferred-Value: lrr
+%%
+Type: language
+Subtag: ymb
+Description: Yambes
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ymc
+Description: Southern Muji
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ymd
+Description: Muda
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yme
+Description: Yameo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ymg
+Description: Yamongeri
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ymh
+Description: Mili
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ymi
+Description: Moji
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ymk
+Description: Makwe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yml
+Description: Iamalele
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ymm
+Description: Maay
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ymn
+Description: Yamna
+Description: Sunum
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ymo
+Description: Yangum Mon
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ymp
+Description: Yamap
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ymq
+Description: Qila Muji
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ymr
+Description: Malasar
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yms
+Description: Mysian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ymt
+Description: Mator-Taygi-Karagas
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ymx
+Description: Northern Muji
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ymz
+Description: Muzi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yna
+Description: Aluo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ynd
+Description: Yandruwandha
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yne
+Description: Lang'e
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yng
+Description: Yango
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ynh
+Description: Yangho
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ynk
+Description: Naukan Yupik
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ynl
+Description: Yangulam
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ynn
+Description: Yana
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yno
+Description: Yong
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ynq
+Description: Yendang
+Added: 2012-08-12
+%%
+Type: language
+Subtag: yns
+Description: Yansi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ynu
+Description: Yahuna
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yob
+Description: Yoba
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yog
+Description: Yogad
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yoi
+Description: Yonaguni
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yok
+Description: Yokuts
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yol
+Description: Yola
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yom
+Description: Yombe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yon
+Description: Yongkom
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yos
+Description: Yos
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yot
+Description: Yotti
+Added: 2012-08-12
+%%
+Type: language
+Subtag: yox
+Description: Yoron
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yoy
+Description: Yoy
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ypa
+Description: Phala
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ypb
+Description: Labo Phowa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ypg
+Description: Phola
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yph
+Description: Phupha
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ypk
+Description: Yupik languages
+Added: 2005-10-16
+Scope: collection
+%%
+Type: language
+Subtag: ypm
+Description: Phuma
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ypn
+Description: Ani Phowa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ypo
+Description: Alo Phola
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ypp
+Description: Phupa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ypz
+Description: Phuza
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yra
+Description: Yerakai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yrb
+Description: Yareba
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yre
+Description: Yaouré
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yri
+Description: Yarí
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yrk
+Description: Nenets
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yrl
+Description: Nhengatu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yrn
+Description: Yerong
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yrs
+Description: Yarsun
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yrw
+Description: Yarawata
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ysc
+Description: Yassic
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ysd
+Description: Samatao
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ysg
+Description: Sonaga
+Added: 2012-08-12
+%%
+Type: language
+Subtag: ysl
+Description: Yugoslavian Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ysn
+Description: Sani
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yso
+Description: Nisi (China)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ysp
+Description: Southern Lolopo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ysr
+Description: Sirenik Yupik
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yss
+Description: Yessan-Mayo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ysy
+Description: Sanie
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yta
+Description: Talu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ytl
+Description: Tanglang
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ytp
+Description: Thopho
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ytw
+Description: Yout Wam
+Added: 2010-03-11
+%%
+Type: language
+Subtag: yua
+Description: Yucateco
+Description: Yucatec Maya
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yub
+Description: Yugambal
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yuc
+Description: Yuchi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yud
+Description: Judeo-Tripolitanian Arabic
+Added: 2009-07-29
+Macrolanguage: jrb
+%%
+Type: language
+Subtag: yue
+Description: Yue Chinese
+Added: 2009-07-29
+Macrolanguage: zh
+%%
+Type: language
+Subtag: yuf
+Description: Havasupai-Walapai-Yavapai
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yug
+Description: Yug
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yui
+Description: Yurutí
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yuj
+Description: Karkar-Yuri
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yuk
+Description: Yuki
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yul
+Description: Yulu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yum
+Description: Quechan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yun
+Description: Bena (Nigeria)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yup
+Description: Yukpa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yuq
+Description: Yuqui
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yur
+Description: Yurok
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yut
+Description: Yopno
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yuu
+Description: Yugh
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yuw
+Description: Yau (Morobe Province)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yux
+Description: Southern Yukaghir
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yuy
+Description: East Yugur
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yuz
+Description: Yuracare
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yva
+Description: Yawa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yvt
+Description: Yavitero
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ywa
+Description: Kalou
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ywl
+Description: Western Lalu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ywn
+Description: Yawanawa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ywq
+Description: Wuding-Luquan Yi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ywr
+Description: Yawuru
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ywt
+Description: Xishanba Lalo
+Description: Central Lalo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ywu
+Description: Wumeng Nasu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yww
+Description: Yawarawarga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yxg
+Description: Yagara
+Added: 2012-08-12
+%%
+Type: language
+Subtag: yxy
+Description: Yabula Yabula
+Added: 2012-08-12
+%%
+Type: language
+Subtag: yyu
+Description: Yau (Sandaun Province)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yyz
+Description: Ayizi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yzg
+Description: E'ma Buyang
+Added: 2009-07-29
+%%
+Type: language
+Subtag: yzk
+Description: Zokhuo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: zaa
+Description: Sierra de Juárez Zapotec
+Added: 2009-07-29
+Macrolanguage: zap
+%%
+Type: language
+Subtag: zab
+Description: San Juan Guelavía Zapotec
+Added: 2009-07-29
+Macrolanguage: zap
+%%
+Type: language
+Subtag: zac
+Description: Ocotlán Zapotec
+Added: 2009-07-29
+Macrolanguage: zap
+%%
+Type: language
+Subtag: zad
+Description: Cajonos Zapotec
+Added: 2009-07-29
+Macrolanguage: zap
+%%
+Type: language
+Subtag: zae
+Description: Yareni Zapotec
+Added: 2009-07-29
+Macrolanguage: zap
+%%
+Type: language
+Subtag: zaf
+Description: Ayoquesco Zapotec
+Added: 2009-07-29
+Macrolanguage: zap
+%%
+Type: language
+Subtag: zag
+Description: Zaghawa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: zah
+Description: Zangwal
+Added: 2009-07-29
+%%
+Type: language
+Subtag: zai
+Description: Isthmus Zapotec
+Added: 2009-07-29
+Macrolanguage: zap
+%%
+Type: language
+Subtag: zaj
+Description: Zaramo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: zak
+Description: Zanaki
+Added: 2009-07-29
+%%
+Type: language
+Subtag: zal
+Description: Zauzou
+Added: 2009-07-29
+%%
+Type: language
+Subtag: zam
+Description: Miahuatlán Zapotec
+Added: 2009-07-29
+Macrolanguage: zap
+%%
+Type: language
+Subtag: zao
+Description: Ozolotepec Zapotec
+Added: 2009-07-29
+Macrolanguage: zap
+%%
+Type: language
+Subtag: zap
+Description: Zapotec
+Added: 2005-10-16
+Scope: macrolanguage
+%%
+Type: language
+Subtag: zaq
+Description: Aloápam Zapotec
+Added: 2009-07-29
+Macrolanguage: zap
+%%
+Type: language
+Subtag: zar
+Description: Rincón Zapotec
+Added: 2009-07-29
+Macrolanguage: zap
+%%
+Type: language
+Subtag: zas
+Description: Santo Domingo Albarradas Zapotec
+Added: 2009-07-29
+Macrolanguage: zap
+%%
+Type: language
+Subtag: zat
+Description: Tabaa Zapotec
+Added: 2009-07-29
+Macrolanguage: zap
+%%
+Type: language
+Subtag: zau
+Description: Zangskari
+Added: 2009-07-29
+%%
+Type: language
+Subtag: zav
+Description: Yatzachi Zapotec
+Added: 2009-07-29
+Macrolanguage: zap
+%%
+Type: language
+Subtag: zaw
+Description: Mitla Zapotec
+Added: 2009-07-29
+Macrolanguage: zap
+%%
+Type: language
+Subtag: zax
+Description: Xadani Zapotec
+Added: 2009-07-29
+Macrolanguage: zap
+%%
+Type: language
+Subtag: zay
+Description: Zayse-Zergulla
+Description: Zaysete
+Added: 2009-07-29
+%%
+Type: language
+Subtag: zaz
+Description: Zari
+Added: 2009-07-29
+%%
+Type: language
+Subtag: zbc
+Description: Central Berawan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: zbe
+Description: East Berawan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: zbl
+Description: Blissymbols
+Description: Bliss
+Description: Blissymbolics
+Added: 2007-08-21
+Suppress-Script: Blis
+%%
+Type: language
+Subtag: zbt
+Description: Batui
+Added: 2009-07-29
+%%
+Type: language
+Subtag: zbw
+Description: West Berawan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: zca
+Description: Coatecas Altas Zapotec
+Added: 2009-07-29
+Macrolanguage: zap
+%%
+Type: language
+Subtag: zch
+Description: Central Hongshuihe Zhuang
+Added: 2009-07-29
+Macrolanguage: za
+%%
+Type: language
+Subtag: zdj
+Description: Ngazidja Comorian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: zea
+Description: Zeeuws
+Added: 2009-07-29
+%%
+Type: language
+Subtag: zeg
+Description: Zenag
+Added: 2009-07-29
+%%
+Type: language
+Subtag: zeh
+Description: Eastern Hongshuihe Zhuang
+Added: 2009-07-29
+Macrolanguage: za
+%%
+Type: language
+Subtag: zen
+Description: Zenaga
+Added: 2005-10-16
+%%
+Type: language
+Subtag: zga
+Description: Kinga
+Added: 2009-07-29
+%%
+Type: language
+Subtag: zgb
+Description: Guibei Zhuang
+Added: 2009-07-29
+Macrolanguage: za
+%%
+Type: language
+Subtag: zgm
+Description: Minz Zhuang
+Added: 2009-07-29
+Macrolanguage: za
+%%
+Type: language
+Subtag: zgn
+Description: Guibian Zhuang
+Added: 2009-07-29
+Macrolanguage: za
+%%
+Type: language
+Subtag: zgr
+Description: Magori
+Added: 2009-07-29
+%%
+Type: language
+Subtag: zhb
+Description: Zhaba
+Added: 2009-07-29
+%%
+Type: language
+Subtag: zhd
+Description: Dai Zhuang
+Added: 2009-07-29
+Macrolanguage: za
+%%
+Type: language
+Subtag: zhi
+Description: Zhire
+Added: 2009-07-29
+%%
+Type: language
+Subtag: zhn
+Description: Nong Zhuang
+Added: 2009-07-29
+Macrolanguage: za
+%%
+Type: language
+Subtag: zhw
+Description: Zhoa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: zhx
+Description: Chinese (family)
+Added: 2009-07-29
+Scope: collection
+%%
+Type: language
+Subtag: zia
+Description: Zia
+Added: 2009-07-29
+%%
+Type: language
+Subtag: zib
+Description: Zimbabwe Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: zik
+Description: Zimakani
+Added: 2009-07-29
+%%
+Type: language
+Subtag: zil
+Description: Zialo
+Added: 2011-08-16
+%%
+Type: language
+Subtag: zim
+Description: Mesme
+Added: 2009-07-29
+%%
+Type: language
+Subtag: zin
+Description: Zinza
+Added: 2009-07-29
+%%
+Type: language
+Subtag: zir
+Description: Ziriya
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ziw
+Description: Zigula
+Added: 2009-07-29
+%%
+Type: language
+Subtag: ziz
+Description: Zizilivakan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: zka
+Description: Kaimbulawa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: zkb
+Description: Koibal
+Added: 2009-07-29
+%%
+Type: language
+Subtag: zkd
+Description: Kadu
+Added: 2012-08-12
+%%
+Type: language
+Subtag: zkg
+Description: Koguryo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: zkh
+Description: Khorezmian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: zkk
+Description: Karankawa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: zkn
+Description: Kanan
+Added: 2012-08-12
+%%
+Type: language
+Subtag: zko
+Description: Kott
+Added: 2009-07-29
+%%
+Type: language
+Subtag: zkp
+Description: São Paulo Kaingáng
+Added: 2009-07-29
+%%
+Type: language
+Subtag: zkr
+Description: Zakhring
+Added: 2009-07-29
+%%
+Type: language
+Subtag: zkt
+Description: Kitan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: zku
+Description: Kaurna
+Added: 2009-07-29
+%%
+Type: language
+Subtag: zkv
+Description: Krevinian
+Added: 2009-07-29
+%%
+Type: language
+Subtag: zkz
+Description: Khazar
+Added: 2009-07-29
+%%
+Type: language
+Subtag: zle
+Description: East Slavic languages
+Added: 2009-07-29
+Scope: collection
+%%
+Type: language
+Subtag: zlj
+Description: Liujiang Zhuang
+Added: 2009-07-29
+Macrolanguage: za
+%%
+Type: language
+Subtag: zlm
+Description: Malay (individual language)
+Added: 2009-07-29
+Macrolanguage: ms
+%%
+Type: language
+Subtag: zln
+Description: Lianshan Zhuang
+Added: 2009-07-29
+Macrolanguage: za
+%%
+Type: language
+Subtag: zlq
+Description: Liuqian Zhuang
+Added: 2009-07-29
+Macrolanguage: za
+%%
+Type: language
+Subtag: zls
+Description: South Slavic languages
+Added: 2009-07-29
+Scope: collection
+%%
+Type: language
+Subtag: zlw
+Description: West Slavic languages
+Added: 2009-07-29
+Scope: collection
+%%
+Type: language
+Subtag: zma
+Description: Manda (Australia)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: zmb
+Description: Zimba
+Added: 2009-07-29
+%%
+Type: language
+Subtag: zmc
+Description: Margany
+Added: 2009-07-29
+%%
+Type: language
+Subtag: zmd
+Description: Maridan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: zme
+Description: Mangerr
+Added: 2009-07-29
+%%
+Type: language
+Subtag: zmf
+Description: Mfinu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: zmg
+Description: Marti Ke
+Added: 2009-07-29
+%%
+Type: language
+Subtag: zmh
+Description: Makolkol
+Added: 2009-07-29
+%%
+Type: language
+Subtag: zmi
+Description: Negeri Sembilan Malay
+Added: 2009-07-29
+Macrolanguage: ms
+%%
+Type: language
+Subtag: zmj
+Description: Maridjabin
+Added: 2009-07-29
+%%
+Type: language
+Subtag: zmk
+Description: Mandandanyi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: zml
+Description: Madngele
+Added: 2009-07-29
+%%
+Type: language
+Subtag: zmm
+Description: Marimanindji
+Added: 2009-07-29
+%%
+Type: language
+Subtag: zmn
+Description: Mbangwe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: zmo
+Description: Molo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: zmp
+Description: Mpuono
+Added: 2009-07-29
+%%
+Type: language
+Subtag: zmq
+Description: Mituku
+Added: 2009-07-29
+%%
+Type: language
+Subtag: zmr
+Description: Maranunggu
+Added: 2009-07-29
+%%
+Type: language
+Subtag: zms
+Description: Mbesa
+Added: 2009-07-29
+%%
+Type: language
+Subtag: zmt
+Description: Maringarr
+Added: 2009-07-29
+%%
+Type: language
+Subtag: zmu
+Description: Muruwari
+Added: 2009-07-29
+%%
+Type: language
+Subtag: zmv
+Description: Mbariman-Gudhinma
+Added: 2009-07-29
+%%
+Type: language
+Subtag: zmw
+Description: Mbo (Democratic Republic of Congo)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: zmx
+Description: Bomitaba
+Added: 2009-07-29
+%%
+Type: language
+Subtag: zmy
+Description: Mariyedi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: zmz
+Description: Mbandja
+Added: 2009-07-29
+%%
+Type: language
+Subtag: zna
+Description: Zan Gula
+Added: 2009-07-29
+%%
+Type: language
+Subtag: znd
+Description: Zande languages
+Added: 2005-10-16
+Scope: collection
+%%
+Type: language
+Subtag: zne
+Description: Zande (individual language)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: zng
+Description: Mang
+Added: 2009-07-29
+%%
+Type: language
+Subtag: znk
+Description: Manangkari
+Added: 2009-07-29
+%%
+Type: language
+Subtag: zns
+Description: Mangas
+Added: 2009-07-29
+%%
+Type: language
+Subtag: zoc
+Description: Copainalá Zoque
+Added: 2009-07-29
+%%
+Type: language
+Subtag: zoh
+Description: Chimalapa Zoque
+Added: 2009-07-29
+%%
+Type: language
+Subtag: zom
+Description: Zou
+Added: 2009-07-29
+%%
+Type: language
+Subtag: zoo
+Description: Asunción Mixtepec Zapotec
+Added: 2009-07-29
+Macrolanguage: zap
+%%
+Type: language
+Subtag: zoq
+Description: Tabasco Zoque
+Added: 2009-07-29
+%%
+Type: language
+Subtag: zor
+Description: Rayón Zoque
+Added: 2009-07-29
+%%
+Type: language
+Subtag: zos
+Description: Francisco León Zoque
+Added: 2009-07-29
+%%
+Type: language
+Subtag: zpa
+Description: Lachiguiri Zapotec
+Added: 2009-07-29
+Macrolanguage: zap
+%%
+Type: language
+Subtag: zpb
+Description: Yautepec Zapotec
+Added: 2009-07-29
+Macrolanguage: zap
+%%
+Type: language
+Subtag: zpc
+Description: Choapan Zapotec
+Added: 2009-07-29
+Macrolanguage: zap
+%%
+Type: language
+Subtag: zpd
+Description: Southeastern Ixtlán Zapotec
+Added: 2009-07-29
+Macrolanguage: zap
+%%
+Type: language
+Subtag: zpe
+Description: Petapa Zapotec
+Added: 2009-07-29
+Macrolanguage: zap
+%%
+Type: language
+Subtag: zpf
+Description: San Pedro Quiatoni Zapotec
+Added: 2009-07-29
+Macrolanguage: zap
+%%
+Type: language
+Subtag: zpg
+Description: Guevea De Humboldt Zapotec
+Added: 2009-07-29
+Macrolanguage: zap
+%%
+Type: language
+Subtag: zph
+Description: Totomachapan Zapotec
+Added: 2009-07-29
+Macrolanguage: zap
+%%
+Type: language
+Subtag: zpi
+Description: Santa María Quiegolani Zapotec
+Added: 2009-07-29
+Macrolanguage: zap
+%%
+Type: language
+Subtag: zpj
+Description: Quiavicuzas Zapotec
+Added: 2009-07-29
+Macrolanguage: zap
+%%
+Type: language
+Subtag: zpk
+Description: Tlacolulita Zapotec
+Added: 2009-07-29
+Macrolanguage: zap
+%%
+Type: language
+Subtag: zpl
+Description: Lachixío Zapotec
+Added: 2009-07-29
+Macrolanguage: zap
+%%
+Type: language
+Subtag: zpm
+Description: Mixtepec Zapotec
+Added: 2009-07-29
+Macrolanguage: zap
+%%
+Type: language
+Subtag: zpn
+Description: Santa Inés Yatzechi Zapotec
+Added: 2009-07-29
+Macrolanguage: zap
+%%
+Type: language
+Subtag: zpo
+Description: Amatlán Zapotec
+Added: 2009-07-29
+Macrolanguage: zap
+%%
+Type: language
+Subtag: zpp
+Description: El Alto Zapotec
+Added: 2009-07-29
+Macrolanguage: zap
+%%
+Type: language
+Subtag: zpq
+Description: Zoogocho Zapotec
+Added: 2009-07-29
+Macrolanguage: zap
+%%
+Type: language
+Subtag: zpr
+Description: Santiago Xanica Zapotec
+Added: 2009-07-29
+Macrolanguage: zap
+%%
+Type: language
+Subtag: zps
+Description: Coatlán Zapotec
+Added: 2009-07-29
+Macrolanguage: zap
+%%
+Type: language
+Subtag: zpt
+Description: San Vicente Coatlán Zapotec
+Added: 2009-07-29
+Macrolanguage: zap
+%%
+Type: language
+Subtag: zpu
+Description: Yalálag Zapotec
+Added: 2009-07-29
+Macrolanguage: zap
+%%
+Type: language
+Subtag: zpv
+Description: Chichicapan Zapotec
+Added: 2009-07-29
+Macrolanguage: zap
+%%
+Type: language
+Subtag: zpw
+Description: Zaniza Zapotec
+Added: 2009-07-29
+Macrolanguage: zap
+%%
+Type: language
+Subtag: zpx
+Description: San Baltazar Loxicha Zapotec
+Added: 2009-07-29
+Macrolanguage: zap
+%%
+Type: language
+Subtag: zpy
+Description: Mazaltepec Zapotec
+Added: 2009-07-29
+Macrolanguage: zap
+%%
+Type: language
+Subtag: zpz
+Description: Texmelucan Zapotec
+Added: 2009-07-29
+Macrolanguage: zap
+%%
+Type: language
+Subtag: zqe
+Description: Qiubei Zhuang
+Added: 2009-07-29
+Macrolanguage: za
+%%
+Type: language
+Subtag: zra
+Description: Kara (Korea)
+Added: 2009-07-29
+%%
+Type: language
+Subtag: zrg
+Description: Mirgan
+Added: 2009-07-29
+%%
+Type: language
+Subtag: zrn
+Description: Zerenkel
+Added: 2009-07-29
+%%
+Type: language
+Subtag: zro
+Description: Záparo
+Added: 2009-07-29
+%%
+Type: language
+Subtag: zrp
+Description: Zarphatic
+Added: 2009-07-29
+%%
+Type: language
+Subtag: zrs
+Description: Mairasi
+Added: 2009-07-29
+%%
+Type: language
+Subtag: zsa
+Description: Sarasira
+Added: 2009-07-29
+%%
+Type: language
+Subtag: zsk
+Description: Kaskean
+Added: 2009-07-29
+%%
+Type: language
+Subtag: zsl
+Description: Zambian Sign Language
+Added: 2009-07-29
+%%
+Type: language
+Subtag: zsm
+Description: Standard Malay
+Added: 2009-07-29
+Macrolanguage: ms
+%%
+Type: language
+Subtag: zsr
+Description: Southern Rincon Zapotec
+Added: 2009-07-29
+Macrolanguage: zap
+%%
+Type: language
+Subtag: zsu
+Description: Sukurum
+Added: 2009-07-29
+%%
+Type: language
+Subtag: zte
+Description: Elotepec Zapotec
+Added: 2009-07-29
+Macrolanguage: zap
+%%
+Type: language
+Subtag: ztg
+Description: Xanaguía Zapotec
+Added: 2009-07-29
+Macrolanguage: zap
+%%
+Type: language
+Subtag: ztl
+Description: Lapaguía-Guivini Zapotec
+Added: 2009-07-29
+Macrolanguage: zap
+%%
+Type: language
+Subtag: ztm
+Description: San Agustín Mixtepec Zapotec
+Added: 2009-07-29
+Macrolanguage: zap
+%%
+Type: language
+Subtag: ztn
+Description: Santa Catarina Albarradas Zapotec
+Added: 2009-07-29
+Macrolanguage: zap
+%%
+Type: language
+Subtag: ztp
+Description: Loxicha Zapotec
+Added: 2009-07-29
+Macrolanguage: zap
+%%
+Type: language
+Subtag: ztq
+Description: Quioquitani-Quierí Zapotec
+Added: 2009-07-29
+Macrolanguage: zap
+%%
+Type: language
+Subtag: zts
+Description: Tilquiapan Zapotec
+Added: 2009-07-29
+Macrolanguage: zap
+%%
+Type: language
+Subtag: ztt
+Description: Tejalapan Zapotec
+Added: 2009-07-29
+Macrolanguage: zap
+%%
+Type: language
+Subtag: ztu
+Description: Güilá Zapotec
+Added: 2009-07-29
+Macrolanguage: zap
+%%
+Type: language
+Subtag: ztx
+Description: Zaachila Zapotec
+Added: 2009-07-29
+Macrolanguage: zap
+%%
+Type: language
+Subtag: zty
+Description: Yatee Zapotec
+Added: 2009-07-29
+Macrolanguage: zap
+%%
+Type: language
+Subtag: zua
+Description: Zeem
+Added: 2009-07-29
+%%
+Type: language
+Subtag: zuh
+Description: Tokano
+Added: 2009-07-29
+%%
+Type: language
+Subtag: zum
+Description: Kumzari
+Added: 2009-07-29
+%%
+Type: language
+Subtag: zun
+Description: Zuni
+Added: 2005-10-16
+%%
+Type: language
+Subtag: zuy
+Description: Zumaya
+Added: 2009-07-29
+%%
+Type: language
+Subtag: zwa
+Description: Zay
+Added: 2009-07-29
+%%
+Type: language
+Subtag: zxx
+Description: No linguistic content
+Description: Not applicable
+Added: 2006-03-08
+Scope: special
+%%
+Type: language
+Subtag: zyb
+Description: Yongbei Zhuang
+Added: 2009-07-29
+Macrolanguage: za
+%%
+Type: language
+Subtag: zyg
+Description: Yang Zhuang
+Added: 2009-07-29
+Macrolanguage: za
+%%
+Type: language
+Subtag: zyj
+Description: Youjiang Zhuang
+Added: 2009-07-29
+Macrolanguage: za
+%%
+Type: language
+Subtag: zyn
+Description: Yongnan Zhuang
+Added: 2009-07-29
+Macrolanguage: za
+%%
+Type: language
+Subtag: zyp
+Description: Zyphe
+Added: 2009-07-29
+%%
+Type: language
+Subtag: zza
+Description: Zaza
+Description: Dimili
+Description: Dimli (macrolanguage)
+Description: Kirdki
+Description: Kirmanjki (macrolanguage)
+Description: Zazaki
+Added: 2006-08-24
+Scope: macrolanguage
+%%
+Type: language
+Subtag: zzj
+Description: Zuojiang Zhuang
+Added: 2009-07-29
+Macrolanguage: za
+%%
+Type: extlang
+Subtag: aao
+Description: Algerian Saharan Arabic
+Added: 2009-07-29
+Preferred-Value: aao
+Prefix: ar
+Macrolanguage: ar
+%%
+Type: extlang
+Subtag: abh
+Description: Tajiki Arabic
+Added: 2009-07-29
+Preferred-Value: abh
+Prefix: ar
+Macrolanguage: ar
+%%
+Type: extlang
+Subtag: abv
+Description: Baharna Arabic
+Added: 2009-07-29
+Preferred-Value: abv
+Prefix: ar
+Macrolanguage: ar
+%%
+Type: extlang
+Subtag: acm
+Description: Mesopotamian Arabic
+Added: 2009-07-29
+Preferred-Value: acm
+Prefix: ar
+Macrolanguage: ar
+%%
+Type: extlang
+Subtag: acq
+Description: Ta'izzi-Adeni Arabic
+Added: 2009-07-29
+Preferred-Value: acq
+Prefix: ar
+Macrolanguage: ar
+%%
+Type: extlang
+Subtag: acw
+Description: Hijazi Arabic
+Added: 2009-07-29
+Preferred-Value: acw
+Prefix: ar
+Macrolanguage: ar
+%%
+Type: extlang
+Subtag: acx
+Description: Omani Arabic
+Added: 2009-07-29
+Preferred-Value: acx
+Prefix: ar
+Macrolanguage: ar
+%%
+Type: extlang
+Subtag: acy
+Description: Cypriot Arabic
+Added: 2009-07-29
+Preferred-Value: acy
+Prefix: ar
+Macrolanguage: ar
+%%
+Type: extlang
+Subtag: adf
+Description: Dhofari Arabic
+Added: 2009-07-29
+Preferred-Value: adf
+Prefix: ar
+Macrolanguage: ar
+%%
+Type: extlang
+Subtag: ads
+Description: Adamorobe Sign Language
+Added: 2009-07-29
+Preferred-Value: ads
+Prefix: sgn
+%%
+Type: extlang
+Subtag: aeb
+Description: Tunisian Arabic
+Added: 2009-07-29
+Preferred-Value: aeb
+Prefix: ar
+Macrolanguage: ar
+%%
+Type: extlang
+Subtag: aec
+Description: Saidi Arabic
+Added: 2009-07-29
+Preferred-Value: aec
+Prefix: ar
+Macrolanguage: ar
+%%
+Type: extlang
+Subtag: aed
+Description: Argentine Sign Language
+Added: 2009-07-29
+Preferred-Value: aed
+Prefix: sgn
+%%
+Type: extlang
+Subtag: aen
+Description: Armenian Sign Language
+Added: 2009-07-29
+Preferred-Value: aen
+Prefix: sgn
+%%
+Type: extlang
+Subtag: afb
+Description: Gulf Arabic
+Added: 2009-07-29
+Preferred-Value: afb
+Prefix: ar
+Macrolanguage: ar
+%%
+Type: extlang
+Subtag: afg
+Description: Afghan Sign Language
+Added: 2009-07-29
+Preferred-Value: afg
+Prefix: sgn
+%%
+Type: extlang
+Subtag: ajp
+Description: South Levantine Arabic
+Added: 2009-07-29
+Preferred-Value: ajp
+Prefix: ar
+Macrolanguage: ar
+%%
+Type: extlang
+Subtag: apc
+Description: North Levantine Arabic
+Added: 2009-07-29
+Preferred-Value: apc
+Prefix: ar
+Macrolanguage: ar
+%%
+Type: extlang
+Subtag: apd
+Description: Sudanese Arabic
+Added: 2009-07-29
+Preferred-Value: apd
+Prefix: ar
+Macrolanguage: ar
+%%
+Type: extlang
+Subtag: arb
+Description: Standard Arabic
+Added: 2009-07-29
+Preferred-Value: arb
+Prefix: ar
+Macrolanguage: ar
+%%
+Type: extlang
+Subtag: arq
+Description: Algerian Arabic
+Added: 2009-07-29
+Preferred-Value: arq
+Prefix: ar
+Macrolanguage: ar
+%%
+Type: extlang
+Subtag: ars
+Description: Najdi Arabic
+Added: 2009-07-29
+Preferred-Value: ars
+Prefix: ar
+Macrolanguage: ar
+%%
+Type: extlang
+Subtag: ary
+Description: Moroccan Arabic
+Added: 2009-07-29
+Preferred-Value: ary
+Prefix: ar
+Macrolanguage: ar
+%%
+Type: extlang
+Subtag: arz
+Description: Egyptian Arabic
+Added: 2009-07-29
+Preferred-Value: arz
+Prefix: ar
+Macrolanguage: ar
+%%
+Type: extlang
+Subtag: ase
+Description: American Sign Language
+Added: 2009-07-29
+Preferred-Value: ase
+Prefix: sgn
+%%
+Type: extlang
+Subtag: asf
+Description: Australian Sign Language
+Added: 2009-07-29
+Preferred-Value: asf
+Prefix: sgn
+%%
+Type: extlang
+Subtag: asp
+Description: Algerian Sign Language
+Added: 2009-07-29
+Preferred-Value: asp
+Prefix: sgn
+%%
+Type: extlang
+Subtag: asq
+Description: Austrian Sign Language
+Added: 2009-07-29
+Preferred-Value: asq
+Prefix: sgn
+%%
+Type: extlang
+Subtag: asw
+Description: Australian Aborigines Sign Language
+Added: 2009-07-29
+Preferred-Value: asw
+Prefix: sgn
+%%
+Type: extlang
+Subtag: auz
+Description: Uzbeki Arabic
+Added: 2009-07-29
+Preferred-Value: auz
+Prefix: ar
+Macrolanguage: ar
+%%
+Type: extlang
+Subtag: avl
+Description: Eastern Egyptian Bedawi Arabic
+Added: 2009-07-29
+Preferred-Value: avl
+Prefix: ar
+Macrolanguage: ar
+%%
+Type: extlang
+Subtag: ayh
+Description: Hadrami Arabic
+Added: 2009-07-29
+Preferred-Value: ayh
+Prefix: ar
+Macrolanguage: ar
+%%
+Type: extlang
+Subtag: ayl
+Description: Libyan Arabic
+Added: 2009-07-29
+Preferred-Value: ayl
+Prefix: ar
+Macrolanguage: ar
+%%
+Type: extlang
+Subtag: ayn
+Description: Sanaani Arabic
+Added: 2009-07-29
+Preferred-Value: ayn
+Prefix: ar
+Macrolanguage: ar
+%%
+Type: extlang
+Subtag: ayp
+Description: North Mesopotamian Arabic
+Added: 2009-07-29
+Preferred-Value: ayp
+Prefix: ar
+Macrolanguage: ar
+%%
+Type: extlang
+Subtag: bbz
+Description: Babalia Creole Arabic
+Added: 2009-07-29
+Preferred-Value: bbz
+Prefix: ar
+Macrolanguage: ar
+%%
+Type: extlang
+Subtag: bfi
+Description: British Sign Language
+Added: 2009-07-29
+Preferred-Value: bfi
+Prefix: sgn
+%%
+Type: extlang
+Subtag: bfk
+Description: Ban Khor Sign Language
+Added: 2009-07-29
+Preferred-Value: bfk
+Prefix: sgn
+%%
+Type: extlang
+Subtag: bjn
+Description: Banjar
+Added: 2009-07-29
+Preferred-Value: bjn
+Prefix: ms
+Macrolanguage: ms
+%%
+Type: extlang
+Subtag: bog
+Description: Bamako Sign Language
+Added: 2009-07-29
+Preferred-Value: bog
+Prefix: sgn
+%%
+Type: extlang
+Subtag: bqn
+Description: Bulgarian Sign Language
+Added: 2009-07-29
+Preferred-Value: bqn
+Prefix: sgn
+%%
+Type: extlang
+Subtag: bqy
+Description: Bengkala Sign Language
+Added: 2009-07-29
+Preferred-Value: bqy
+Prefix: sgn
+%%
+Type: extlang
+Subtag: btj
+Description: Bacanese Malay
+Added: 2009-07-29
+Preferred-Value: btj
+Prefix: ms
+Macrolanguage: ms
+%%
+Type: extlang
+Subtag: bve
+Description: Berau Malay
+Added: 2009-07-29
+Preferred-Value: bve
+Prefix: ms
+Macrolanguage: ms
+%%
+Type: extlang
+Subtag: bvl
+Description: Bolivian Sign Language
+Added: 2009-07-29
+Preferred-Value: bvl
+Prefix: sgn
+%%
+Type: extlang
+Subtag: bvu
+Description: Bukit Malay
+Added: 2009-07-29
+Preferred-Value: bvu
+Prefix: ms
+Macrolanguage: ms
+%%
+Type: extlang
+Subtag: bzs
+Description: Brazilian Sign Language
+Added: 2009-07-29
+Preferred-Value: bzs
+Prefix: sgn
+%%
+Type: extlang
+Subtag: cdo
+Description: Min Dong Chinese
+Added: 2009-07-29
+Preferred-Value: cdo
+Prefix: zh
+Macrolanguage: zh
+%%
+Type: extlang
+Subtag: cds
+Description: Chadian Sign Language
+Added: 2009-07-29
+Preferred-Value: cds
+Prefix: sgn
+%%
+Type: extlang
+Subtag: cjy
+Description: Jinyu Chinese
+Added: 2009-07-29
+Preferred-Value: cjy
+Prefix: zh
+Macrolanguage: zh
+%%
+Type: extlang
+Subtag: cmn
+Description: Mandarin Chinese
+Added: 2009-07-29
+Preferred-Value: cmn
+Prefix: zh
+Macrolanguage: zh
+%%
+Type: extlang
+Subtag: coa
+Description: Cocos Islands Malay
+Added: 2009-07-29
+Preferred-Value: coa
+Prefix: ms
+Macrolanguage: ms
+%%
+Type: extlang
+Subtag: cpx
+Description: Pu-Xian Chinese
+Added: 2009-07-29
+Preferred-Value: cpx
+Prefix: zh
+Macrolanguage: zh
+%%
+Type: extlang
+Subtag: csc
+Description: Catalan Sign Language
+Description: Lengua de señas catalana
+Description: Llengua de Signes Catalana
+Added: 2009-07-29
+Preferred-Value: csc
+Prefix: sgn
+%%
+Type: extlang
+Subtag: csd
+Description: Chiangmai Sign Language
+Added: 2009-07-29
+Preferred-Value: csd
+Prefix: sgn
+%%
+Type: extlang
+Subtag: cse
+Description: Czech Sign Language
+Added: 2009-07-29
+Preferred-Value: cse
+Prefix: sgn
+%%
+Type: extlang
+Subtag: csf
+Description: Cuba Sign Language
+Added: 2009-07-29
+Preferred-Value: csf
+Prefix: sgn
+%%
+Type: extlang
+Subtag: csg
+Description: Chilean Sign Language
+Added: 2009-07-29
+Preferred-Value: csg
+Prefix: sgn
+%%
+Type: extlang
+Subtag: csl
+Description: Chinese Sign Language
+Added: 2009-07-29
+Preferred-Value: csl
+Prefix: sgn
+%%
+Type: extlang
+Subtag: csn
+Description: Colombian Sign Language
+Added: 2009-07-29
+Preferred-Value: csn
+Prefix: sgn
+%%
+Type: extlang
+Subtag: csq
+Description: Croatia Sign Language
+Added: 2009-07-29
+Preferred-Value: csq
+Prefix: sgn
+%%
+Type: extlang
+Subtag: csr
+Description: Costa Rican Sign Language
+Added: 2009-07-29
+Preferred-Value: csr
+Prefix: sgn
+%%
+Type: extlang
+Subtag: czh
+Description: Huizhou Chinese
+Added: 2009-07-29
+Preferred-Value: czh
+Prefix: zh
+Macrolanguage: zh
+%%
+Type: extlang
+Subtag: czo
+Description: Min Zhong Chinese
+Added: 2009-07-29
+Preferred-Value: czo
+Prefix: zh
+Macrolanguage: zh
+%%
+Type: extlang
+Subtag: doq
+Description: Dominican Sign Language
+Added: 2009-07-29
+Preferred-Value: doq
+Prefix: sgn
+%%
+Type: extlang
+Subtag: dse
+Description: Dutch Sign Language
+Added: 2009-07-29
+Preferred-Value: dse
+Prefix: sgn
+%%
+Type: extlang
+Subtag: dsl
+Description: Danish Sign Language
+Added: 2009-07-29
+Preferred-Value: dsl
+Prefix: sgn
+%%
+Type: extlang
+Subtag: dup
+Description: Duano
+Added: 2009-07-29
+Preferred-Value: dup
+Prefix: ms
+Macrolanguage: ms
+%%
+Type: extlang
+Subtag: ecs
+Description: Ecuadorian Sign Language
+Added: 2009-07-29
+Preferred-Value: ecs
+Prefix: sgn
+%%
+Type: extlang
+Subtag: esl
+Description: Egypt Sign Language
+Added: 2009-07-29
+Preferred-Value: esl
+Prefix: sgn
+%%
+Type: extlang
+Subtag: esn
+Description: Salvadoran Sign Language
+Added: 2009-07-29
+Preferred-Value: esn
+Prefix: sgn
+%%
+Type: extlang
+Subtag: eso
+Description: Estonian Sign Language
+Added: 2009-07-29
+Preferred-Value: eso
+Prefix: sgn
+%%
+Type: extlang
+Subtag: eth
+Description: Ethiopian Sign Language
+Added: 2009-07-29
+Preferred-Value: eth
+Prefix: sgn
+%%
+Type: extlang
+Subtag: fcs
+Description: Quebec Sign Language
+Added: 2009-07-29
+Preferred-Value: fcs
+Prefix: sgn
+%%
+Type: extlang
+Subtag: fse
+Description: Finnish Sign Language
+Added: 2009-07-29
+Preferred-Value: fse
+Prefix: sgn
+%%
+Type: extlang
+Subtag: fsl
+Description: French Sign Language
+Added: 2009-07-29
+Preferred-Value: fsl
+Prefix: sgn
+%%
+Type: extlang
+Subtag: fss
+Description: Finland-Swedish Sign Language
+Description: finlandssvenskt teckenspråk
+Description: suomenruotsalainen viittomakieli
+Added: 2009-07-29
+Preferred-Value: fss
+Prefix: sgn
+%%
+Type: extlang
+Subtag: gan
+Description: Gan Chinese
+Added: 2009-07-29
+Preferred-Value: gan
+Prefix: zh
+Macrolanguage: zh
+%%
+Type: extlang
+Subtag: gds
+Description: Ghandruk Sign Language
+Added: 2012-08-12
+Preferred-Value: gds
+Prefix: sgn
+%%
+Type: extlang
+Subtag: gom
+Description: Goan Konkani
+Added: 2009-07-29
+Preferred-Value: gom
+Prefix: kok
+Macrolanguage: kok
+%%
+Type: extlang
+Subtag: gse
+Description: Ghanaian Sign Language
+Added: 2009-07-29
+Preferred-Value: gse
+Prefix: sgn
+%%
+Type: extlang
+Subtag: gsg
+Description: German Sign Language
+Added: 2009-07-29
+Preferred-Value: gsg
+Prefix: sgn
+%%
+Type: extlang
+Subtag: gsm
+Description: Guatemalan Sign Language
+Added: 2009-07-29
+Preferred-Value: gsm
+Prefix: sgn
+%%
+Type: extlang
+Subtag: gss
+Description: Greek Sign Language
+Added: 2009-07-29
+Preferred-Value: gss
+Prefix: sgn
+%%
+Type: extlang
+Subtag: gus
+Description: Guinean Sign Language
+Added: 2009-07-29
+Preferred-Value: gus
+Prefix: sgn
+%%
+Type: extlang
+Subtag: hab
+Description: Hanoi Sign Language
+Added: 2009-07-29
+Preferred-Value: hab
+Prefix: sgn
+%%
+Type: extlang
+Subtag: haf
+Description: Haiphong Sign Language
+Added: 2009-07-29
+Preferred-Value: haf
+Prefix: sgn
+%%
+Type: extlang
+Subtag: hak
+Description: Hakka Chinese
+Added: 2009-07-29
+Preferred-Value: hak
+Prefix: zh
+Macrolanguage: zh
+%%
+Type: extlang
+Subtag: hds
+Description: Honduras Sign Language
+Added: 2009-07-29
+Preferred-Value: hds
+Prefix: sgn
+%%
+Type: extlang
+Subtag: hji
+Description: Haji
+Added: 2009-07-29
+Preferred-Value: hji
+Prefix: ms
+Macrolanguage: ms
+%%
+Type: extlang
+Subtag: hks
+Description: Hong Kong Sign Language
+Description: Heung Kong Sau Yue
+Added: 2009-07-29
+Preferred-Value: hks
+Prefix: sgn
+%%
+Type: extlang
+Subtag: hos
+Description: Ho Chi Minh City Sign Language
+Added: 2009-07-29
+Preferred-Value: hos
+Prefix: sgn
+%%
+Type: extlang
+Subtag: hps
+Description: Hawai'i Pidgin Sign Language
+Added: 2009-07-29
+Preferred-Value: hps
+Prefix: sgn
+%%
+Type: extlang
+Subtag: hsh
+Description: Hungarian Sign Language
+Added: 2009-07-29
+Preferred-Value: hsh
+Prefix: sgn
+%%
+Type: extlang
+Subtag: hsl
+Description: Hausa Sign Language
+Added: 2009-07-29
+Preferred-Value: hsl
+Prefix: sgn
+%%
+Type: extlang
+Subtag: hsn
+Description: Xiang Chinese
+Added: 2009-07-29
+Preferred-Value: hsn
+Prefix: zh
+Macrolanguage: zh
+%%
+Type: extlang
+Subtag: icl
+Description: Icelandic Sign Language
+Added: 2009-07-29
+Preferred-Value: icl
+Prefix: sgn
+%%
+Type: extlang
+Subtag: ils
+Description: International Sign
+Added: 2009-07-29
+Preferred-Value: ils
+Prefix: sgn
+%%
+Type: extlang
+Subtag: inl
+Description: Indonesian Sign Language
+Added: 2009-07-29
+Preferred-Value: inl
+Prefix: sgn
+%%
+Type: extlang
+Subtag: ins
+Description: Indian Sign Language
+Added: 2009-07-29
+Preferred-Value: ins
+Prefix: sgn
+%%
+Type: extlang
+Subtag: ise
+Description: Italian Sign Language
+Added: 2009-07-29
+Preferred-Value: ise
+Prefix: sgn
+%%
+Type: extlang
+Subtag: isg
+Description: Irish Sign Language
+Added: 2009-07-29
+Preferred-Value: isg
+Prefix: sgn
+%%
+Type: extlang
+Subtag: isr
+Description: Israeli Sign Language
+Added: 2009-07-29
+Preferred-Value: isr
+Prefix: sgn
+%%
+Type: extlang
+Subtag: jak
+Description: Jakun
+Added: 2009-07-29
+Preferred-Value: jak
+Prefix: ms
+Macrolanguage: ms
+%%
+Type: extlang
+Subtag: jax
+Description: Jambi Malay
+Added: 2009-07-29
+Preferred-Value: jax
+Prefix: ms
+Macrolanguage: ms
+%%
+Type: extlang
+Subtag: jcs
+Description: Jamaican Country Sign Language
+Added: 2009-07-29
+Preferred-Value: jcs
+Prefix: sgn
+%%
+Type: extlang
+Subtag: jhs
+Description: Jhankot Sign Language
+Added: 2009-07-29
+Preferred-Value: jhs
+Prefix: sgn
+%%
+Type: extlang
+Subtag: jls
+Description: Jamaican Sign Language
+Added: 2010-03-11
+Preferred-Value: jls
+Prefix: sgn
+%%
+Type: extlang
+Subtag: jos
+Description: Jordanian Sign Language
+Added: 2009-07-29
+Preferred-Value: jos
+Prefix: sgn
+%%
+Type: extlang
+Subtag: jsl
+Description: Japanese Sign Language
+Added: 2009-07-29
+Preferred-Value: jsl
+Prefix: sgn
+%%
+Type: extlang
+Subtag: jus
+Description: Jumla Sign Language
+Added: 2009-07-29
+Preferred-Value: jus
+Prefix: sgn
+%%
+Type: extlang
+Subtag: kgi
+Description: Selangor Sign Language
+Added: 2009-07-29
+Preferred-Value: kgi
+Prefix: sgn
+%%
+Type: extlang
+Subtag: knn
+Description: Konkani (individual language)
+Added: 2009-07-29
+Preferred-Value: knn
+Prefix: kok
+Macrolanguage: kok
+%%
+Type: extlang
+Subtag: kvb
+Description: Kubu
+Added: 2009-07-29
+Preferred-Value: kvb
+Prefix: ms
+Macrolanguage: ms
+%%
+Type: extlang
+Subtag: kvk
+Description: Korean Sign Language
+Added: 2009-07-29
+Preferred-Value: kvk
+Prefix: sgn
+%%
+Type: extlang
+Subtag: kvr
+Description: Kerinci
+Added: 2009-07-29
+Preferred-Value: kvr
+Prefix: ms
+Macrolanguage: ms
+%%
+Type: extlang
+Subtag: kxd
+Description: Brunei
+Added: 2009-07-29
+Preferred-Value: kxd
+Prefix: ms
+Macrolanguage: ms
+%%
+Type: extlang
+Subtag: lbs
+Description: Libyan Sign Language
+Added: 2009-07-29
+Preferred-Value: lbs
+Prefix: sgn
+%%
+Type: extlang
+Subtag: lce
+Description: Loncong
+Added: 2009-07-29
+Preferred-Value: lce
+Prefix: ms
+Macrolanguage: ms
+%%
+Type: extlang
+Subtag: lcf
+Description: Lubu
+Added: 2009-07-29
+Preferred-Value: lcf
+Prefix: ms
+Macrolanguage: ms
+%%
+Type: extlang
+Subtag: liw
+Description: Col
+Added: 2009-07-29
+Preferred-Value: liw
+Prefix: ms
+Macrolanguage: ms
+%%
+Type: extlang
+Subtag: lls
+Description: Lithuanian Sign Language
+Added: 2009-07-29
+Preferred-Value: lls
+Prefix: sgn
+%%
+Type: extlang
+Subtag: lsg
+Description: Lyons Sign Language
+Added: 2009-07-29
+Preferred-Value: lsg
+Prefix: sgn
+%%
+Type: extlang
+Subtag: lsl
+Description: Latvian Sign Language
+Added: 2009-07-29
+Preferred-Value: lsl
+Prefix: sgn
+%%
+Type: extlang
+Subtag: lso
+Description: Laos Sign Language
+Added: 2009-07-29
+Preferred-Value: lso
+Prefix: sgn
+%%
+Type: extlang
+Subtag: lsp
+Description: Panamanian Sign Language
+Description: Lengua de Señas Panameñas
+Added: 2009-07-29
+Preferred-Value: lsp
+Prefix: sgn
+%%
+Type: extlang
+Subtag: lst
+Description: Trinidad and Tobago Sign Language
+Added: 2009-07-29
+Preferred-Value: lst
+Prefix: sgn
+%%
+Type: extlang
+Subtag: lsy
+Description: Mauritian Sign Language
+Added: 2010-03-11
+Preferred-Value: lsy
+Prefix: sgn
+%%
+Type: extlang
+Subtag: ltg
+Description: Latgalian
+Added: 2010-03-11
+Preferred-Value: ltg
+Prefix: lv
+Macrolanguage: lv
+%%
+Type: extlang
+Subtag: lvs
+Description: Standard Latvian
+Added: 2010-03-11
+Preferred-Value: lvs
+Prefix: lv
+Macrolanguage: lv
+%%
+Type: extlang
+Subtag: lzh
+Description: Literary Chinese
+Added: 2009-07-29
+Preferred-Value: lzh
+Prefix: zh
+Macrolanguage: zh
+%%
+Type: extlang
+Subtag: max
+Description: North Moluccan Malay
+Added: 2009-07-29
+Preferred-Value: max
+Prefix: ms
+Macrolanguage: ms
+%%
+Type: extlang
+Subtag: mdl
+Description: Maltese Sign Language
+Added: 2009-07-29
+Preferred-Value: mdl
+Prefix: sgn
+%%
+Type: extlang
+Subtag: meo
+Description: Kedah Malay
+Added: 2009-07-29
+Preferred-Value: meo
+Prefix: ms
+Macrolanguage: ms
+%%
+Type: extlang
+Subtag: mfa
+Description: Pattani Malay
+Added: 2009-07-29
+Preferred-Value: mfa
+Prefix: ms
+Macrolanguage: ms
+%%
+Type: extlang
+Subtag: mfb
+Description: Bangka
+Added: 2009-07-29
+Preferred-Value: mfb
+Prefix: ms
+Macrolanguage: ms
+%%
+Type: extlang
+Subtag: mfs
+Description: Mexican Sign Language
+Added: 2009-07-29
+Preferred-Value: mfs
+Prefix: sgn
+%%
+Type: extlang
+Subtag: min
+Description: Minangkabau
+Added: 2009-07-29
+Preferred-Value: min
+Prefix: ms
+Macrolanguage: ms
+%%
+Type: extlang
+Subtag: mnp
+Description: Min Bei Chinese
+Added: 2009-07-29
+Preferred-Value: mnp
+Prefix: zh
+Macrolanguage: zh
+%%
+Type: extlang
+Subtag: mqg
+Description: Kota Bangun Kutai Malay
+Added: 2009-07-29
+Preferred-Value: mqg
+Prefix: ms
+Macrolanguage: ms
+%%
+Type: extlang
+Subtag: mre
+Description: Martha's Vineyard Sign Language
+Added: 2009-07-29
+Preferred-Value: mre
+Prefix: sgn
+%%
+Type: extlang
+Subtag: msd
+Description: Yucatec Maya Sign Language
+Added: 2009-07-29
+Preferred-Value: msd
+Prefix: sgn
+%%
+Type: extlang
+Subtag: msi
+Description: Sabah Malay
+Added: 2009-07-29
+Preferred-Value: msi
+Prefix: ms
+Macrolanguage: ms
+%%
+Type: extlang
+Subtag: msr
+Description: Mongolian Sign Language
+Added: 2009-07-29
+Preferred-Value: msr
+Prefix: sgn
+%%
+Type: extlang
+Subtag: mui
+Description: Musi
+Added: 2009-07-29
+Preferred-Value: mui
+Prefix: ms
+Macrolanguage: ms
+%%
+Type: extlang
+Subtag: mzc
+Description: Madagascar Sign Language
+Added: 2009-07-29
+Preferred-Value: mzc
+Prefix: sgn
+%%
+Type: extlang
+Subtag: mzg
+Description: Monastic Sign Language
+Added: 2009-07-29
+Preferred-Value: mzg
+Prefix: sgn
+%%
+Type: extlang
+Subtag: mzy
+Description: Mozambican Sign Language
+Added: 2009-07-29
+Preferred-Value: mzy
+Prefix: sgn
+%%
+Type: extlang
+Subtag: nan
+Description: Min Nan Chinese
+Added: 2009-07-29
+Preferred-Value: nan
+Prefix: zh
+Macrolanguage: zh
+%%
+Type: extlang
+Subtag: nbs
+Description: Namibian Sign Language
+Added: 2009-07-29
+Preferred-Value: nbs
+Prefix: sgn
+%%
+Type: extlang
+Subtag: ncs
+Description: Nicaraguan Sign Language
+Added: 2009-07-29
+Preferred-Value: ncs
+Prefix: sgn
+%%
+Type: extlang
+Subtag: nsi
+Description: Nigerian Sign Language
+Added: 2009-07-29
+Preferred-Value: nsi
+Prefix: sgn
+%%
+Type: extlang
+Subtag: nsl
+Description: Norwegian Sign Language
+Added: 2009-07-29
+Preferred-Value: nsl
+Prefix: sgn
+%%
+Type: extlang
+Subtag: nsp
+Description: Nepalese Sign Language
+Added: 2009-07-29
+Preferred-Value: nsp
+Prefix: sgn
+%%
+Type: extlang
+Subtag: nsr
+Description: Maritime Sign Language
+Added: 2009-07-29
+Preferred-Value: nsr
+Prefix: sgn
+%%
+Type: extlang
+Subtag: nzs
+Description: New Zealand Sign Language
+Added: 2009-07-29
+Preferred-Value: nzs
+Prefix: sgn
+%%
+Type: extlang
+Subtag: okl
+Description: Old Kentish Sign Language
+Added: 2009-07-29
+Preferred-Value: okl
+Prefix: sgn
+%%
+Type: extlang
+Subtag: orn
+Description: Orang Kanaq
+Added: 2009-07-29
+Preferred-Value: orn
+Prefix: ms
+Macrolanguage: ms
+%%
+Type: extlang
+Subtag: ors
+Description: Orang Seletar
+Added: 2009-07-29
+Preferred-Value: ors
+Prefix: ms
+Macrolanguage: ms
+%%
+Type: extlang
+Subtag: pel
+Description: Pekal
+Added: 2009-07-29
+Preferred-Value: pel
+Prefix: ms
+Macrolanguage: ms
+%%
+Type: extlang
+Subtag: pga
+Description: Sudanese Creole Arabic
+Added: 2009-07-29
+Preferred-Value: pga
+Prefix: ar
+Macrolanguage: ar
+%%
+Type: extlang
+Subtag: pks
+Description: Pakistan Sign Language
+Added: 2009-07-29
+Preferred-Value: pks
+Prefix: sgn
+%%
+Type: extlang
+Subtag: prl
+Description: Peruvian Sign Language
+Added: 2009-07-29
+Preferred-Value: prl
+Prefix: sgn
+%%
+Type: extlang
+Subtag: prz
+Description: Providencia Sign Language
+Added: 2009-07-29
+Preferred-Value: prz
+Prefix: sgn
+%%
+Type: extlang
+Subtag: psc
+Description: Persian Sign Language
+Added: 2009-07-29
+Preferred-Value: psc
+Prefix: sgn
+%%
+Type: extlang
+Subtag: psd
+Description: Plains Indian Sign Language
+Added: 2009-07-29
+Preferred-Value: psd
+Prefix: sgn
+%%
+Type: extlang
+Subtag: pse
+Description: Central Malay
+Added: 2009-07-29
+Preferred-Value: pse
+Prefix: ms
+Macrolanguage: ms
+%%
+Type: extlang
+Subtag: psg
+Description: Penang Sign Language
+Added: 2009-07-29
+Preferred-Value: psg
+Prefix: sgn
+%%
+Type: extlang
+Subtag: psl
+Description: Puerto Rican Sign Language
+Added: 2009-07-29
+Preferred-Value: psl
+Prefix: sgn
+%%
+Type: extlang
+Subtag: pso
+Description: Polish Sign Language
+Added: 2009-07-29
+Preferred-Value: pso
+Prefix: sgn
+%%
+Type: extlang
+Subtag: psp
+Description: Philippine Sign Language
+Added: 2009-07-29
+Preferred-Value: psp
+Prefix: sgn
+%%
+Type: extlang
+Subtag: psr
+Description: Portuguese Sign Language
+Added: 2009-07-29
+Preferred-Value: psr
+Prefix: sgn
+%%
+Type: extlang
+Subtag: pys
+Description: Paraguayan Sign Language
+Description: Lengua de Señas del Paraguay
+Added: 2010-03-11
+Preferred-Value: pys
+Prefix: sgn
+%%
+Type: extlang
+Subtag: rms
+Description: Romanian Sign Language
+Added: 2009-07-29
+Preferred-Value: rms
+Prefix: sgn
+%%
+Type: extlang
+Subtag: rsi
+Description: Rennellese Sign Language
+Added: 2009-07-29
+Preferred-Value: rsi
+Prefix: sgn
+%%
+Type: extlang
+Subtag: rsl
+Description: Russian Sign Language
+Added: 2009-07-29
+Preferred-Value: rsl
+Prefix: sgn
+%%
+Type: extlang
+Subtag: sdl
+Description: Saudi Arabian Sign Language
+Added: 2009-07-29
+Preferred-Value: sdl
+Prefix: sgn
+%%
+Type: extlang
+Subtag: sfb
+Description: Langue des signes de Belgique Francophone
+Description: French Belgian Sign Language
+Added: 2009-07-29
+Preferred-Value: sfb
+Prefix: sgn
+%%
+Type: extlang
+Subtag: sfs
+Description: South African Sign Language
+Added: 2009-07-29
+Preferred-Value: sfs
+Prefix: sgn
+%%
+Type: extlang
+Subtag: sgg
+Description: Swiss-German Sign Language
+Added: 2009-07-29
+Preferred-Value: sgg
+Prefix: sgn
+%%
+Type: extlang
+Subtag: sgx
+Description: Sierra Leone Sign Language
+Added: 2009-07-29
+Preferred-Value: sgx
+Prefix: sgn
+%%
+Type: extlang
+Subtag: shu
+Description: Chadian Arabic
+Added: 2009-07-29
+Preferred-Value: shu
+Prefix: ar
+Macrolanguage: ar
+%%
+Type: extlang
+Subtag: slf
+Description: Swiss-Italian Sign Language
+Added: 2009-07-29
+Preferred-Value: slf
+Prefix: sgn
+%%
+Type: extlang
+Subtag: sls
+Description: Singapore Sign Language
+Added: 2009-07-29
+Preferred-Value: sls
+Prefix: sgn
+%%
+Type: extlang
+Subtag: sqk
+Description: Albanian Sign Language
+Added: 2012-08-12
+Preferred-Value: sqk
+Prefix: sgn
+%%
+Type: extlang
+Subtag: sqs
+Description: Sri Lankan Sign Language
+Added: 2009-07-29
+Preferred-Value: sqs
+Prefix: sgn
+%%
+Type: extlang
+Subtag: ssh
+Description: Shihhi Arabic
+Added: 2009-07-29
+Preferred-Value: ssh
+Prefix: ar
+Macrolanguage: ar
+%%
+Type: extlang
+Subtag: ssp
+Description: Spanish Sign Language
+Added: 2009-07-29
+Preferred-Value: ssp
+Prefix: sgn
+%%
+Type: extlang
+Subtag: ssr
+Description: Swiss-French Sign Language
+Added: 2009-07-29
+Preferred-Value: ssr
+Prefix: sgn
+%%
+Type: extlang
+Subtag: svk
+Description: Slovakian Sign Language
+Added: 2009-07-29
+Preferred-Value: svk
+Prefix: sgn
+%%
+Type: extlang
+Subtag: swc
+Description: Congo Swahili
+Added: 2009-07-29
+Preferred-Value: swc
+Prefix: sw
+Macrolanguage: sw
+%%
+Type: extlang
+Subtag: swh
+Description: Swahili (individual language)
+Description: Kiswahili
+Added: 2009-07-29
+Preferred-Value: swh
+Prefix: sw
+Macrolanguage: sw
+%%
+Type: extlang
+Subtag: swl
+Description: Swedish Sign Language
+Added: 2009-07-29
+Preferred-Value: swl
+Prefix: sgn
+%%
+Type: extlang
+Subtag: syy
+Description: Al-Sayyid Bedouin Sign Language
+Added: 2009-07-29
+Preferred-Value: syy
+Prefix: sgn
+%%
+Type: extlang
+Subtag: tmw
+Description: Temuan
+Added: 2009-07-29
+Preferred-Value: tmw
+Prefix: ms
+Macrolanguage: ms
+%%
+Type: extlang
+Subtag: tse
+Description: Tunisian Sign Language
+Added: 2009-07-29
+Preferred-Value: tse
+Prefix: sgn
+%%
+Type: extlang
+Subtag: tsm
+Description: Turkish Sign Language
+Description: Türk İşaret Dili
+Added: 2009-07-29
+Preferred-Value: tsm
+Prefix: sgn
+%%
+Type: extlang
+Subtag: tsq
+Description: Thai Sign Language
+Added: 2009-07-29
+Preferred-Value: tsq
+Prefix: sgn
+%%
+Type: extlang
+Subtag: tss
+Description: Taiwan Sign Language
+Added: 2009-07-29
+Preferred-Value: tss
+Prefix: sgn
+%%
+Type: extlang
+Subtag: tsy
+Description: Tebul Sign Language
+Added: 2009-07-29
+Preferred-Value: tsy
+Prefix: sgn
+%%
+Type: extlang
+Subtag: tza
+Description: Tanzanian Sign Language
+Added: 2009-07-29
+Preferred-Value: tza
+Prefix: sgn
+%%
+Type: extlang
+Subtag: ugn
+Description: Ugandan Sign Language
+Added: 2009-07-29
+Preferred-Value: ugn
+Prefix: sgn
+%%
+Type: extlang
+Subtag: ugy
+Description: Uruguayan Sign Language
+Added: 2009-07-29
+Preferred-Value: ugy
+Prefix: sgn
+%%
+Type: extlang
+Subtag: ukl
+Description: Ukrainian Sign Language
+Added: 2009-07-29
+Preferred-Value: ukl
+Prefix: sgn
+%%
+Type: extlang
+Subtag: uks
+Description: Urubú-Kaapor Sign Language
+Description: Kaapor Sign Language
+Added: 2009-07-29
+Preferred-Value: uks
+Prefix: sgn
+%%
+Type: extlang
+Subtag: urk
+Description: Urak Lawoi'
+Added: 2009-07-29
+Preferred-Value: urk
+Prefix: ms
+Macrolanguage: ms
+%%
+Type: extlang
+Subtag: uzn
+Description: Northern Uzbek
+Added: 2009-07-29
+Preferred-Value: uzn
+Prefix: uz
+Macrolanguage: uz
+%%
+Type: extlang
+Subtag: uzs
+Description: Southern Uzbek
+Added: 2009-07-29
+Preferred-Value: uzs
+Prefix: uz
+Macrolanguage: uz
+%%
+Type: extlang
+Subtag: vgt
+Description: Vlaamse Gebarentaal
+Description: Flemish Sign Language
+Added: 2009-07-29
+Preferred-Value: vgt
+Prefix: sgn
+%%
+Type: extlang
+Subtag: vkk
+Description: Kaur
+Added: 2009-07-29
+Preferred-Value: vkk
+Prefix: ms
+Macrolanguage: ms
+%%
+Type: extlang
+Subtag: vkt
+Description: Tenggarong Kutai Malay
+Added: 2009-07-29
+Preferred-Value: vkt
+Prefix: ms
+Macrolanguage: ms
+%%
+Type: extlang
+Subtag: vsi
+Description: Moldova Sign Language
+Added: 2009-07-29
+Preferred-Value: vsi
+Prefix: sgn
+%%
+Type: extlang
+Subtag: vsl
+Description: Venezuelan Sign Language
+Added: 2009-07-29
+Preferred-Value: vsl
+Prefix: sgn
+%%
+Type: extlang
+Subtag: vsv
+Description: Valencian Sign Language
+Description: Llengua de signes valenciana
+Added: 2009-07-29
+Preferred-Value: vsv
+Prefix: sgn
+%%
+Type: extlang
+Subtag: wuu
+Description: Wu Chinese
+Added: 2009-07-29
+Preferred-Value: wuu
+Prefix: zh
+Macrolanguage: zh
+%%
+Type: extlang
+Subtag: xki
+Description: Kenyan Sign Language
+Added: 2009-07-29
+Preferred-Value: xki
+Prefix: sgn
+%%
+Type: extlang
+Subtag: xml
+Description: Malaysian Sign Language
+Added: 2009-07-29
+Preferred-Value: xml
+Prefix: sgn
+%%
+Type: extlang
+Subtag: xmm
+Description: Manado Malay
+Added: 2009-07-29
+Preferred-Value: xmm
+Prefix: ms
+Macrolanguage: ms
+%%
+Type: extlang
+Subtag: xms
+Description: Moroccan Sign Language
+Added: 2009-07-29
+Preferred-Value: xms
+Prefix: sgn
+%%
+Type: extlang
+Subtag: yds
+Description: Yiddish Sign Language
+Added: 2009-07-29
+Preferred-Value: yds
+Prefix: sgn
+%%
+Type: extlang
+Subtag: ysl
+Description: Yugoslavian Sign Language
+Added: 2009-07-29
+Preferred-Value: ysl
+Prefix: sgn
+%%
+Type: extlang
+Subtag: yue
+Description: Yue Chinese
+Added: 2009-07-29
+Preferred-Value: yue
+Prefix: zh
+Macrolanguage: zh
+%%
+Type: extlang
+Subtag: zib
+Description: Zimbabwe Sign Language
+Added: 2009-07-29
+Preferred-Value: zib
+Prefix: sgn
+%%
+Type: extlang
+Subtag: zlm
+Description: Malay (individual language)
+Added: 2009-07-29
+Preferred-Value: zlm
+Prefix: ms
+Macrolanguage: ms
+%%
+Type: extlang
+Subtag: zmi
+Description: Negeri Sembilan Malay
+Added: 2009-07-29
+Preferred-Value: zmi
+Prefix: ms
+Macrolanguage: ms
+%%
+Type: extlang
+Subtag: zsl
+Description: Zambian Sign Language
+Added: 2009-07-29
+Preferred-Value: zsl
+Prefix: sgn
+%%
+Type: extlang
+Subtag: zsm
+Description: Standard Malay
+Added: 2009-07-29
+Preferred-Value: zsm
+Prefix: ms
+Macrolanguage: ms
+%%
+Type: script
+Subtag: Afak
+Description: Afaka
+Added: 2011-01-07
+%%
+Type: script
+Subtag: Arab
+Description: Arabic
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Armi
+Description: Imperial Aramaic
+Added: 2007-12-05
+%%
+Type: script
+Subtag: Armn
+Description: Armenian
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Avst
+Description: Avestan
+Added: 2007-07-28
+%%
+Type: script
+Subtag: Bali
+Description: Balinese
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Bamu
+Description: Bamum
+Added: 2009-07-30
+%%
+Type: script
+Subtag: Bass
+Description: Bassa Vah
+Added: 2010-04-10
+%%
+Type: script
+Subtag: Batk
+Description: Batak
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Beng
+Description: Bengali
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Blis
+Description: Blissymbols
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Bopo
+Description: Bopomofo
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Brah
+Description: Brahmi
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Brai
+Description: Braille
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Bugi
+Description: Buginese
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Buhd
+Description: Buhid
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Cakm
+Description: Chakma
+Added: 2007-12-05
+%%
+Type: script
+Subtag: Cans
+Description: Unified Canadian Aboriginal Syllabics
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Cari
+Description: Carian
+Added: 2006-07-21
+%%
+Type: script
+Subtag: Cham
+Description: Cham
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Cher
+Description: Cherokee
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Cirt
+Description: Cirth
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Copt
+Description: Coptic
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Cprt
+Description: Cypriot
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Cyrl
+Description: Cyrillic
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Cyrs
+Description: Cyrillic (Old Church Slavonic variant)
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Deva
+Description: Devanagari
+Description: Nagari
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Dsrt
+Description: Deseret
+Description: Mormon
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Dupl
+Description: Duployan shorthand
+Description: Duployan stenography
+Added: 2010-08-16
+%%
+Type: script
+Subtag: Egyd
+Description: Egyptian demotic
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Egyh
+Description: Egyptian hieratic
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Egyp
+Description: Egyptian hieroglyphs
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Elba
+Description: Elbasan
+Added: 2010-08-16
+%%
+Type: script
+Subtag: Ethi
+Description: Ethiopic
+Description: Geʻez
+Description: Ge'ez
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Geok
+Description: Khutsuri (Asomtavruli and Nuskhuri)
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Geor
+Description: Georgian (Mkhedruli)
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Glag
+Description: Glagolitic
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Goth
+Description: Gothic
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Gran
+Description: Grantha
+Added: 2009-12-09
+%%
+Type: script
+Subtag: Grek
+Description: Greek
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Gujr
+Description: Gujarati
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Guru
+Description: Gurmukhi
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Hang
+Description: Hangul
+Description: Hangŭl
+Description: Hangeul
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Hani
+Description: Han
+Description: Hanzi
+Description: Kanji
+Description: Hanja
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Hano
+Description: Hanunoo
+Description: Hanunóo
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Hans
+Description: Han (Simplified variant)
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Hant
+Description: Han (Traditional variant)
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Hebr
+Description: Hebrew
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Hira
+Description: Hiragana
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Hluw
+Description: Anatolian Hieroglyphs
+Description: Luwian Hieroglyphs
+Description: Hittite Hieroglyphs
+Added: 2011-12-28
+%%
+Type: script
+Subtag: Hmng
+Description: Pahawh Hmong
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Hrkt
+Description: Japanese syllabaries (alias for Hiragana + Katakana)
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Hung
+Description: Old Hungarian
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Inds
+Description: Indus
+Description: Harappan
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Ital
+Description: Old Italic (Etruscan, Oscan, etc.)
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Java
+Description: Javanese
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Jpan
+Description: Japanese (alias for Han + Hiragana + Katakana)
+Added: 2006-07-21
+%%
+Type: script
+Subtag: Jurc
+Description: Jurchen
+Added: 2011-01-07
+%%
+Type: script
+Subtag: Kali
+Description: Kayah Li
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Kana
+Description: Katakana
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Khar
+Description: Kharoshthi
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Khmr
+Description: Khmer
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Khoj
+Description: Khojki
+Added: 2011-08-16
+%%
+Type: script
+Subtag: Knda
+Description: Kannada
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Kore
+Description: Korean (alias for Hangul + Han)
+Added: 2007-07-05
+%%
+Type: script
+Subtag: Kpel
+Description: Kpelle
+Added: 2010-04-10
+%%
+Type: script
+Subtag: Kthi
+Description: Kaithi
+Added: 2007-12-05
+%%
+Type: script
+Subtag: Lana
+Description: Tai Tham
+Description: Lanna
+Added: 2006-07-21
+%%
+Type: script
+Subtag: Laoo
+Description: Lao
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Latf
+Description: Latin (Fraktur variant)
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Latg
+Description: Latin (Gaelic variant)
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Latn
+Description: Latin
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Lepc
+Description: Lepcha
+Description: Róng
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Limb
+Description: Limbu
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Lina
+Description: Linear A
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Linb
+Description: Linear B
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Lisu
+Description: Lisu
+Description: Fraser
+Added: 2009-03-13
+%%
+Type: script
+Subtag: Loma
+Description: Loma
+Added: 2010-04-10
+%%
+Type: script
+Subtag: Lyci
+Description: Lycian
+Added: 2006-07-21
+%%
+Type: script
+Subtag: Lydi
+Description: Lydian
+Added: 2006-07-21
+%%
+Type: script
+Subtag: Mand
+Description: Mandaic
+Description: Mandaean
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Mani
+Description: Manichaean
+Added: 2007-07-28
+%%
+Type: script
+Subtag: Maya
+Description: Mayan hieroglyphs
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Mend
+Description: Mende
+Added: 2010-04-10
+%%
+Type: script
+Subtag: Merc
+Description: Meroitic Cursive
+Added: 2009-12-09
+%%
+Type: script
+Subtag: Mero
+Description: Meroitic Hieroglyphs
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Mlym
+Description: Malayalam
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Mong
+Description: Mongolian
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Moon
+Description: Moon
+Description: Moon code
+Description: Moon script
+Description: Moon type
+Added: 2007-01-26
+%%
+Type: script
+Subtag: Mroo
+Description: Mro
+Description: Mru
+Added: 2011-01-07
+%%
+Type: script
+Subtag: Mtei
+Description: Meitei Mayek
+Description: Meithei
+Description: Meetei
+Added: 2007-01-26
+%%
+Type: script
+Subtag: Mymr
+Description: Myanmar
+Description: Burmese
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Narb
+Description: Old North Arabian
+Description: Ancient North Arabian
+Added: 2010-04-10
+%%
+Type: script
+Subtag: Nbat
+Description: Nabataean
+Added: 2010-04-10
+%%
+Type: script
+Subtag: Nkgb
+Description: Nakhi Geba
+Description: 'Na-'Khi ²Ggŏ-¹baw
+Description: Naxi Geba
+Added: 2009-03-13
+%%
+Type: script
+Subtag: Nkoo
+Description: N’Ko
+Description: N'Ko
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Nshu
+Description: Nüshu
+Added: 2011-01-07
+%%
+Type: script
+Subtag: Ogam
+Description: Ogham
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Olck
+Description: Ol Chiki
+Description: Ol Cemet'
+Description: Ol
+Description: Santali
+Added: 2006-07-21
+%%
+Type: script
+Subtag: Orkh
+Description: Old Turkic
+Description: Orkhon Runic
+Added: 2009-07-30
+%%
+Type: script
+Subtag: Orya
+Description: Oriya
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Osma
+Description: Osmanya
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Palm
+Description: Palmyrene
+Added: 2010-04-10
+%%
+Type: script
+Subtag: Perm
+Description: Old Permic
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Phag
+Description: Phags-pa
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Phli
+Description: Inscriptional Pahlavi
+Added: 2007-12-05
+%%
+Type: script
+Subtag: Phlp
+Description: Psalter Pahlavi
+Added: 2007-12-05
+%%
+Type: script
+Subtag: Phlv
+Description: Book Pahlavi
+Added: 2007-07-28
+%%
+Type: script
+Subtag: Phnx
+Description: Phoenician
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Plrd
+Description: Miao
+Description: Pollard
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Prti
+Description: Inscriptional Parthian
+Added: 2007-12-05
+%%
+Type: script
+Subtag: Qaaa..Qabx
+Description: Private use
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Rjng
+Description: Rejang
+Description: Redjang
+Description: Kaganga
+Added: 2006-10-17
+%%
+Type: script
+Subtag: Roro
+Description: Rongorongo
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Runr
+Description: Runic
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Samr
+Description: Samaritan
+Added: 2007-07-28
+%%
+Type: script
+Subtag: Sara
+Description: Sarati
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Sarb
+Description: Old South Arabian
+Added: 2009-07-30
+%%
+Type: script
+Subtag: Saur
+Description: Saurashtra
+Added: 2006-07-21
+%%
+Type: script
+Subtag: Sgnw
+Description: SignWriting
+Added: 2006-10-17
+%%
+Type: script
+Subtag: Shaw
+Description: Shavian
+Description: Shaw
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Shrd
+Description: Sharada
+Description: Śāradā
+Added: 2011-01-07
+%%
+Type: script
+Subtag: Sind
+Description: Khudawadi
+Description: Sindhi
+Added: 2010-08-16
+%%
+Type: script
+Subtag: Sinh
+Description: Sinhala
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Sora
+Description: Sora Sompeng
+Added: 2011-01-07
+%%
+Type: script
+Subtag: Sund
+Description: Sundanese
+Added: 2006-07-21
+%%
+Type: script
+Subtag: Sylo
+Description: Syloti Nagri
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Syrc
+Description: Syriac
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Syre
+Description: Syriac (Estrangelo variant)
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Syrj
+Description: Syriac (Western variant)
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Syrn
+Description: Syriac (Eastern variant)
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Tagb
+Description: Tagbanwa
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Takr
+Description: Takri
+Description: Ṭākrī
+Description: Ṭāṅkrī
+Added: 2011-01-07
+%%
+Type: script
+Subtag: Tale
+Description: Tai Le
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Talu
+Description: New Tai Lue
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Taml
+Description: Tamil
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Tang
+Description: Tangut
+Added: 2011-01-07
+%%
+Type: script
+Subtag: Tavt
+Description: Tai Viet
+Added: 2007-12-05
+%%
+Type: script
+Subtag: Telu
+Description: Telugu
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Teng
+Description: Tengwar
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Tfng
+Description: Tifinagh
+Description: Berber
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Tglg
+Description: Tagalog
+Description: Baybayin
+Description: Alibata
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Thaa
+Description: Thaana
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Thai
+Description: Thai
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Tibt
+Description: Tibetan
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Tirh
+Description: Tirhuta
+Added: 2011-08-16
+%%
+Type: script
+Subtag: Ugar
+Description: Ugaritic
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Vaii
+Description: Vai
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Visp
+Description: Visible Speech
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Wara
+Description: Warang Citi
+Description: Varang Kshiti
+Added: 2009-12-09
+%%
+Type: script
+Subtag: Wole
+Description: Woleai
+Added: 2011-01-07
+%%
+Type: script
+Subtag: Xpeo
+Description: Old Persian
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Xsux
+Description: Sumero-Akkadian cuneiform
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Yiii
+Description: Yi
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Zinh
+Description: Code for inherited script
+Added: 2009-04-03
+Comments: Not intended for use as a language subtag
+%%
+Type: script
+Subtag: Zmth
+Description: Mathematical notation
+Added: 2007-12-05
+%%
+Type: script
+Subtag: Zsym
+Description: Symbols
+Added: 2007-12-05
+%%
+Type: script
+Subtag: Zxxx
+Description: Code for unwritten documents
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Zyyy
+Description: Code for undetermined script
+Added: 2005-10-16
+%%
+Type: script
+Subtag: Zzzz
+Description: Code for uncoded script
+Added: 2005-10-16
+%%
+Type: region
+Subtag: AA
+Description: Private use
+Added: 2005-10-16
+%%
+Type: region
+Subtag: AC
+Description: Ascension Island
+Added: 2009-07-29
+%%
+Type: region
+Subtag: AD
+Description: Andorra
+Added: 2005-10-16
+%%
+Type: region
+Subtag: AE
+Description: United Arab Emirates
+Added: 2005-10-16
+%%
+Type: region
+Subtag: AF
+Description: Afghanistan
+Added: 2005-10-16
+%%
+Type: region
+Subtag: AG
+Description: Antigua and Barbuda
+Added: 2005-10-16
+%%
+Type: region
+Subtag: AI
+Description: Anguilla
+Added: 2005-10-16
+%%
+Type: region
+Subtag: AL
+Description: Albania
+Added: 2005-10-16
+%%
+Type: region
+Subtag: AM
+Description: Armenia
+Added: 2005-10-16
+%%
+Type: region
+Subtag: AN
+Description: Netherlands Antilles
+Added: 2005-10-16
+Deprecated: 2011-01-07
+Comments: see BQ, CW, and SX
+%%
+Type: region
+Subtag: AO
+Description: Angola
+Added: 2005-10-16
+%%
+Type: region
+Subtag: AQ
+Description: Antarctica
+Added: 2005-10-16
+%%
+Type: region
+Subtag: AR
+Description: Argentina
+Added: 2005-10-16
+%%
+Type: region
+Subtag: AS
+Description: American Samoa
+Added: 2005-10-16
+%%
+Type: region
+Subtag: AT
+Description: Austria
+Added: 2005-10-16
+%%
+Type: region
+Subtag: AU
+Description: Australia
+Added: 2005-10-16
+%%
+Type: region
+Subtag: AW
+Description: Aruba
+Added: 2005-10-16
+%%
+Type: region
+Subtag: AX
+Description: Åland Islands
+Added: 2005-10-16
+%%
+Type: region
+Subtag: AZ
+Description: Azerbaijan
+Added: 2005-10-16
+%%
+Type: region
+Subtag: BA
+Description: Bosnia and Herzegovina
+Added: 2005-10-16
+%%
+Type: region
+Subtag: BB
+Description: Barbados
+Added: 2005-10-16
+%%
+Type: region
+Subtag: BD
+Description: Bangladesh
+Added: 2005-10-16
+%%
+Type: region
+Subtag: BE
+Description: Belgium
+Added: 2005-10-16
+%%
+Type: region
+Subtag: BF
+Description: Burkina Faso
+Added: 2005-10-16
+%%
+Type: region
+Subtag: BG
+Description: Bulgaria
+Added: 2005-10-16
+%%
+Type: region
+Subtag: BH
+Description: Bahrain
+Added: 2005-10-16
+%%
+Type: region
+Subtag: BI
+Description: Burundi
+Added: 2005-10-16
+%%
+Type: region
+Subtag: BJ
+Description: Benin
+Added: 2005-10-16
+%%
+Type: region
+Subtag: BL
+Description: Saint Barthélemy
+Added: 2007-11-02
+%%
+Type: region
+Subtag: BM
+Description: Bermuda
+Added: 2005-10-16
+%%
+Type: region
+Subtag: BN
+Description: Brunei Darussalam
+Added: 2005-10-16
+%%
+Type: region
+Subtag: BO
+Description: Bolivia
+Added: 2005-10-16
+%%
+Type: region
+Subtag: BQ
+Description: Bonaire, Sint Eustatius and Saba
+Added: 2011-01-07
+%%
+Type: region
+Subtag: BR
+Description: Brazil
+Added: 2005-10-16
+%%
+Type: region
+Subtag: BS
+Description: Bahamas
+Added: 2005-10-16
+%%
+Type: region
+Subtag: BT
+Description: Bhutan
+Added: 2005-10-16
+%%
+Type: region
+Subtag: BU
+Description: Burma
+Added: 2005-10-16
+Deprecated: 1989-12-05
+Preferred-Value: MM
+%%
+Type: region
+Subtag: BV
+Description: Bouvet Island
+Added: 2005-10-16
+%%
+Type: region
+Subtag: BW
+Description: Botswana
+Added: 2005-10-16
+%%
+Type: region
+Subtag: BY
+Description: Belarus
+Added: 2005-10-16
+%%
+Type: region
+Subtag: BZ
+Description: Belize
+Added: 2005-10-16
+%%
+Type: region
+Subtag: CA
+Description: Canada
+Added: 2005-10-16
+%%
+Type: region
+Subtag: CC
+Description: Cocos (Keeling) Islands
+Added: 2005-10-16
+%%
+Type: region
+Subtag: CD
+Description: The Democratic Republic of the Congo
+Added: 2005-10-16
+%%
+Type: region
+Subtag: CF
+Description: Central African Republic
+Added: 2005-10-16
+%%
+Type: region
+Subtag: CG
+Description: Congo
+Added: 2005-10-16
+%%
+Type: region
+Subtag: CH
+Description: Switzerland
+Added: 2005-10-16
+%%
+Type: region
+Subtag: CI
+Description: Côte d'Ivoire
+Added: 2005-10-16
+%%
+Type: region
+Subtag: CK
+Description: Cook Islands
+Added: 2005-10-16
+%%
+Type: region
+Subtag: CL
+Description: Chile
+Added: 2005-10-16
+%%
+Type: region
+Subtag: CM
+Description: Cameroon
+Added: 2005-10-16
+%%
+Type: region
+Subtag: CN
+Description: China
+Added: 2005-10-16
+%%
+Type: region
+Subtag: CO
+Description: Colombia
+Added: 2005-10-16
+%%
+Type: region
+Subtag: CP
+Description: Clipperton Island
+Added: 2009-07-29
+%%
+Type: region
+Subtag: CR
+Description: Costa Rica
+Added: 2005-10-16
+%%
+Type: region
+Subtag: CS
+Description: Serbia and Montenegro
+Added: 2005-10-16
+Deprecated: 2006-10-05
+Comments: see RS for Serbia or ME for Montenegro
+%%
+Type: region
+Subtag: CU
+Description: Cuba
+Added: 2005-10-16
+%%
+Type: region
+Subtag: CV
+Description: Cape Verde
+Added: 2005-10-16
+%%
+Type: region
+Subtag: CW
+Description: Curaçao
+Added: 2011-01-07
+%%
+Type: region
+Subtag: CX
+Description: Christmas Island
+Added: 2005-10-16
+%%
+Type: region
+Subtag: CY
+Description: Cyprus
+Added: 2005-10-16
+%%
+Type: region
+Subtag: CZ
+Description: Czech Republic
+Added: 2005-10-16
+%%
+Type: region
+Subtag: DD
+Description: German Democratic Republic
+Added: 2005-10-16
+Deprecated: 1990-10-30
+Preferred-Value: DE
+%%
+Type: region
+Subtag: DE
+Description: Germany
+Added: 2005-10-16
+%%
+Type: region
+Subtag: DG
+Description: Diego Garcia
+Added: 2009-07-29
+%%
+Type: region
+Subtag: DJ
+Description: Djibouti
+Added: 2005-10-16
+%%
+Type: region
+Subtag: DK
+Description: Denmark
+Added: 2005-10-16
+%%
+Type: region
+Subtag: DM
+Description: Dominica
+Added: 2005-10-16
+%%
+Type: region
+Subtag: DO
+Description: Dominican Republic
+Added: 2005-10-16
+%%
+Type: region
+Subtag: DZ
+Description: Algeria
+Added: 2005-10-16
+%%
+Type: region
+Subtag: EA
+Description: Ceuta, Melilla
+Added: 2009-07-29
+%%
+Type: region
+Subtag: EC
+Description: Ecuador
+Added: 2005-10-16
+%%
+Type: region
+Subtag: EE
+Description: Estonia
+Added: 2005-10-16
+%%
+Type: region
+Subtag: EG
+Description: Egypt
+Added: 2005-10-16
+%%
+Type: region
+Subtag: EH
+Description: Western Sahara
+Added: 2005-10-16
+%%
+Type: region
+Subtag: ER
+Description: Eritrea
+Added: 2005-10-16
+%%
+Type: region
+Subtag: ES
+Description: Spain
+Added: 2005-10-16
+%%
+Type: region
+Subtag: ET
+Description: Ethiopia
+Added: 2005-10-16
+%%
+Type: region
+Subtag: EU
+Description: European Union
+Added: 2009-07-29
+%%
+Type: region
+Subtag: FI
+Description: Finland
+Added: 2005-10-16
+%%
+Type: region
+Subtag: FJ
+Description: Fiji
+Added: 2005-10-16
+%%
+Type: region
+Subtag: FK
+Description: Falkland Islands (Malvinas)
+Added: 2005-10-16
+%%
+Type: region
+Subtag: FM
+Description: Federated States of Micronesia
+Added: 2005-10-16
+%%
+Type: region
+Subtag: FO
+Description: Faroe Islands
+Added: 2005-10-16
+%%
+Type: region
+Subtag: FR
+Description: France
+Added: 2005-10-16
+%%
+Type: region
+Subtag: FX
+Description: Metropolitan France
+Added: 2005-10-16
+Deprecated: 1997-07-14
+Preferred-Value: FR
+%%
+Type: region
+Subtag: GA
+Description: Gabon
+Added: 2005-10-16
+%%
+Type: region
+Subtag: GB
+Description: United Kingdom
+Added: 2005-10-16
+Comments: as of 2006-03-29 GB no longer includes the Channel Islands and
+  Isle of Man; see GG, JE, IM
+%%
+Type: region
+Subtag: GD
+Description: Grenada
+Added: 2005-10-16
+%%
+Type: region
+Subtag: GE
+Description: Georgia
+Added: 2005-10-16
+%%
+Type: region
+Subtag: GF
+Description: French Guiana
+Added: 2005-10-16
+%%
+Type: region
+Subtag: GG
+Description: Guernsey
+Added: 2006-03-29
+%%
+Type: region
+Subtag: GH
+Description: Ghana
+Added: 2005-10-16
+%%
+Type: region
+Subtag: GI
+Description: Gibraltar
+Added: 2005-10-16
+%%
+Type: region
+Subtag: GL
+Description: Greenland
+Added: 2005-10-16
+%%
+Type: region
+Subtag: GM
+Description: Gambia
+Added: 2005-10-16
+%%
+Type: region
+Subtag: GN
+Description: Guinea
+Added: 2005-10-16
+%%
+Type: region
+Subtag: GP
+Description: Guadeloupe
+Added: 2005-10-16
+%%
+Type: region
+Subtag: GQ
+Description: Equatorial Guinea
+Added: 2005-10-16
+%%
+Type: region
+Subtag: GR
+Description: Greece
+Added: 2005-10-16
+%%
+Type: region
+Subtag: GS
+Description: South Georgia and the South Sandwich Islands
+Added: 2005-10-16
+%%
+Type: region
+Subtag: GT
+Description: Guatemala
+Added: 2005-10-16
+%%
+Type: region
+Subtag: GU
+Description: Guam
+Added: 2005-10-16
+%%
+Type: region
+Subtag: GW
+Description: Guinea-Bissau
+Added: 2005-10-16
+%%
+Type: region
+Subtag: GY
+Description: Guyana
+Added: 2005-10-16
+%%
+Type: region
+Subtag: HK
+Description: Hong Kong
+Added: 2005-10-16
+%%
+Type: region
+Subtag: HM
+Description: Heard Island and McDonald Islands
+Added: 2005-10-16
+%%
+Type: region
+Subtag: HN
+Description: Honduras
+Added: 2005-10-16
+%%
+Type: region
+Subtag: HR
+Description: Croatia
+Added: 2005-10-16
+%%
+Type: region
+Subtag: HT
+Description: Haiti
+Added: 2005-10-16
+%%
+Type: region
+Subtag: HU
+Description: Hungary
+Added: 2005-10-16
+%%
+Type: region
+Subtag: IC
+Description: Canary Islands
+Added: 2009-07-29
+%%
+Type: region
+Subtag: ID
+Description: Indonesia
+Added: 2005-10-16
+%%
+Type: region
+Subtag: IE
+Description: Ireland
+Added: 2005-10-16
+%%
+Type: region
+Subtag: IL
+Description: Israel
+Added: 2005-10-16
+%%
+Type: region
+Subtag: IM
+Description: Isle of Man
+Added: 2006-03-29
+%%
+Type: region
+Subtag: IN
+Description: India
+Added: 2005-10-16
+%%
+Type: region
+Subtag: IO
+Description: British Indian Ocean Territory
+Added: 2005-10-16
+%%
+Type: region
+Subtag: IQ
+Description: Iraq
+Added: 2005-10-16
+%%
+Type: region
+Subtag: IR
+Description: Islamic Republic of Iran
+Added: 2005-10-16
+%%
+Type: region
+Subtag: IS
+Description: Iceland
+Added: 2005-10-16
+%%
+Type: region
+Subtag: IT
+Description: Italy
+Added: 2005-10-16
+%%
+Type: region
+Subtag: JE
+Description: Jersey
+Added: 2006-03-29
+%%
+Type: region
+Subtag: JM
+Description: Jamaica
+Added: 2005-10-16
+%%
+Type: region
+Subtag: JO
+Description: Jordan
+Added: 2005-10-16
+%%
+Type: region
+Subtag: JP
+Description: Japan
+Added: 2005-10-16
+%%
+Type: region
+Subtag: KE
+Description: Kenya
+Added: 2005-10-16
+%%
+Type: region
+Subtag: KG
+Description: Kyrgyzstan
+Added: 2005-10-16
+%%
+Type: region
+Subtag: KH
+Description: Cambodia
+Added: 2005-10-16
+%%
+Type: region
+Subtag: KI
+Description: Kiribati
+Added: 2005-10-16
+%%
+Type: region
+Subtag: KM
+Description: Comoros
+Added: 2005-10-16
+%%
+Type: region
+Subtag: KN
+Description: Saint Kitts and Nevis
+Added: 2005-10-16
+%%
+Type: region
+Subtag: KP
+Description: Democratic People's Republic of Korea
+Added: 2005-10-16
+%%
+Type: region
+Subtag: KR
+Description: Republic of Korea
+Added: 2005-10-16
+%%
+Type: region
+Subtag: KW
+Description: Kuwait
+Added: 2005-10-16
+%%
+Type: region
+Subtag: KY
+Description: Cayman Islands
+Added: 2005-10-16
+%%
+Type: region
+Subtag: KZ
+Description: Kazakhstan
+Added: 2005-10-16
+%%
+Type: region
+Subtag: LA
+Description: Lao People's Democratic Republic
+Added: 2005-10-16
+%%
+Type: region
+Subtag: LB
+Description: Lebanon
+Added: 2005-10-16
+%%
+Type: region
+Subtag: LC
+Description: Saint Lucia
+Added: 2005-10-16
+%%
+Type: region
+Subtag: LI
+Description: Liechtenstein
+Added: 2005-10-16
+%%
+Type: region
+Subtag: LK
+Description: Sri Lanka
+Added: 2005-10-16
+%%
+Type: region
+Subtag: LR
+Description: Liberia
+Added: 2005-10-16
+%%
+Type: region
+Subtag: LS
+Description: Lesotho
+Added: 2005-10-16
+%%
+Type: region
+Subtag: LT
+Description: Lithuania
+Added: 2005-10-16
+%%
+Type: region
+Subtag: LU
+Description: Luxembourg
+Added: 2005-10-16
+%%
+Type: region
+Subtag: LV
+Description: Latvia
+Added: 2005-10-16
+%%
+Type: region
+Subtag: LY
+Description: Libya
+Added: 2005-10-16
+%%
+Type: region
+Subtag: MA
+Description: Morocco
+Added: 2005-10-16
+%%
+Type: region
+Subtag: MC
+Description: Monaco
+Added: 2005-10-16
+%%
+Type: region
+Subtag: MD
+Description: Moldova
+Added: 2005-10-16
+%%
+Type: region
+Subtag: ME
+Description: Montenegro
+Added: 2006-10-05
+%%
+Type: region
+Subtag: MF
+Description: Saint Martin (French part)
+Added: 2007-11-02
+%%
+Type: region
+Subtag: MG
+Description: Madagascar
+Added: 2005-10-16
+%%
+Type: region
+Subtag: MH
+Description: Marshall Islands
+Added: 2005-10-16
+%%
+Type: region
+Subtag: MK
+Description: The Former Yugoslav Republic of Macedonia
+Added: 2005-10-16
+%%
+Type: region
+Subtag: ML
+Description: Mali
+Added: 2005-10-16
+%%
+Type: region
+Subtag: MM
+Description: Myanmar
+Added: 2005-10-16
+%%
+Type: region
+Subtag: MN
+Description: Mongolia
+Added: 2005-10-16
+%%
+Type: region
+Subtag: MO
+Description: Macao
+Added: 2005-10-16
+%%
+Type: region
+Subtag: MP
+Description: Northern Mariana Islands
+Added: 2005-10-16
+%%
+Type: region
+Subtag: MQ
+Description: Martinique
+Added: 2005-10-16
+%%
+Type: region
+Subtag: MR
+Description: Mauritania
+Added: 2005-10-16
+%%
+Type: region
+Subtag: MS
+Description: Montserrat
+Added: 2005-10-16
+%%
+Type: region
+Subtag: MT
+Description: Malta
+Added: 2005-10-16
+%%
+Type: region
+Subtag: MU
+Description: Mauritius
+Added: 2005-10-16
+%%
+Type: region
+Subtag: MV
+Description: Maldives
+Added: 2005-10-16
+%%
+Type: region
+Subtag: MW
+Description: Malawi
+Added: 2005-10-16
+%%
+Type: region
+Subtag: MX
+Description: Mexico
+Added: 2005-10-16
+%%
+Type: region
+Subtag: MY
+Description: Malaysia
+Added: 2005-10-16
+%%
+Type: region
+Subtag: MZ
+Description: Mozambique
+Added: 2005-10-16
+%%
+Type: region
+Subtag: NA
+Description: Namibia
+Added: 2005-10-16
+%%
+Type: region
+Subtag: NC
+Description: New Caledonia
+Added: 2005-10-16
+%%
+Type: region
+Subtag: NE
+Description: Niger
+Added: 2005-10-16
+%%
+Type: region
+Subtag: NF
+Description: Norfolk Island
+Added: 2005-10-16
+%%
+Type: region
+Subtag: NG
+Description: Nigeria
+Added: 2005-10-16
+%%
+Type: region
+Subtag: NI
+Description: Nicaragua
+Added: 2005-10-16
+%%
+Type: region
+Subtag: NL
+Description: Netherlands
+Added: 2005-10-16
+%%
+Type: region
+Subtag: NO
+Description: Norway
+Added: 2005-10-16
+%%
+Type: region
+Subtag: NP
+Description: Nepal
+Added: 2005-10-16
+%%
+Type: region
+Subtag: NR
+Description: Nauru
+Added: 2005-10-16
+%%
+Type: region
+Subtag: NT
+Description: Neutral Zone
+Added: 2005-10-16
+Deprecated: 1993-07-12
+%%
+Type: region
+Subtag: NU
+Description: Niue
+Added: 2005-10-16
+%%
+Type: region
+Subtag: NZ
+Description: New Zealand
+Added: 2005-10-16
+%%
+Type: region
+Subtag: OM
+Description: Oman
+Added: 2005-10-16
+%%
+Type: region
+Subtag: PA
+Description: Panama
+Added: 2005-10-16
+%%
+Type: region
+Subtag: PE
+Description: Peru
+Added: 2005-10-16
+%%
+Type: region
+Subtag: PF
+Description: French Polynesia
+Added: 2005-10-16
+%%
+Type: region
+Subtag: PG
+Description: Papua New Guinea
+Added: 2005-10-16
+%%
+Type: region
+Subtag: PH
+Description: Philippines
+Added: 2005-10-16
+%%
+Type: region
+Subtag: PK
+Description: Pakistan
+Added: 2005-10-16
+%%
+Type: region
+Subtag: PL
+Description: Poland
+Added: 2005-10-16
+%%
+Type: region
+Subtag: PM
+Description: Saint Pierre and Miquelon
+Added: 2005-10-16
+%%
+Type: region
+Subtag: PN
+Description: Pitcairn
+Added: 2005-10-16
+%%
+Type: region
+Subtag: PR
+Description: Puerto Rico
+Added: 2005-10-16
+%%
+Type: region
+Subtag: PS
+Description: Occupied Palestinian Territory
+Added: 2005-10-16
+%%
+Type: region
+Subtag: PT
+Description: Portugal
+Added: 2005-10-16
+%%
+Type: region
+Subtag: PW
+Description: Palau
+Added: 2005-10-16
+%%
+Type: region
+Subtag: PY
+Description: Paraguay
+Added: 2005-10-16
+%%
+Type: region
+Subtag: QA
+Description: Qatar
+Added: 2005-10-16
+%%
+Type: region
+Subtag: QM..QZ
+Description: Private use
+Added: 2005-10-16
+%%
+Type: region
+Subtag: RE
+Description: Réunion
+Added: 2005-10-16
+%%
+Type: region
+Subtag: RO
+Description: Romania
+Added: 2005-10-16
+%%
+Type: region
+Subtag: RS
+Description: Serbia
+Added: 2006-10-05
+%%
+Type: region
+Subtag: RU
+Description: Russian Federation
+Added: 2005-10-16
+%%
+Type: region
+Subtag: RW
+Description: Rwanda
+Added: 2005-10-16
+%%
+Type: region
+Subtag: SA
+Description: Saudi Arabia
+Added: 2005-10-16
+%%
+Type: region
+Subtag: SB
+Description: Solomon Islands
+Added: 2005-10-16
+%%
+Type: region
+Subtag: SC
+Description: Seychelles
+Added: 2005-10-16
+%%
+Type: region
+Subtag: SD
+Description: Sudan
+Added: 2005-10-16
+%%
+Type: region
+Subtag: SE
+Description: Sweden
+Added: 2005-10-16
+%%
+Type: region
+Subtag: SG
+Description: Singapore
+Added: 2005-10-16
+%%
+Type: region
+Subtag: SH
+Description: Saint Helena, Ascension and Tristan da Cunha
+Added: 2005-10-16
+%%
+Type: region
+Subtag: SI
+Description: Slovenia
+Added: 2005-10-16
+%%
+Type: region
+Subtag: SJ
+Description: Svalbard and Jan Mayen
+Added: 2005-10-16
+%%
+Type: region
+Subtag: SK
+Description: Slovakia
+Added: 2005-10-16
+%%
+Type: region
+Subtag: SL
+Description: Sierra Leone
+Added: 2005-10-16
+%%
+Type: region
+Subtag: SM
+Description: San Marino
+Added: 2005-10-16
+%%
+Type: region
+Subtag: SN
+Description: Senegal
+Added: 2005-10-16
+%%
+Type: region
+Subtag: SO
+Description: Somalia
+Added: 2005-10-16
+%%
+Type: region
+Subtag: SR
+Description: Suriname
+Added: 2005-10-16
+%%
+Type: region
+Subtag: SS
+Description: South Sudan
+Added: 2011-08-25
+%%
+Type: region
+Subtag: ST
+Description: Sao Tome and Principe
+Added: 2005-10-16
+%%
+Type: region
+Subtag: SU
+Description: Union of Soviet Socialist Republics
+Added: 2005-10-16
+Deprecated: 1992-08-30
+%%
+Type: region
+Subtag: SV
+Description: El Salvador
+Added: 2005-10-16
+%%
+Type: region
+Subtag: SX
+Description: Sint Maarten (Dutch part)
+Added: 2011-01-07
+%%
+Type: region
+Subtag: SY
+Description: Syrian Arab Republic
+Added: 2005-10-16
+%%
+Type: region
+Subtag: SZ
+Description: Swaziland
+Added: 2005-10-16
+%%
+Type: region
+Subtag: TA
+Description: Tristan da Cunha
+Added: 2009-07-29
+%%
+Type: region
+Subtag: TC
+Description: Turks and Caicos Islands
+Added: 2005-10-16
+%%
+Type: region
+Subtag: TD
+Description: Chad
+Added: 2005-10-16
+%%
+Type: region
+Subtag: TF
+Description: French Southern Territories
+Added: 2005-10-16
+%%
+Type: region
+Subtag: TG
+Description: Togo
+Added: 2005-10-16
+%%
+Type: region
+Subtag: TH
+Description: Thailand
+Added: 2005-10-16
+%%
+Type: region
+Subtag: TJ
+Description: Tajikistan
+Added: 2005-10-16
+%%
+Type: region
+Subtag: TK
+Description: Tokelau
+Added: 2005-10-16
+%%
+Type: region
+Subtag: TL
+Description: Timor-Leste
+Added: 2005-10-16
+%%
+Type: region
+Subtag: TM
+Description: Turkmenistan
+Added: 2005-10-16
+%%
+Type: region
+Subtag: TN
+Description: Tunisia
+Added: 2005-10-16
+%%
+Type: region
+Subtag: TO
+Description: Tonga
+Added: 2005-10-16
+%%
+Type: region
+Subtag: TP
+Description: East Timor
+Added: 2005-10-16
+Deprecated: 2002-05-20
+Preferred-Value: TL
+%%
+Type: region
+Subtag: TR
+Description: Turkey
+Added: 2005-10-16
+%%
+Type: region
+Subtag: TT
+Description: Trinidad and Tobago
+Added: 2005-10-16
+%%
+Type: region
+Subtag: TV
+Description: Tuvalu
+Added: 2005-10-16
+%%
+Type: region
+Subtag: TW
+Description: Taiwan, Province of China
+Added: 2005-10-16
+%%
+Type: region
+Subtag: TZ
+Description: United Republic of Tanzania
+Added: 2005-10-16
+%%
+Type: region
+Subtag: UA
+Description: Ukraine
+Added: 2005-10-16
+%%
+Type: region
+Subtag: UG
+Description: Uganda
+Added: 2005-10-16
+%%
+Type: region
+Subtag: UM
+Description: United States Minor Outlying Islands
+Added: 2005-10-16
+%%
+Type: region
+Subtag: US
+Description: United States
+Added: 2005-10-16
+%%
+Type: region
+Subtag: UY
+Description: Uruguay
+Added: 2005-10-16
+%%
+Type: region
+Subtag: UZ
+Description: Uzbekistan
+Added: 2005-10-16
+%%
+Type: region
+Subtag: VA
+Description: Holy See (Vatican City State)
+Added: 2005-10-16
+%%
+Type: region
+Subtag: VC
+Description: Saint Vincent and the Grenadines
+Added: 2005-10-16
+%%
+Type: region
+Subtag: VE
+Description: Venezuela
+Added: 2005-10-16
+%%
+Type: region
+Subtag: VG
+Description: British Virgin Islands
+Added: 2005-10-16
+%%
+Type: region
+Subtag: VI
+Description: U.S. Virgin Islands
+Added: 2005-10-16
+%%
+Type: region
+Subtag: VN
+Description: Viet Nam
+Added: 2005-10-16
+%%
+Type: region
+Subtag: VU
+Description: Vanuatu
+Added: 2005-10-16
+%%
+Type: region
+Subtag: WF
+Description: Wallis and Futuna
+Added: 2005-10-16
+%%
+Type: region
+Subtag: WS
+Description: Samoa
+Added: 2005-10-16
+%%
+Type: region
+Subtag: XA..XZ
+Description: Private use
+Added: 2005-10-16
+%%
+Type: region
+Subtag: YD
+Description: Democratic Yemen
+Added: 2005-10-16
+Deprecated: 1990-08-14
+Preferred-Value: YE
+%%
+Type: region
+Subtag: YE
+Description: Yemen
+Added: 2005-10-16
+%%
+Type: region
+Subtag: YT
+Description: Mayotte
+Added: 2005-10-16
+%%
+Type: region
+Subtag: YU
+Description: Yugoslavia
+Added: 2005-10-16
+Deprecated: 2003-07-23
+Comments: see BA, HR, ME, MK, RS, or SI
+%%
+Type: region
+Subtag: ZA
+Description: South Africa
+Added: 2005-10-16
+%%
+Type: region
+Subtag: ZM
+Description: Zambia
+Added: 2005-10-16
+%%
+Type: region
+Subtag: ZR
+Description: Zaire
+Added: 2005-10-16
+Deprecated: 1997-07-14
+Preferred-Value: CD
+%%
+Type: region
+Subtag: ZW
+Description: Zimbabwe
+Added: 2005-10-16
+%%
+Type: region
+Subtag: ZZ
+Description: Private use
+Added: 2005-10-16
+%%
+Type: region
+Subtag: 001
+Description: World
+Added: 2005-10-16
+%%
+Type: region
+Subtag: 002
+Description: Africa
+Added: 2005-10-16
+%%
+Type: region
+Subtag: 003
+Description: North America
+Added: 2010-08-16
+Comments: Includes Northern America (021), Caribbean (029), and Central
+  America (013); see also 021
+%%
+Type: region
+Subtag: 005
+Description: South America
+Added: 2005-10-16
+%%
+Type: region
+Subtag: 009
+Description: Oceania
+Added: 2005-10-16
+%%
+Type: region
+Subtag: 011
+Description: Western Africa
+Added: 2005-10-16
+%%
+Type: region
+Subtag: 013
+Description: Central America
+Added: 2005-10-16
+%%
+Type: region
+Subtag: 014
+Description: Eastern Africa
+Added: 2005-10-16
+%%
+Type: region
+Subtag: 015
+Description: Northern Africa
+Added: 2005-10-16
+%%
+Type: region
+Subtag: 017
+Description: Middle Africa
+Added: 2005-10-16
+%%
+Type: region
+Subtag: 018
+Description: Southern Africa
+Added: 2005-10-16
+%%
+Type: region
+Subtag: 019
+Description: Americas
+Added: 2005-10-16
+%%
+Type: region
+Subtag: 021
+Description: Northern America
+Added: 2005-10-16
+Comments: Does not include Caribbean (029) or Central America (013); see
+  also 003
+%%
+Type: region
+Subtag: 029
+Description: Caribbean
+Added: 2005-10-16
+%%
+Type: region
+Subtag: 030
+Description: Eastern Asia
+Added: 2005-10-16
+%%
+Type: region
+Subtag: 034
+Description: Southern Asia
+Added: 2005-10-16
+%%
+Type: region
+Subtag: 035
+Description: South-Eastern Asia
+Added: 2005-10-16
+%%
+Type: region
+Subtag: 039
+Description: Southern Europe
+Added: 2005-10-16
+%%
+Type: region
+Subtag: 053
+Description: Australia and New Zealand
+Added: 2005-10-16
+%%
+Type: region
+Subtag: 054
+Description: Melanesia
+Added: 2005-10-16
+%%
+Type: region
+Subtag: 057
+Description: Micronesia
+Added: 2005-10-16
+%%
+Type: region
+Subtag: 061
+Description: Polynesia
+Added: 2005-10-16
+%%
+Type: region
+Subtag: 142
+Description: Asia
+Added: 2005-10-16
+%%
+Type: region
+Subtag: 143
+Description: Central Asia
+Added: 2005-10-16
+%%
+Type: region
+Subtag: 145
+Description: Western Asia
+Added: 2005-10-16
+%%
+Type: region
+Subtag: 150
+Description: Europe
+Added: 2005-10-16
+%%
+Type: region
+Subtag: 151
+Description: Eastern Europe
+Added: 2005-10-16
+%%
+Type: region
+Subtag: 154
+Description: Northern Europe
+Added: 2005-10-16
+%%
+Type: region
+Subtag: 155
+Description: Western Europe
+Added: 2005-10-16
+%%
+Type: region
+Subtag: 419
+Description: Latin America and the Caribbean
+Added: 2005-10-16
+%%
+Type: variant
+Subtag: 1606nict
+Description: Late Middle French (to 1606)
+Added: 2007-03-20
+Prefix: frm
+Comments: 16th century French as in Jean Nicot, "Thresor de la langue
+  francoyse", 1606, but also including some French similar to that of
+  Rabelais
+%%
+Type: variant
+Subtag: 1694acad
+Description: Early Modern French
+Added: 2007-03-20
+Prefix: fr
+Comments: 17th century French, as catalogued in the "Dictionnaire de
+  l'académie françoise", 4eme ed. 1694; frequently includes
+  elements of Middle French, as this is a transitional period
+%%
+Type: variant
+Subtag: 1901
+Description: Traditional German orthography
+Added: 2005-10-16
+Prefix: de
+%%
+Type: variant
+Subtag: 1959acad
+Description: "Academic" ("governmental") variant of Belarusian as
+  codified in 1959
+Added: 2008-09-30
+Prefix: be
+%%
+Type: variant
+Subtag: 1994
+Description: Standardized Resian orthography
+Added: 2007-07-28
+Prefix: sl-rozaj
+Prefix: sl-rozaj-biske
+Prefix: sl-rozaj-njiva
+Prefix: sl-rozaj-osojs
+Prefix: sl-rozaj-solba
+Comments: For standardized Resian an orthography was published in 1994.
+%%
+Type: variant
+Subtag: 1996
+Description: German orthography of 1996
+Added: 2005-10-16
+Prefix: de
+%%
+Type: variant
+Subtag: alalc97
+Description: ALA-LC Romanization, 1997 edition
+Added: 2009-12-09
+Comments: Romanizations recommended by the American Library Association
+  and the Library of Congress, in "ALA-LC Romanization Tables:
+  Transliteration Schemes for Non-Roman Scripts" (1997), ISBN
+  978-0-8444-0940-5.
+%%
+Type: variant
+Subtag: aluku
+Description: Aluku dialect
+Description: Boni dialect
+Added: 2009-09-05
+Prefix: djk
+Comments: Aluku dialect of the "Busi Nenge Tongo" English-based Creole
+  continuum in Eastern Suriname and Western French Guiana
+%%
+Type: variant
+Subtag: arevela
+Description: Eastern Armenian
+Added: 2006-09-18
+Prefix: hy
+%%
+Type: variant
+Subtag: arevmda
+Description: Western Armenian
+Added: 2006-09-18
+Prefix: hy
+%%
+Type: variant
+Subtag: baku1926
+Description: Unified Turkic Latin Alphabet (Historical)
+Added: 2007-04-18
+Prefix: az
+Prefix: ba
+Prefix: crh
+Prefix: kk
+Prefix: krc
+Prefix: ky
+Prefix: sah
+Prefix: tk
+Prefix: tt
+Prefix: uz
+Comments: Denotes alphabet used in Turkic republics/regions of the
+  former USSR in late 1920s, and throughout 1930s, which aspired to
+  represent equivalent phonemes in a unified fashion. Also known as: New
+  Turkic Alphabet; Birlәşdirilmiş Jeni Tyrk
+  Әlifbasь (Birlesdirilmis Jeni Tyrk Elifbasi);
+  Jaŋalif (Janalif).
+%%
+Type: variant
+Subtag: bauddha
+Description: Buddhist Hybrid Sanskrit
+Added: 2010-07-28
+Prefix: sa
+%%
+Type: variant
+Subtag: biscayan
+Description: Biscayan dialect of Basque
+Added: 2010-04-13
+Prefix: eu
+%%
+Type: variant
+Subtag: biske
+Description: The San Giorgio dialect of Resian
+Description: The Bila dialect of Resian
+Added: 2007-07-05
+Prefix: sl-rozaj
+Comments: The dialect of San Giorgio/Bila is one of the four major local
+  dialects of Resian
+%%
+Type: variant
+Subtag: bohoric
+Description: Slovene in Bohorič alphabet
+Added: 2012-06-27
+Prefix: sl
+Comments: The subtag represents the alphabet codified by Adam Bohorič in
+  1584 and used from the first printed Slovene book and up to the mid-
+  19th century.
+%%
+Type: variant
+Subtag: boont
+Description: Boontling
+Added: 2006-09-18
+Prefix: en
+Comments: Jargon embedded in American English
+%%
+Type: variant
+Subtag: dajnko
+Description: Slovene in Dajnko alphabet
+Added: 2012-06-27
+Prefix: sl
+Comments: The subtag represents the alphabet codified by Peter Dajnko
+  and used from 1824 to 1839 mostly in Styria (in what is now Eastern
+  Slovenia).
+%%
+Type: variant
+Subtag: emodeng
+Description: Early Modern English (1500-1700)
+Added: 2012-02-05
+Prefix: en
+%%
+Type: variant
+Subtag: fonipa
+Description: International Phonetic Alphabet
+Added: 2006-12-11
+%%
+Type: variant
+Subtag: fonupa
+Description: Uralic Phonetic Alphabet
+Added: 2006-12-11
+%%
+Type: variant
+Subtag: fonxsamp
+Description: X-SAMPA transcription
+Added: 2010-10-23
+Comments: Indicates that the content is transcribed according to X-SAMPA
+%%
+Type: variant
+Subtag: hepburn
+Description: Hepburn romanization
+Added: 2009-10-01
+Prefix: ja-Latn
+%%
+Type: variant
+Subtag: heploc
+Description: Hepburn romanization, Library of Congress method
+Added: 2009-10-01
+Deprecated: 2010-02-07
+Preferred-Value: alalc97
+Prefix: ja-Latn-hepburn
+Comments: Preferred tag is ja-Latn-alalc97
+%%
+Type: variant
+Subtag: hognorsk
+Description: Norwegian in Høgnorsk (High Norwegian) orthography
+Added: 2010-01-02
+Prefix: nn
+Comments: Norwegian following Ivar Aasen's orthographical principles,
+  including modern usage.
+%%
+Type: variant
+Subtag: itihasa
+Description: Epic Sanskrit
+Added: 2010-07-28
+Prefix: sa
+%%
+Type: variant
+Subtag: jauer
+Description: Jauer dialect of Romansh
+Added: 2010-06-29
+Prefix: rm
+Comments: The spoken dialect of the Val Müstair, which has no written
+  standard.
+%%
+Type: variant
+Subtag: jyutping
+Description: Jyutping Cantonese Romanization
+Added: 2010-10-23
+Prefix: yue
+Comments: Jyutping romanization of Cantonese
+%%
+Type: variant
+Subtag: kkcor
+Description: Common Cornish orthography of Revived Cornish
+Added: 2008-10-14
+Prefix: kw
+%%
+Type: variant
+Subtag: kscor
+Description: Standard Cornish orthography of Revived Cornish
+Description: Kernowek Standard
+Added: 2012-06-27
+Prefix: kw
+%%
+Type: variant
+Subtag: laukika
+Description: Classical Sanskrit
+Added: 2010-07-28
+Prefix: sa
+%%
+Type: variant
+Subtag: lipaw
+Description: The Lipovaz dialect of Resian
+Description: The Lipovec dialect of Resian
+Added: 2007-08-11
+Prefix: sl-rozaj
+Comments: The dialect of Lipovaz/Lipovec is one of the minor local
+  dialects of Resian
+%%
+Type: variant
+Subtag: luna1918
+Description: Post-1917 Russian orthography
+Added: 2010-10-10
+Prefix: ru
+Comments: Russian orthography as established by the 1917/1918
+  orthographic reforms
+%%
+Type: variant
+Subtag: metelko
+Description: Slovene in Metelko alphabet
+Added: 2012-06-27
+Prefix: sl
+Comments: The subtag represents the alphabet codified by Franc Serafin
+  Metelko and used from 1825 to 1833.
+%%
+Type: variant
+Subtag: monoton
+Description: Monotonic Greek
+Added: 2006-12-11
+Prefix: el
+%%
+Type: variant
+Subtag: ndyuka
+Description: Ndyuka dialect
+Description: Aukan dialect
+Added: 2009-09-05
+Prefix: djk
+Comments: Ndyuka dialect of the "Busi Nenge Tongo" English-based
+  Creole continuum in Eastern Suriname and Western French Guiana
+%%
+Type: variant
+Subtag: nedis
+Description: Natisone dialect
+Description: Nadiza dialect
+Added: 2005-10-16
+Prefix: sl
+%%
+Type: variant
+Subtag: njiva
+Description: The Gniva dialect of Resian
+Description: The Njiva dialect of Resian
+Added: 2007-07-05
+Prefix: sl-rozaj
+Comments: The dialect of Gniva/Njiva is one of the four major local
+  dialects of Resian
+%%
+Type: variant
+Subtag: nulik
+Description: Volapük nulik
+Description: Volapük perevidöl
+Description: Volapük nulädik
+Description: de Jong's Volapük
+Description: New Volapük
+Description: Revised Volapük
+Description: Modern Volapük
+Added: 2012-01-28
+Prefix: vo
+%%
+Type: variant
+Subtag: osojs
+Description: The Oseacco dialect of Resian
+Description: The Osojane dialect of Resian
+Added: 2007-07-05
+Prefix: sl-rozaj
+Comments: The dialect of Oseacco/Osojane is one of the four major local
+  dialects of Resian
+%%
+Type: variant
+Subtag: pamaka
+Description: Pamaka dialect
+Added: 2009-09-05
+Prefix: djk
+Comments: Pamaka dialect of the "Busi Nenge Tongo" English-based
+  Creole continuum in Eastern Suriname and Western French Guiana
+%%
+Type: variant
+Subtag: petr1708
+Description: Petrine orthography
+Added: 2010-10-10
+Prefix: ru
+Comments: Russian orthography from the Petrine orthographic reforms of
+  1708 to the 1917 orthographic reform
+%%
+Type: variant
+Subtag: pinyin
+Description: Pinyin romanization
+Added: 2008-10-14
+Prefix: zh-Latn
+Prefix: bo-Latn
+%%
+Type: variant
+Subtag: polyton
+Description: Polytonic Greek
+Added: 2006-12-11
+Prefix: el
+%%
+Type: variant
+Subtag: puter
+Description: Puter idiom of Romansh
+Added: 2010-06-29
+Prefix: rm
+Comments: Puter is one of the five traditional written standards or
+  "idioms" of the Romansh language.
+%%
+Type: variant
+Subtag: rigik
+Description: Volapük rigik
+Description: Schleyer's Volapük
+Description: Original Volapük
+Description: Classic Volapük
+Added: 2012-01-28
+Prefix: vo
+%%
+Type: variant
+Subtag: rozaj
+Description: Resian
+Description: Resianic
+Description: Rezijan
+Added: 2005-10-16
+Prefix: sl
+%%
+Type: variant
+Subtag: rumgr
+Description: Rumantsch Grischun
+Added: 2010-06-29
+Prefix: rm
+Comments: Supraregional Romansh written standard
+%%
+Type: variant
+Subtag: scotland
+Description: Scottish Standard English
+Added: 2007-08-31
+Prefix: en
+%%
+Type: variant
+Subtag: scouse
+Description: Scouse
+Added: 2006-09-18
+Prefix: en
+Comments: English Liverpudlian dialect known as 'Scouse'
+%%
+Type: variant
+Subtag: solba
+Description: The Stolvizza dialect of Resian
+Description: The Solbica dialect of Resian
+Added: 2007-07-05
+Prefix: sl-rozaj
+Comments: The dialect of Stolvizza/Solbica is one of the four major
+  local dialects of Resian
+%%
+Type: variant
+Subtag: surmiran
+Description: Surmiran idiom of Romansh
+Added: 2010-06-29
+Prefix: rm
+Comments: Surmiran is one of the five traditional written standards or
+  "idioms" of the Romansh language.
+%%
+Type: variant
+Subtag: sursilv
+Description: Sursilvan idiom of Romansh
+Added: 2010-06-29
+Prefix: rm
+Comments: Sursilvan is one of the five traditional written standards or
+  "idioms" of the Romansh language.
+%%
+Type: variant
+Subtag: sutsilv
+Description: Sutsilvan idiom of Romansh
+Added: 2010-06-29
+Prefix: rm
+Comments: Sutsilvan is one of the five traditional written standards or
+  "idioms" of the Romansh language.
+%%
+Type: variant
+Subtag: tarask
+Description: Belarusian in Taraskievica orthography
+Added: 2007-04-27
+Prefix: be
+Comments: The subtag represents Branislau Taraskievic's Belarusian
+  orthography as published in "Bielaruski klasycny pravapis" by Juras
+  Buslakou, Vincuk Viacorka, Zmicier Sanko, and Zmicier Sauka (Vilnia-
+  Miensk 2005).
+%%
+Type: variant
+Subtag: uccor
+Description: Unified Cornish orthography of Revived Cornish
+Added: 2008-10-14
+Prefix: kw
+%%
+Type: variant
+Subtag: ucrcor
+Description: Unified Cornish Revised orthography of Revived Cornish
+Added: 2008-10-14
+Prefix: kw
+%%
+Type: variant
+Subtag: ulster
+Description: Ulster dialect of Scots
+Added: 2010-04-10
+Prefix: sco
+%%
+Type: variant
+Subtag: vaidika
+Description: Vedic Sanskrit
+Added: 2010-07-28
+Prefix: sa
+Comments: The most ancient dialect of Sanskrit used in verse and prose
+  composed until about the 4th century B.C.E.
+%%
+Type: variant
+Subtag: valencia
+Description: Valencian
+Added: 2007-03-06
+Prefix: ca
+Comments: Variety spoken in the "Comunidad Valenciana" region of Spain,
+  where it is co-official with Spanish.
+%%
+Type: variant
+Subtag: vallader
+Description: Vallader idiom of Romansh
+Added: 2010-06-29
+Prefix: rm
+Comments: Vallader is one of the five traditional written standards or
+  "idioms" of the Romansh language.
+%%
+Type: variant
+Subtag: wadegile
+Description: Wade-Giles romanization
+Added: 2008-10-03
+Prefix: zh-Latn
+%%
+Type: grandfathered
+Tag: art-lojban
+Description: Lojban
+Added: 2001-11-11
+Deprecated: 2003-09-02
+Preferred-Value: jbo
+%%
+Type: grandfathered
+Tag: cel-gaulish
+Description: Gaulish
+Added: 2001-05-25
+%%
+Type: grandfathered
+Tag: en-GB-oed
+Description: English, Oxford English Dictionary spelling
+Added: 2003-07-09
+%%
+Type: grandfathered
+Tag: i-ami
+Description: Amis
+Added: 1999-05-25
+Deprecated: 2009-07-29
+Preferred-Value: ami
+%%
+Type: grandfathered
+Tag: i-bnn
+Description: Bunun
+Added: 1999-05-25
+Deprecated: 2009-07-29
+Preferred-Value: bnn
+%%
+Type: grandfathered
+Tag: i-default
+Description: Default Language
+Added: 1998-03-10
+%%
+Type: grandfathered
+Tag: i-enochian
+Description: Enochian
+Added: 2002-07-03
+%%
+Type: grandfathered
+Tag: i-hak
+Description: Hakka
+Added: 1999-01-31
+Deprecated: 2000-01-10
+Preferred-Value: hak
+%%
+Type: grandfathered
+Tag: i-klingon
+Description: Klingon
+Added: 1999-05-26
+Deprecated: 2004-02-24
+Preferred-Value: tlh
+%%
+Type: grandfathered
+Tag: i-lux
+Description: Luxembourgish
+Added: 1997-09-19
+Deprecated: 1998-09-09
+Preferred-Value: lb
+%%
+Type: grandfathered
+Tag: i-mingo
+Description: Mingo
+Added: 1997-09-19
+%%
+Type: grandfathered
+Tag: i-navajo
+Description: Navajo
+Added: 1997-09-19
+Deprecated: 2000-02-18
+Preferred-Value: nv
+%%
+Type: grandfathered
+Tag: i-pwn
+Description: Paiwan
+Added: 1999-05-25
+Deprecated: 2009-07-29
+Preferred-Value: pwn
+%%
+Type: grandfathered
+Tag: i-tao
+Description: Tao
+Added: 1999-05-25
+Deprecated: 2009-07-29
+Preferred-Value: tao
+%%
+Type: grandfathered
+Tag: i-tay
+Description: Tayal
+Added: 1999-05-25
+Deprecated: 2009-07-29
+Preferred-Value: tay
+%%
+Type: grandfathered
+Tag: i-tsu
+Description: Tsou
+Added: 1999-05-25
+Deprecated: 2009-07-29
+Preferred-Value: tsu
+%%
+Type: grandfathered
+Tag: no-bok
+Description: Norwegian Bokmal
+Added: 1995-08-23
+Deprecated: 2000-02-18
+Preferred-Value: nb
+%%
+Type: grandfathered
+Tag: no-nyn
+Description: Norwegian Nynorsk
+Added: 1995-08-23
+Deprecated: 2000-02-18
+Preferred-Value: nn
+%%
+Type: grandfathered
+Tag: sgn-BE-FR
+Description: Belgian-French Sign Language
+Added: 2001-11-11
+Deprecated: 2009-07-29
+Preferred-Value: sfb
+%%
+Type: grandfathered
+Tag: sgn-BE-NL
+Description: Belgian-Flemish Sign Language
+Added: 2001-11-11
+Deprecated: 2009-07-29
+Preferred-Value: vgt
+%%
+Type: grandfathered
+Tag: sgn-CH-DE
+Description: Swiss German Sign Language
+Added: 2001-11-11
+Deprecated: 2009-07-29
+Preferred-Value: sgg
+%%
+Type: grandfathered
+Tag: zh-guoyu
+Description: Mandarin or Standard Chinese
+Added: 1999-12-18
+Deprecated: 2005-07-15
+Preferred-Value: cmn
+%%
+Type: grandfathered
+Tag: zh-hakka
+Description: Hakka
+Added: 1999-12-18
+Deprecated: 2009-07-29
+Preferred-Value: hak
+%%
+Type: grandfathered
+Tag: zh-min
+Description: Min, Fuzhou, Hokkien, Amoy, or Taiwanese
+Added: 1999-12-18
+Deprecated: 2009-07-29
+%%
+Type: grandfathered
+Tag: zh-min-nan
+Description: Minnan, Hokkien, Amoy, Taiwanese, Southern Min, Southern
+  Fujian, Hoklo, Southern Fukien, Ho-lo
+Added: 2001-03-26
+Deprecated: 2009-07-29
+Preferred-Value: nan
+%%
+Type: grandfathered
+Tag: zh-xiang
+Description: Xiang or Hunanese
+Added: 1999-12-18
+Deprecated: 2009-07-29
+Preferred-Value: hsn
+%%
+Type: redundant
+Tag: az-Arab
+Description: Azerbaijani in Arabic script
+Added: 2003-05-30
+%%
+Type: redundant
+Tag: az-Cyrl
+Description: Azerbaijani in Cyrillic script
+Added: 2003-05-30
+%%
+Type: redundant
+Tag: az-Latn
+Description: Azerbaijani in Latin script
+Added: 2003-05-30
+%%
+Type: redundant
+Tag: be-Latn
+Description: Belarusian in Latin script
+Added: 2005-01-06
+%%
+Type: redundant
+Tag: bs-Cyrl
+Description: Bosnian in Cyrillic script
+Added: 2005-02-17
+%%
+Type: redundant
+Tag: bs-Latn
+Description: Bosnian in Latin script
+Added: 2005-02-17
+%%
+Type: redundant
+Tag: de-1901
+Description: German, traditional orthography
+Added: 2001-07-17
+%%
+Type: redundant
+Tag: de-1996
+Description: German, orthography of 1996
+Added: 2001-07-17
+%%
+Type: redundant
+Tag: de-AT-1901
+Description: German, Austrian variant, traditional orthography
+Added: 2001-07-17
+%%
+Type: redundant
+Tag: de-AT-1996
+Description: German, Austrian variant, orthography of 1996
+Added: 2001-07-17
+%%
+Type: redundant
+Tag: de-CH-1901
+Description: German, Swiss variant, traditional orthography
+Added: 2001-07-17
+%%
+Type: redundant
+Tag: de-CH-1996
+Description: German, Swiss variant, orthography of 1996
+Added: 2001-07-17
+%%
+Type: redundant
+Tag: de-DE-1901
+Description: German, German variant, traditional orthography
+Added: 2001-07-17
+%%
+Type: redundant
+Tag: de-DE-1996
+Description: German, German variant, orthography of 1996
+Added: 2001-07-17
+%%
+Type: redundant
+Tag: en-boont
+Description: Boontling
+Added: 2003-02-14
+%%
+Type: redundant
+Tag: en-scouse
+Description: Scouse
+Added: 2000-05-25
+%%
+Type: redundant
+Tag: es-419
+Description: Latin American Spanish
+Added: 2005-07-15
+%%
+Type: redundant
+Tag: iu-Cans
+Description: Inuktitut in Canadian Aboriginal Syllabic script
+Added: 2005-02-17
+%%
+Type: redundant
+Tag: iu-Latn
+Description: Inuktitut in Latin script
+Added: 2005-02-17
+%%
+Type: redundant
+Tag: mn-Cyrl
+Description: Mongolian in Cyrillic script
+Added: 2005-02-17
+%%
+Type: redundant
+Tag: mn-Mong
+Description: Mongolian in Mongolian script
+Added: 2005-02-17
+%%
+Type: redundant
+Tag: sgn-BR
+Description: Brazilian Sign Language
+Added: 2001-11-11
+Deprecated: 2009-07-29
+Preferred-Value: bzs
+%%
+Type: redundant
+Tag: sgn-CO
+Description: Colombian Sign Language
+Added: 2001-11-11
+Deprecated: 2009-07-29
+Preferred-Value: csn
+%%
+Type: redundant
+Tag: sgn-DE
+Description: German Sign Language
+Added: 2001-11-11
+Deprecated: 2009-07-29
+Preferred-Value: gsg
+%%
+Type: redundant
+Tag: sgn-DK
+Description: Danish Sign Language
+Added: 2001-11-11
+Deprecated: 2009-07-29
+Preferred-Value: dsl
+%%
+Type: redundant
+Tag: sgn-ES
+Description: Spanish Sign Language
+Added: 2001-11-11
+Deprecated: 2009-07-29
+Preferred-Value: ssp
+%%
+Type: redundant
+Tag: sgn-FR
+Description: French Sign Language
+Added: 2001-11-11
+Deprecated: 2009-07-29
+Preferred-Value: fsl
+%%
+Type: redundant
+Tag: sgn-GB
+Description: British Sign Language
+Added: 2001-03-02
+Deprecated: 2009-07-29
+Preferred-Value: bfi
+%%
+Type: redundant
+Tag: sgn-GR
+Description: Greek Sign Language
+Added: 2001-11-11
+Deprecated: 2009-07-29
+Preferred-Value: gss
+%%
+Type: redundant
+Tag: sgn-IE
+Description: Irish Sign Language
+Added: 2001-03-02
+Deprecated: 2009-07-29
+Preferred-Value: isg
+%%
+Type: redundant
+Tag: sgn-IT
+Description: Italian Sign Language
+Added: 2001-11-11
+Deprecated: 2009-07-29
+Preferred-Value: ise
+%%
+Type: redundant
+Tag: sgn-JP
+Description: Japanese Sign Language
+Added: 2001-11-11
+Deprecated: 2009-07-29
+Preferred-Value: jsl
+%%
+Type: redundant
+Tag: sgn-MX
+Description: Mexican Sign Language
+Added: 2001-11-11
+Deprecated: 2009-07-29
+Preferred-Value: mfs
+%%
+Type: redundant
+Tag: sgn-NI
+Description: Nicaraguan Sign Language
+Added: 2001-03-02
+Deprecated: 2009-07-29
+Preferred-Value: ncs
+%%
+Type: redundant
+Tag: sgn-NL
+Description: Dutch Sign Language
+Added: 2001-11-11
+Deprecated: 2009-07-29
+Preferred-Value: dse
+%%
+Type: redundant
+Tag: sgn-NO
+Description: Norwegian Sign Language
+Added: 2001-11-11
+Deprecated: 2009-07-29
+Preferred-Value: nsl
+%%
+Type: redundant
+Tag: sgn-PT
+Description: Portuguese Sign Language
+Added: 2001-11-11
+Deprecated: 2009-07-29
+Preferred-Value: psr
+%%
+Type: redundant
+Tag: sgn-SE
+Description: Swedish Sign Language
+Added: 2001-11-11
+Deprecated: 2009-07-29
+Preferred-Value: swl
+%%
+Type: redundant
+Tag: sgn-US
+Description: American Sign Language
+Added: 2001-03-02
+Deprecated: 2009-07-29
+Preferred-Value: ase
+%%
+Type: redundant
+Tag: sgn-ZA
+Description: South African Sign Language
+Added: 2001-11-11
+Deprecated: 2009-07-29
+Preferred-Value: sfs
+%%
+Type: redundant
+Tag: sl-nedis
+Description: Natisone dialect, Nadiza dialect
+Added: 2004-06-01
+%%
+Type: redundant
+Tag: sl-rozaj
+Description: Resian, Resianic, Rezijan
+Added: 2003-10-09
+%%
+Type: redundant
+Tag: sr-Cyrl
+Description: Serbian in Cyrillic script
+Added: 2003-05-30
+%%
+Type: redundant
+Tag: sr-Latn
+Description: Serbian in Latin script
+Added: 2003-05-30
+%%
+Type: redundant
+Tag: tg-Arab
+Description: Tajik in Arabic script
+Added: 2005-02-17
+%%
+Type: redundant
+Tag: tg-Cyrl
+Description: Tajik in Cyrillic script
+Added: 2005-02-17
+%%
+Type: redundant
+Tag: uz-Cyrl
+Description: Uzbek in Cyrillic script
+Added: 2003-05-30
+%%
+Type: redundant
+Tag: uz-Latn
+Description: Uzbek in Latin script
+Added: 2003-05-30
+%%
+Type: redundant
+Tag: yi-Latn
+Description: Yiddish, in Latin script
+Added: 2003-01-07
+%%
+Type: redundant
+Tag: zh-cmn
+Description: Mandarin Chinese
+Added: 2005-07-15
+Deprecated: 2009-07-29
+Preferred-Value: cmn
+%%
+Type: redundant
+Tag: zh-cmn-Hans
+Description: Mandarin Chinese (Simplified)
+Added: 2005-07-15
+Deprecated: 2009-07-29
+Preferred-Value: cmn-Hans
+%%
+Type: redundant
+Tag: zh-cmn-Hant
+Description: Mandarin Chinese (Traditional)
+Added: 2005-07-15
+Deprecated: 2009-07-29
+Preferred-Value: cmn-Hant
+%%
+Type: redundant
+Tag: zh-gan
+Description: Kan or Gan
+Added: 1999-12-18
+Deprecated: 2009-07-29
+Preferred-Value: gan
+%%
+Type: redundant
+Tag: zh-Hans
+Description: simplified Chinese
+Added: 2003-05-30
+%%
+Type: redundant
+Tag: zh-Hans-CN
+Description: PRC Mainland Chinese in simplified script
+Added: 2005-04-13
+%%
+Type: redundant
+Tag: zh-Hans-HK
+Description: Hong Kong Chinese in simplified script
+Added: 2005-04-11
+%%
+Type: redundant
+Tag: zh-Hans-MO
+Description: Macao Chinese in simplified script
+Added: 2005-04-11
+%%
+Type: redundant
+Tag: zh-Hans-SG
+Description: Singapore Chinese in simplified script
+Added: 2005-04-11
+%%
+Type: redundant
+Tag: zh-Hans-TW
+Description: Taiwan Chinese in simplified script
+Added: 2005-04-11
+%%
+Type: redundant
+Tag: zh-Hant
+Description: traditional Chinese
+Added: 2003-05-30
+%%
+Type: redundant
+Tag: zh-Hant-CN
+Description: PRC Mainland Chinese in traditional script
+Added: 2005-04-13
+%%
+Type: redundant
+Tag: zh-Hant-HK
+Description: Hong Kong Chinese in traditional script
+Added: 2005-04-11
+%%
+Type: redundant
+Tag: zh-Hant-MO
+Description: Macao Chinese in traditional script
+Added: 2005-04-11
+%%
+Type: redundant
+Tag: zh-Hant-SG
+Description: Singapore Chinese in traditional script
+Added: 2005-04-11
+%%
+Type: redundant
+Tag: zh-Hant-TW
+Description: Taiwan Chinese in traditional script
+Added: 2005-04-11
+%%
+Type: redundant
+Tag: zh-wuu
+Description: Shanghaiese or Wu
+Added: 1999-12-18
+Deprecated: 2009-07-29
+Preferred-Value: wuu
+%%
+Type: redundant
+Tag: zh-yue
+Description: Cantonese
+Added: 1999-12-18
+Deprecated: 2009-07-29
+Preferred-Value: yue
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/util/Properties/CustomProvider.java	Thu Oct 11 16:59:50 2012 -0700
@@ -0,0 +1,70 @@
+/*
+ * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+/*
+ * @test
+ * @bug 8000354
+ * @summary Test
+ * @compile -XDignore.symbol.file CustomProvider.java MyXmlPropertiesProvider.java
+ * @run main/othervm -Dsun.util.spi.XmlPropertiesProvider=MyXmlPropertiesProvider CustomProvider
+ */
+
+import java.util.*;
+import java.io.*;
+
+/**
+ * Sanity test to verify that the property sun.util.spi.XmlPropertiesProvider
+ * can be used to specify a custom provider for loading/storing properties
+ * in XML format.
+ */
+public class CustomProvider {
+
+    public static void main(String[] args) throws IOException {
+        String provider = System.getProperty("sun.util.spi.XmlPropertiesProvider");
+        assertTrue(provider != null, "sun.util.spi.XmlPropertiesProvider not set");
+
+        OutputStream out = new ByteArrayOutputStream();
+        InputStream in = new ByteArrayInputStream(new byte[100]);
+
+        Properties props;
+
+        props = new Properties();
+        props.loadFromXML(in);
+
+        props = System.getProperties();
+        props.storeToXML(out, "comment");
+        props.storeToXML(out, "comment", "UTF-8");
+
+        // check that the provider's load and store methods have been invoked
+
+        assertTrue(MyXmlPropertiesProvider.createCount() == 1,
+            "Provider should only be created once");
+        assertTrue(MyXmlPropertiesProvider.loadCount() == 1,
+            "load method expected to be called once");
+        assertTrue(MyXmlPropertiesProvider.storeCount() == 2,
+             "store method expected to be called twice");
+    }
+
+    static void assertTrue(boolean b, String msg) {
+        if (!b) throw new RuntimeException(msg);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/util/Properties/LoadAndStoreXML.java	Thu Oct 11 16:59:50 2012 -0700
@@ -0,0 +1,108 @@
+/*
+ * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8000354
+ * @summary Basic test of storeToXML and loadToXML
+ */
+
+import java.io.*;
+import java.util.*;
+import java.security.*;
+
+public class LoadAndStoreXML {
+
+    /**
+     * Simple policy implementation that grants a set of permissions to
+     * all code sources and protection domains.
+     */
+    static class SimplePolicy extends Policy {
+        private final Permissions perms;
+
+        public SimplePolicy(Permission...permissions) {
+            perms = new Permissions();
+            for (Permission permission : permissions)
+                perms.add(permission);
+        }
+
+        @Override
+        public PermissionCollection getPermissions(CodeSource cs) {
+            return perms;
+        }
+
+        @Override
+        public PermissionCollection getPermissions(ProtectionDomain pd) {
+            return perms;
+        }
+
+        @Override
+        public boolean implies(ProtectionDomain pd, Permission p) {
+            return perms.implies(p);
+        }
+    }
+
+    /**
+     * Sanity test that properties saved with Properties#storeToXML can be
+     * read with Properties#loadFromXML.
+     */
+    static void test() throws IOException {
+        Properties props = new Properties();
+        props.put("k1", "foo");
+        props.put("k2", "bar");
+
+        ByteArrayOutputStream out = new ByteArrayOutputStream();
+        props.storeToXML(out, "no comment");
+
+        Properties p = new Properties();
+        ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());
+        p.loadFromXML(in);
+
+        if (!p.equals(props)) {
+            System.err.println("stored: " + props);
+            System.err.println("loaded: " + p);
+            throw new RuntimeException("Test failed");
+        }
+    }
+
+    public static void main(String[] args) throws IOException {
+
+        // run test without security manager
+        test();
+
+        // re-run test with security manager
+        Policy orig = Policy.getPolicy();
+        Policy p = new SimplePolicy(new RuntimePermission("setSecurityManager"),
+                                    new PropertyPermission("line.separator", "read"));
+        Policy.setPolicy(p);
+        System.setSecurityManager(new SecurityManager());
+        try {
+            test();
+        } finally {
+            // turn off security manager and restore policy
+            System.setSecurityManager(null);
+            Policy.setPolicy(orig);
+        }
+
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/util/Properties/MyXmlPropertiesProvider.java	Thu Oct 11 16:59:50 2012 -0700
@@ -0,0 +1,56 @@
+/*
+ * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import java.util.*;
+import java.io.*;
+
+public class MyXmlPropertiesProvider
+    extends sun.util.spi.XmlPropertiesProvider
+{
+    private static int createCount;
+    private static int loadCount;
+    private static int storeCount;
+
+    static int createCount() { return createCount; }
+    static int loadCount() { return loadCount; }
+    static int storeCount() { return storeCount; }
+
+    public MyXmlPropertiesProvider() {
+        createCount++;
+    }
+
+    @Override
+    public void load(Properties props, InputStream in)
+        throws IOException, InvalidPropertiesFormatException
+    {
+        loadCount++;
+    }
+
+    @Override
+    public void store(Properties props, OutputStream out,
+                      String comment, String encoding)
+        throws IOException
+    {
+        storeCount++;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/util/ServiceLoader/NPE.java	Thu Oct 11 16:59:50 2012 -0700
@@ -0,0 +1,67 @@
+/*
+ * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/**
+ * @test
+ * @bug 7197642
+ * @summary test ServiceLoader.load methods for NullPointerException.
+ */
+import java.util.ServiceLoader;
+import java.util.Arrays;
+
+public final class NPE {
+    static abstract class Test {
+        String name;
+
+        Test(String name) { this.name = name; }
+
+        abstract void run();
+    }
+
+    static Test load = new Test("ServiceLoader.load(null)") {
+        void run() { ServiceLoader.load(null); }
+    };
+
+    static Test loadWithClassLoader = new Test("ServiceLoader.load(null, loader)") {
+        void run() { ServiceLoader.load(null, NPE.class.getClassLoader()); }
+    };
+
+    static Test loadInstalled = new Test("ServiceLoader.loadInstalled(null)") {
+        void run() { ServiceLoader.loadInstalled(null); }
+    };
+
+    public static void main(String[] args) throws Exception {
+        for (Test t : Arrays.asList(load, loadWithClassLoader, loadInstalled)) {
+            NullPointerException caught = null;
+            try {
+                t.run();
+            } catch (NullPointerException e) {
+                caught = e;
+            }
+            if (caught == null) {
+                throw new RuntimeException("NullPointerException expected for method invocation of " + t.name);
+            }
+        }
+    }
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/JColorChooser/Test7194184.java	Thu Oct 11 16:59:50 2012 -0700
@@ -0,0 +1,113 @@
+/*
+ * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * Portions Copyright (c) 2012 IBM Corporation
+ */
+
+/*
+ * @test
+ * @bug 7194184
+ * @summary Tests JColorChooser Swatch keyboard accessibility.
+ * @author Sean Chou
+ * @library ../regtesthelpers
+ * @build Util
+ * @run main Test7194184
+ */
+
+import java.awt.Component;
+import java.awt.AWTException;
+import java.awt.Color;
+import java.awt.Robot;
+import java.awt.Toolkit;
+import java.awt.event.KeyEvent;
+
+import javax.swing.JColorChooser;
+import javax.swing.JFrame;
+import javax.swing.SwingUtilities;
+
+import java.util.concurrent.Callable;
+import sun.awt.SunToolkit;
+
+public class Test7194184 implements Runnable {
+    private static JFrame frame;
+    private static JColorChooser colorChooser;
+    private static Color selectedColor;
+
+    public static void main(String[] args) throws Exception {
+        testKeyBoardAccess();
+    }
+
+    private static void testKeyBoardAccess() throws Exception {
+        Robot robot = new Robot();
+        SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit();
+
+        SwingUtilities.invokeLater(new Test7194184());
+        toolkit.realSync();
+
+        SwingUtilities.invokeLater(new Runnable() {
+            @Override
+            public void run() {
+                selectedColor = colorChooser.getColor();
+
+                Component recentSwatchPanel = Util.findSubComponent(colorChooser, "RecentSwatchPanel");
+                if (recentSwatchPanel == null) {
+                    throw new RuntimeException("RecentSwatchPanel not found");
+                }
+                recentSwatchPanel.requestFocusInWindow();
+            }
+        });
+
+        toolkit.realSync();
+
+        // Tab to move the focus to MainSwatch
+        Util.hitKeys(robot, KeyEvent.VK_SHIFT, KeyEvent.VK_TAB);
+
+        // Select the color on right
+        Util.hitKeys(robot, KeyEvent.VK_RIGHT);
+        Util.hitKeys(robot, KeyEvent.VK_RIGHT);
+        Util.hitKeys(robot, KeyEvent.VK_SPACE);
+        toolkit.realSync();
+
+        SwingUtilities.invokeAndWait(new Runnable() {
+            @Override
+            public void run() {
+                frame.dispose();
+                if (selectedColor == colorChooser.getColor()) {
+                    throw new RuntimeException("JColorChooser misses keyboard accessibility");
+                }
+            }
+        });
+    }
+
+    public void run() {
+        String title = getClass().getName();
+        frame = new JFrame(title);
+        colorChooser = new JColorChooser();
+
+        frame.add(colorChooser);
+        frame.pack();
+        frame.setVisible(true);
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/ToolTipManager/7123767/bug7123767.java	Thu Oct 11 16:59:50 2012 -0700
@@ -0,0 +1,220 @@
+/*
+ * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/* @test
+   @bug 7123767
+   @summary Wrong tooltip location in Multi-Monitor configurations
+   @author Vladislav Karnaukhov
+   @run main bug7123767
+*/
+
+import sun.awt.SunToolkit;
+
+import javax.swing.*;
+import javax.swing.plaf.metal.MetalLookAndFeel;
+import java.awt.*;
+import java.awt.event.MouseEvent;
+import java.lang.reflect.InvocationTargetException;
+
+public class bug7123767 extends JFrame {
+
+    private static class TestFactory extends PopupFactory {
+
+        private static TestFactory newFactory = new TestFactory();
+        private static PopupFactory oldFactory;
+
+        private TestFactory() {
+            super();
+        }
+
+        public static void install() {
+            if (oldFactory == null) {
+                oldFactory = getSharedInstance();
+                setSharedInstance(newFactory);
+            }
+        }
+
+        public static void uninstall() {
+            if (oldFactory != null) {
+                setSharedInstance(oldFactory);
+            }
+        }
+
+        // Actual test happens here
+        public Popup getPopup(Component owner, Component contents, int x, int y) {
+            GraphicsConfiguration mouseGC = testGC(MouseInfo.getPointerInfo().getLocation());
+            if (mouseGC == null) {
+                throw new RuntimeException("Can't find GraphicsConfiguration that mouse pointer belongs to");
+            }
+
+            GraphicsConfiguration tipGC = testGC(new Point(x, y));
+            if (tipGC == null) {
+                throw new RuntimeException("Can't find GraphicsConfiguration that tip belongs to");
+            }
+
+            if (!mouseGC.equals(tipGC)) {
+                throw new RuntimeException("Mouse and tip GCs are not equal");
+            }
+
+            return super.getPopup(owner, contents, x, y);
+        }
+
+        private static GraphicsConfiguration testGC(Point pt) {
+            GraphicsEnvironment environment = GraphicsEnvironment.getLocalGraphicsEnvironment();
+            GraphicsDevice[] devices = environment.getScreenDevices();
+            for (GraphicsDevice device : devices) {
+                GraphicsConfiguration[] configs = device.getConfigurations();
+                for (GraphicsConfiguration config : configs) {
+                    Rectangle rect = config.getBounds();
+                    Insets insets = Toolkit.getDefaultToolkit().getScreenInsets(config);
+                    adjustInsets(rect, insets);
+                    if (rect.contains(pt))
+                        return config;
+                }
+            }
+
+            return null;
+        }
+    }
+
+    private static final int MARGIN = 10;
+    private static bug7123767 frame;
+    private static Robot robot;
+
+    public static void main(String[] args) throws Exception {
+        UIManager.setLookAndFeel(new MetalLookAndFeel());
+        setUp();
+        testToolTip();
+        TestFactory.uninstall();
+    }
+
+    // Creates a window that is stretched across all available monitors
+    // and adds itself as ContainerListener to track tooltips drawing
+    private bug7123767() {
+        super();
+
+        ToolTipManager.sharedInstance().setInitialDelay(0);
+        setDefaultCloseOperation(DISPOSE_ON_CLOSE);
+        TestFactory.install();
+
+        JLabel label1 = new JLabel("no preferred location");
+        label1.setToolTipText("tip");
+        add(label1, BorderLayout.WEST);
+
+        JLabel label2 = new JLabel("preferred location (20000, 20000)") {
+            public Point getToolTipLocation(MouseEvent event) {
+                return new Point(20000, 20000);
+            }
+        };
+
+        label2.setToolTipText("tip");
+        add(label2, BorderLayout.EAST);
+
+        setUndecorated(true);
+        pack();
+
+        Rectangle rect = new Rectangle();
+        GraphicsEnvironment environment = GraphicsEnvironment.getLocalGraphicsEnvironment();
+        GraphicsDevice[] devices = environment.getScreenDevices();
+        for (GraphicsDevice device : devices) {
+            GraphicsConfiguration[] configs = device.getConfigurations();
+            for (GraphicsConfiguration config : configs) {
+                Insets localInsets = Toolkit.getDefaultToolkit().getScreenInsets(config);
+                Rectangle localRect = config.getBounds();
+                adjustInsets(localRect, localInsets);
+                rect.add(localRect);
+            }
+        }
+        setBounds(rect);
+    }
+
+    private static void setUp() throws InterruptedException, InvocationTargetException {
+        SwingUtilities.invokeAndWait(new Runnable() {
+            @Override
+            public void run() {
+                frame = new bug7123767();
+                frame.setVisible(true);
+            }
+        });
+    }
+
+    // Moves mouse pointer to the corners of every GraphicsConfiguration
+    private static void testToolTip() throws AWTException {
+        SunToolkit toolkit = (SunToolkit) Toolkit.getDefaultToolkit();
+        toolkit.realSync();
+
+        GraphicsEnvironment environment = GraphicsEnvironment.getLocalGraphicsEnvironment();
+        GraphicsDevice[] devices = environment.getScreenDevices();
+        for (GraphicsDevice device : devices) {
+            GraphicsConfiguration[] configs = device.getConfigurations();
+            for (GraphicsConfiguration config : configs) {
+                Rectangle rect = config.getBounds();
+                Insets insets = toolkit.getScreenInsets(config);
+                adjustInsets(rect, insets);
+
+                // Upper left
+                glide(rect.x + rect.width / 2, rect.y + rect.height / 2,
+                        rect.x + MARGIN, rect.y + MARGIN);
+                toolkit.realSync();
+
+                // Lower left
+                glide(rect.x + rect.width / 2, rect.y + rect.height / 2,
+                        rect.x + MARGIN, rect.y + rect.height - MARGIN);
+                toolkit.realSync();
+
+                // Upper right
+                glide(rect.x + rect.width / 2, rect.y + rect.height / 2,
+                        rect.x + rect.width - MARGIN, rect.y + MARGIN);
+                toolkit.realSync();
+
+                // Lower right
+                glide(rect.x + rect.width / 2, rect.y + rect.height / 2,
+                        rect.x + rect.width - MARGIN, rect.y + rect.height - MARGIN);
+                toolkit.realSync();
+            }
+        }
+    }
+
+    private static void glide(int x0, int y0, int x1, int y1) throws AWTException {
+        if (robot == null) {
+            robot = new Robot();
+            robot.setAutoDelay(20);
+        }
+
+        float dmax = (float) Math.max(Math.abs(x1 - x0), Math.abs(y1 - y0));
+        float dx = (x1 - x0) / dmax;
+        float dy = (y1 - y0) / dmax;
+
+        robot.mouseMove(x0, y0);
+        for (int i = 1; i <= dmax; i += 10) {
+            robot.mouseMove((int) (x0 + dx * i), (int) (y0 + dy * i));
+        }
+    }
+
+    private static void adjustInsets(Rectangle rect, final Insets insets) {
+        rect.x += insets.left;
+        rect.y += insets.top;
+        rect.width -= (insets.left + insets.right);
+        rect.height -= (insets.top + insets.bottom);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/sun/java2d/pipe/InterpolationQualityTest.java	Thu Oct 11 16:59:50 2012 -0700
@@ -0,0 +1,192 @@
+/*
+ * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 7188093 8000176
+ * @summary Tests each of the 3 possible methods for rendering an upscaled
+ * image via rendering hints for default, xrender and opengl pipelines.
+ *
+ * @author Vadim.Pakhnushev@oracle.com
+ * @run main/othervm -Dsun.java2d.xrender=false InterpolationQualityTest
+ * @run main/othervm -Dsun.java2d.xrender=True InterpolationQualityTest
+ * @run main/othervm -Dsun.java2d.opengl=True InterpolationQualityTest
+ * @run main/othervm -Dsun.java2d.d3d=false InterpolationQualityTest
+ * @run main/othervm -Dsun.java2d.d3d=True InterpolationQualityTest
+ */
+
+import java.awt.*;
+import java.awt.image.*;
+import java.io.File;
+import java.io.IOException;
+import javax.imageio.ImageIO;
+
+public class InterpolationQualityTest {
+
+    private static final int testSize = 4, scaleFactor = 20, tolerance = 3;
+    private static final int sw = testSize * scaleFactor;
+    private static final int sh = testSize * scaleFactor;
+
+    private Image testImage;
+    private VolatileImage vImg;
+
+    public InterpolationQualityTest() {
+        testImage = createTestImage();
+    }
+
+    private Image createTestImage() {
+        BufferedImage bi = new BufferedImage(testSize, testSize, BufferedImage.TYPE_INT_ARGB);
+        Graphics2D g = bi.createGraphics();
+        g.setColor(Color.BLACK);
+        g.fillRect(0, 0, testSize, testSize);
+        for (int i = 0; i < testSize; i++) {
+            bi.setRGB(i, i, Color.WHITE.getRGB());
+        }
+        return bi;
+    }
+
+    private BufferedImage createReferenceImage(Object hint) {
+        BufferedImage bi = new BufferedImage(sw, sh, BufferedImage.TYPE_INT_ARGB);
+        Graphics2D g2d = bi.createGraphics();
+        drawImage(g2d, hint);
+        return bi;
+    }
+
+    private void drawImage(Graphics2D g2d, Object hint) {
+        g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, hint);
+        g2d.drawImage(testImage, 0, 0, sw, sh, null);
+    }
+
+    private GraphicsConfiguration getDefaultGC() {
+        return GraphicsEnvironment.getLocalGraphicsEnvironment().
+                getDefaultScreenDevice().getDefaultConfiguration();
+    }
+
+    private void createVImg() {
+        vImg = getDefaultGC().createCompatibleVolatileImage(sw, sh);
+    }
+
+    private void renderOffscreen(Object hint) {
+        Graphics2D g = vImg.createGraphics();
+        drawImage(g, hint);
+        g.dispose();
+    }
+
+    private BufferedImage renderImage(Object hint) {
+        BufferedImage snapshot;
+        createVImg();
+        renderOffscreen(hint);
+
+        do {
+            int status = vImg.validate(getDefaultGC());
+            if (status != VolatileImage.IMAGE_OK) {
+                if (status == VolatileImage.IMAGE_INCOMPATIBLE) {
+                    createVImg();
+                }
+                renderOffscreen(hint);
+            }
+            snapshot = vImg.getSnapshot();
+        } while (vImg.contentsLost());
+        vImg.flush();
+        return snapshot;
+    }
+
+    private boolean compareComponent(int comp1, int comp2) {
+        return Math.abs(comp1 - comp2) <= tolerance;
+    }
+
+    private boolean compareRGB(int rgb1, int rgb2) {
+        Color col1 = new Color(rgb1);
+        Color col2 = new Color(rgb2);
+        return compareComponent(col1.getRed(), col2.getRed()) &&
+                compareComponent(col1.getBlue(), col2.getBlue()) &&
+                compareComponent(col1.getGreen(), col2.getGreen()) &&
+                compareComponent(col1.getAlpha(), col2.getAlpha());
+    }
+
+    private boolean compareImages(BufferedImage img, BufferedImage ref, String imgName) {
+        for (int y = 0; y < ref.getHeight(); y++) {
+            for (int x = 0; x < ref.getWidth(); x++) {
+                if (!compareRGB(ref.getRGB(x, y), img.getRGB(x, y))) {
+                    System.out.println(imgName + ".getRGB(" + x + ", " + y + ") = "
+                            + new Color(img.getRGB(x, y)) + " != "
+                            + new Color(ref.getRGB(x, y)));
+                    return false;
+                }
+            }
+        }
+        return true;
+    }
+
+    private boolean test(Object hint) {
+        BufferedImage refImage = createReferenceImage(hint);
+        BufferedImage resImage = renderImage(hint);
+
+        boolean passed = compareImages(resImage, refImage, "resImage");
+        System.out.println(getHintName(hint) + (passed ? " passed." : " failed."));
+        if (!passed) {
+            dumpImage(refImage, "out_" + getHintName(hint) + "_ref.png");
+            dumpImage(resImage, "out_" + getHintName(hint) + ".png");
+        }
+        return passed;
+    }
+
+    public void test() {
+        boolean passed = true;
+        passed &= test(RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR);
+        passed &= test(RenderingHints.VALUE_INTERPOLATION_BILINEAR);
+        passed &= test(RenderingHints.VALUE_INTERPOLATION_BICUBIC);
+        if (passed) {
+            System.out.println("Test PASSED.");
+        } else {
+            throw new RuntimeException("Test FAILED.");
+        }
+    }
+
+    private String getHintName(Object hint) {
+        if (hint == RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR) {
+            return "nearest";
+        }
+        else if (hint == RenderingHints.VALUE_INTERPOLATION_BILINEAR) {
+            return "bilinear";
+        }
+        else if (hint == RenderingHints.VALUE_INTERPOLATION_BICUBIC) {
+            return "bicubic";
+        }
+        else {
+            return "null";
+        }
+    }
+
+    private void dumpImage(BufferedImage bi, String name) {
+        try {
+            ImageIO.write(bi, "PNG", new File(name));
+        } catch (IOException ex) {
+        }
+    }
+
+    public static void main(String[] argv) {
+        InterpolationQualityTest test = new InterpolationQualityTest();
+        test.test();
+    }
+}
--- a/jdk/test/sun/management/jmxremote/startstop/JMXStartStopDoSomething.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/test/sun/management/jmxremote/startstop/JMXStartStopDoSomething.java	Thu Oct 11 16:59:50 2012 -0700
@@ -21,17 +21,27 @@
  * questions.
  */
 
-import java.io.RandomAccessFile;
+import java.io.File;
 
 public class JMXStartStopDoSomething {
 
+    private static final String lockFileName = "JMXStartStop.lck";
 
-    public void doSomething(){
+    public static void doSomething() {
         try {
-            for (int i=0; i < 10; ++i) {
-                RandomAccessFile f = new RandomAccessFile("/dev/null","r");
-                int n = f.read();
-                f.close();
+            File lockFile = new File(lockFileName);
+            lockFile.createNewFile();
+
+            while(lockFile.exists()) {
+                long datetime = lockFile.lastModified();
+                long epoch = System.currentTimeMillis()/1000;
+
+                // Don't allow test app to run more than an hour
+                if (epoch - datetime > 3600) {
+                    System.err.println("Lock is too old. Aborting");
+                    return;
+                }
+                Thread.sleep(1);
             }
 
         } catch (Throwable e) {
@@ -41,12 +51,7 @@
 
     public static void main(String args[]) throws Exception {
         System.err.println("main enter");
-        int count = 1;
-        while(count > 0) {
-            JMXStartStopDoSomething p = new JMXStartStopDoSomething();
-            p.doSomething();
-            Thread.sleep(1);
-        }
-        // System.err.println("main exit");
+        doSomething();
+        System.err.println("main exit");
     }
 }
--- a/jdk/test/sun/management/jmxremote/startstop/JMXStartStopTest.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/test/sun/management/jmxremote/startstop/JMXStartStopTest.java	Thu Oct 11 16:59:50 2012 -0700
@@ -167,14 +167,14 @@
             }
         } catch (RuntimeException r) {
             dbg_print("No connection: ", r);
-            System.out.println("NO_CONN");
+            System.out.print("NO_CONN");
             System.exit(1);
         } catch (Throwable t) {
             dbg_print("No connection: ", t);
-            System.out.println("NO_CONN");
+            System.out.print("NO_CONN");
             System.exit(2);
         }
-        System.out.println("OK_CONN");
+        System.out.print("OK_CONN");
         System.exit(0);
     }
 
--- a/jdk/test/sun/management/jmxremote/startstop/JMXStartStopTest.sh	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/test/sun/management/jmxremote/startstop/JMXStartStopTest.sh	Thu Oct 11 16:59:50 2012 -0700
@@ -27,7 +27,6 @@
 # @run shell JMXStartStopTest.sh --jtreg --no-compile
 # @summary No word Failed expected in the test output
 
-_verbose=no
 _server=no
 _jtreg=no
 _compile=yes
@@ -39,14 +38,14 @@
 _testclasses=".classes"
 _testsrc=`pwd`
 
-_logname=".classes/JMXStartStopTest_output.txt"
-
+_logname=".classes/output.txt"
+_lockFileName="JMXStartStop.lck"
 
 _compile(){
 
     if [ ! -e ${_testclasses} ]
     then
-	  mkdir -p ${_testclasses} 
+      mkdir -p ${_testclasses} 
     fi   
 
     rm -f ${_testclasses}/JMXStartStopTest.class
@@ -62,21 +61,17 @@
 }
 
 _app_start(){
+  ${TESTJAVA}/bin/java -server $* -cp ${_testclasses} JMXStartStopDoSomething  >> ${_logname} 2>&1 &
 
-  if [ "${_verbose}" = "yes" ]
-  then
-     echo "RUN: ${TESTJAVA}/bin/java -server $* -cp ${_testclasses} JMXStartStopDoSomething "
-  fi 
-  ${TESTJAVA}/bin/java -server $* -cp ${_testclasses} JMXStartStopDoSomething  >> ${_logname} 2>&1 &
-  sleep 1 
-
-  pid=`_get_pid`
-  if [ "x${pid}" = "x" ]
+  npid=`_get_pid`
+  if [ "${npid}" = "" ]
   then
      echo "ERROR: Test app not started"
-     exit -1
+     if [ "${_jtreg}" = "yes" ]
+     then
+       exit -1
+     fi  
   fi
-
 }
 
 _get_pid(){
@@ -84,32 +79,36 @@
 }
 
 _app_stop(){
-    pid=`_get_pid`
-    if [ "x${pid}" != "x" ]
-    then
-       kill $pid
-    fi
+  rm ${_lockFileName}
 
-    # Stop on first failed test under jtreg
-    if [ "x$1" = "xFailed" -a "${_jtreg}" = "yes" ]
+  # wait until VM is actually shuts down
+  while true 
+  do
+    npid=`_get_pid`
+    if [ "${npid}" = "" ] 
     then
-      exit -1
+      break
     fi
+    sleep 1
+  done 
 }
-   
-testme(){
-    ${TESTJAVA}/bin/java -cp ${_testclasses} JMXStartStopTest $*
+
+_exit_on_jtreg(){
+  # Stop on first failed test under jtreg
+  if [ "${_jtreg}" = "yes" ]
+  then
+      _app_stop
+      exit -1
+  fi
+}
+
+_testme(){
+  ${TESTJAVA}/bin/java -cp ${_testclasses} JMXStartStopTest $*
 }   
 
   
 _jcmd(){
-  if [ "${_verbose}" = "yes" ]
-  then
-     echo "RUN: ${TESTJAVA}/bin/jcmd JMXStartStopDoSomething $*"
-     ${TESTJAVA}/bin/jcmd JMXStartStopDoSomething $* 
-  else
-     ${TESTJAVA}/bin/jcmd JMXStartStopDoSomething $* > /dev/null 2>/dev/null
-  fi
+  ${TESTJAVA}/bin/jcmd JMXStartStopDoSomething $* > /dev/null 2>/dev/null
 } 
 
 _echo(){
@@ -122,139 +121,136 @@
 test_01(){
 # Run an app with JMX enabled stop it and 
 # restart on other port
-		
-    _echo "**** Test one ****"		
+        
+    _echo "**** Test one ****"      
 
     _app_start  -Dcom.sun.management.jmxremote.port=$1 \
                 -Dcom.sun.management.jmxremote.authenticate=false \
-	        -Dcom.sun.management.jmxremote.ssl=false 
+                -Dcom.sun.management.jmxremote.ssl=false 
 
-    res1=`testme $1`
+    res1=`_testme $1`
 
     _jcmd ManagementAgent.stop
 
-    res2=`testme $1`
+    res2=`_testme $1`
 
     _jcmd ManagementAgent.start jmxremote.port=$2
 
-    res3=`testme $2`
-
+    res3=`_testme $2`
 
     if [ "${res1}" = "OK_CONN" -a "${res2}" = "NO_CONN" -a "${res3}" = "OK_CONN" ] 
     then
-	_echo "Passed"
+        _echo "Passed"
     else
-	_echo "Failed r1(OK):${res1} r2(NO):${res2} r3(OK):${res3}"
-    _app_stop "Failed"
+        _echo "Failed r1(OK):${res1} r2(NO):${res2} r3(OK):${res3}"
+        _exit_on_jtreg
     fi
 
     _app_stop
-
 }  
    
 test_02(){
 # Run an app without JMX enabled 
 # start JMX by jcmd
 
-_echo "**** Test two ****"		
-_app_start  
+    _echo "**** Test two ****"      
+    _app_start  
 
-_jcmd ManagementAgent.start jmxremote.port=$1 jmxremote.authenticate=false jmxremote.ssl=false 
+    _jcmd ManagementAgent.start jmxremote.port=$1 jmxremote.authenticate=false jmxremote.ssl=false 
 
-res1=`testme $1`
+    res1=`_testme $1`
 
-if [ "${res1}" = "OK_CONN" ] 
-then
-    _echo "Passed"
-else
-    _echo "Failed r1(OK):${res1}"
-    _app_stop "Failed"
-fi
-
-_app_stop
-
+    if [ "${res1}" = "OK_CONN" ] 
+    then
+        _echo "Passed"
+    else
+        _echo "Failed r1(OK):${res1}"
+        _exit_on_jtreg
+    fi
+    _app_stop
 }   
    
 test_03(){
 # Run an app without JMX enabled 
 # start JMX by jcmd on one port than on other one
 
-_echo "**** Test three ****"		
-_app_start  
+    _echo "**** Test three ****"        
+    _app_start  
 
-_jcmd ManagementAgent.start jmxremote.port=$1 jmxremote.authenticate=false jmxremote.ssl=false 
+    _jcmd ManagementAgent.start jmxremote.port=$1 jmxremote.authenticate=false jmxremote.ssl=false 
 
 # Second agent shouldn't start
-_jcmd ManagementAgent.start jmxremote.port=$2 jmxremote.authenticate=false jmxremote.ssl=false
+    _jcmd ManagementAgent.start jmxremote.port=$2 jmxremote.authenticate=false jmxremote.ssl=false
 
 # First agent should connect
-res1=`testme $1`
+    res1=`_testme $1`
 
-if [ "${res1}" = "OK_CONN" ] 
-then
-    _echo "Passed $1"
-else
-    _echo "Failed r1(NO):${res1}"
-    _app_stop "Failed"
-fi
+    if [ "${res1}" = "OK_CONN" ] 
+    then
+        _echo "Passed $1"
+    else
+        _echo "Failed r1(NO):${res1}"
+        _exit_on_jtreg
+    fi
 
 #Second agent shouldn't connect
-res1=`testme $2`
+    res1=`_testme $2`
 
-if [ "${res1}" = "NO_CONN" ] 
-then
-    _echo "Passed $2"
-else
-    _echo "Failed r1(OK):${res1}"
-fi
+    if [ "${res1}" = "NO_CONN" ] 
+    then
+        _echo "Passed $2"
+    else
+        _echo "Failed r1(OK):${res1}"
+        _exit_on_jtreg
+    fi
 
-_app_stop
+    _app_stop
 }   
    
 test_04(){
 # Run an app without JMX enabled 
 # start JMX by jcmd on one port, specify rmi port explicitly
 
-_echo "**** Test four ****"		
-_app_start  
+    _echo "**** Test four ****"     
+    _app_start  
 
-_jcmd ManagementAgent.start jmxremote.port=$1 jmxremote.rmi.port=$2 jmxremote.authenticate=false jmxremote.ssl=false 
+    _jcmd ManagementAgent.start jmxremote.port=$1 jmxremote.rmi.port=$2 jmxremote.authenticate=false jmxremote.ssl=false 
 
 # First agent should connect
-res1=`testme $1 $2`
+    res1=`_testme $1 $2`
 
-if [ "${res1}" = "OK_CONN" ] 
-then
-    _echo "Passed $1 $2"
-else
-    _echo "Failed r1(NO):${res1}"
-    _app_stop "Failed"
-fi
+    if [ "${res1}" = "OK_CONN" ] 
+    then
+        _echo "Passed $1 $2"
+    else
+        _echo "Failed r1(NO):${res1}"
+        _exit_on_jtreg
+    fi
 
-_app_stop
+    _app_stop
 }   
 
 test_05(){
 # Run an app without JMX enabled, it will enable local server
 # but should leave remote server disabled  
 
-_echo "**** Test five ****"		
-_app_start  
+    _echo "**** Test five ****"     
+    _app_start  
 
-_jcmd ManagementAgent.start jmxremote=1 
+    _jcmd ManagementAgent.start jmxremote=1 
 
-# First agent should connect
-res1=`testme $1`
+    # First agent should connect
+    res1=`_testme $1`
 
-if [ "${res1}" = "NO_CONN" ] 
-then
-    _echo "Passed $1 $2"
-else
-    _echo "Failed r1(OK):${res1}"
-    _app_stop "Failed"
-fi
+    if [ "${res1}" = "NO_CONN" ] 
+    then
+        _echo "Passed $1 $2"
+    else
+        _echo "Failed r1(OK):${res1}"
+        _exit_on_jtreg
+    fi
 
-_app_stop
+    _app_stop
 }   
 
 test_06(){
@@ -264,35 +260,35 @@
 # 1) with the same port 
 # 2) with other port
 # 3) attempt to stop it twice
-# Check for valid messages in the output	
+# Check for valid messages in the output    
 
-_echo "**** Test six ****"		
-_app_start  
+    _echo "**** Test six ****"      
+    _app_start  
 
-_jcmd ManagementAgent.start jmxremote.port=$1 jmxremote.authenticate=false jmxremote.ssl=false 
+    _jcmd ManagementAgent.start jmxremote.port=$1 jmxremote.authenticate=false jmxremote.ssl=false 
 
-# First agent should connect
-res1=`testme $1 $2`
+    # First agent should connect
+    res1=`_testme $1 $2`
 
-if [ "${res1}" = "OK_CONN" ] 
-then
-    _echo "Passed $1 $2"
-else
-    _echo "Failed r1(NO):${res1}"
-    _app_stop "Failed"
-fi
+    if [ "${res1}" = "OK_CONN" ] 
+    then
+        _echo "Passed $1 $2"
+    else
+        _echo "Failed r1(NO):${res1}"
+        _exit_on_jtreg
+    fi
 
-_jcmd ManagementAgent.start jmxremote.port=$1 jmxremote.authenticate=false jmxremote.ssl=false 
+    _jcmd ManagementAgent.start jmxremote.port=$1 jmxremote.authenticate=false jmxremote.ssl=false 
 
-_jcmd ManagementAgent.start jmxremote.port=$2 jmxremote.authenticate=false jmxremote.ssl=false 
+    _jcmd ManagementAgent.start jmxremote.port=$2 jmxremote.authenticate=false jmxremote.ssl=false 
 
-_jcmd ManagementAgent.stop
+    _jcmd ManagementAgent.stop
 
-_jcmd ManagementAgent.stop
+    _jcmd ManagementAgent.stop
 
-_jcmd ManagementAgent.start jmxremote.port=22 jmxremote.rmi.port=$2 jmxremote.authenticate=false jmxremote.ssl=false 
+    _jcmd ManagementAgent.start jmxremote.port=22 jmxremote.rmi.port=$2 jmxremote.authenticate=false jmxremote.ssl=false 
 
-_app_stop
+    _app_stop
 }   
 
 test_07(){
@@ -300,27 +296,26 @@
 # in command line.
 # make sure these properties overriden corectly 
 
-_echo "**** Test seven ****"		
-
-_app_start   -Dcom.sun.management.jmxremote.authenticate=false \
-             -Dcom.sun.management.jmxremote.ssl=true 
+    _echo "**** Test seven ****"        
 
-res1=`testme $1`
+    _app_start   -Dcom.sun.management.jmxremote.authenticate=false \
+                 -Dcom.sun.management.jmxremote.ssl=true 
 
-_jcmd ManagementAgent.start jmxremote.port=$2 jmxremote.authenticate=false jmxremote.ssl=false
+    res1=`_testme $1`
 
-res2=`testme $2`
+    _jcmd ManagementAgent.start jmxremote.port=$2 jmxremote.authenticate=false jmxremote.ssl=false
 
+    res2=`_testme $2`
 
-if [ "${res1}" = "NO_CONN" -a "${res2}" = "OK_CONN" ] 
-then
-   echo "Passed"
-else
-	_echo "Failed r1(NO):${res1} r2(OK):${res2}"
-    _app_stop "Failed"
-fi
+    if [ "${res1}" = "NO_CONN" -a "${res2}" = "OK_CONN" ] 
+    then
+        echo "Passed"
+    else
+        _echo "Failed r1(NO):${res1} r2(OK):${res2}"
+        _exit_on_jtreg
+    fi
 
-_app_stop
+    _app_stop
 }   
 
 test_08(){
@@ -329,32 +324,31 @@
 # stop JMX agent and then start it again with different property values
 # make sure these properties overriden corectly 
 
-_echo "**** Test eight ****"		
+    _echo "**** Test eight ****"        
 
-_app_start  -Dcom.sun.management.jmxremote.port=$1 \
-	    -Dcom.sun.management.jmxremote.authenticate=false \
-	    -Dcom.sun.management.jmxremote.ssl=true 
+    _app_start  -Dcom.sun.management.jmxremote.port=$1 \
+                -Dcom.sun.management.jmxremote.authenticate=false \
+                -Dcom.sun.management.jmxremote.ssl=true 
 
-res1=`testme $1`
+    res1=`_testme $1`
 
-_jcmd ManagementAgent.stop
+    _jcmd ManagementAgent.stop
 
-res2=`testme $1`
+    res2=`_testme $1`
 
-_jcmd ManagementAgent.start jmxremote.port=$2 jmxremote.authenticate=false jmxremote.ssl=false
+    _jcmd ManagementAgent.start jmxremote.port=$2 jmxremote.authenticate=false jmxremote.ssl=false
 
-res3=`testme $2`
-
+    res3=`_testme $2`
 
-if [ "${res1}" = "NO_CONN" -a "${res2}" = "NO_CONN" -a "${res3}" = "OK_CONN" ] 
-then
-    _echo "Passed"
-else
-    _echo "Failed r1(NO):${res1} r2(NO):${res2} r3(OK):${res3}"
-    _app_stop "Failed"
-fi
+    if [ "${res1}" = "NO_CONN" -a "${res2}" = "NO_CONN" -a "${res3}" = "OK_CONN" ] 
+    then
+        _echo "Passed"
+    else
+        _echo "Failed r1(NO):${res1} r2(NO):${res2} r3(OK):${res3}"
+        _exit_on_jtreg
+    fi
  
-_app_stop
+    _app_stop
 }   
 
 test_09(){
@@ -365,31 +359,31 @@
 # in command line
 # make sure these properties overriden corectly 
 
-_echo "**** Test nine ****"		
+    _echo "**** Test nine ****"     
 
-_app_start -Dcom.sun.management.config.file=${_testsrc}/management_cl.properties \
-           -Dcom.sun.management.jmxremote.authenticate=false 
+    _app_start -Dcom.sun.management.config.file=${_testsrc}/management_cl.properties \
+               -Dcom.sun.management.jmxremote.authenticate=false 
 
-res1=`testme $1`
+    res1=`_testme $1`
 
-_jcmd ManagementAgent.stop
+    _jcmd ManagementAgent.stop
 
-res2=`testme $1`
+    res2=`_testme $1`
 
-_jcmd ManagementAgent.start config.file=${_testsrc}/management_jcmd.properties \
-       jmxremote.authenticate=false jmxremote.port=$2
+    _jcmd ManagementAgent.start config.file=${_testsrc}/management_jcmd.properties \
+                                jmxremote.authenticate=false jmxremote.port=$2
 
-res3=`testme $2`
+    res3=`_testme $2`
 
-if [ "${res1}" = "NO_CONN" -a "${res2}" = "NO_CONN" -a "${res3}" = "OK_CONN" ] 
-then
-    _echo "Passed"
-else
-    _echo "Failed r1(NO):${res1} r2(NO):${res2} r3(OK):${res3}"
-    _app_stop "Failed"
-fi
+    if [ "${res1}" = "NO_CONN" -a "${res2}" = "NO_CONN" -a "${res3}" = "OK_CONN" ] 
+    then
+        _echo "Passed"
+    else
+        _echo "Failed r1(NO):${res1} r2(NO):${res2} r3(OK):${res3}"
+        _exit_on_jtreg
+    fi
  
-_app_stop
+    _app_stop
 }   
 
 test_10(){
@@ -399,34 +393,34 @@
 # stop JMX agent again and then start it without property value
 # make sure these properties overriden corectly 
 
-_echo "**** Test ten ****"		
+    _echo "**** Test ten ****"      
 
-_app_start  -Dcom.sun.management.jmxremote.port=$1 \
-	    -Dcom.sun.management.jmxremote.authenticate=false \
-	    -Dcom.sun.management.jmxremote.ssl=true 
+    _app_start  -Dcom.sun.management.jmxremote.port=$1 \
+                -Dcom.sun.management.jmxremote.authenticate=false \
+                -Dcom.sun.management.jmxremote.ssl=true 
 
-res1=`testme $1`
+    res1=`_testme $1`
 
-_jcmd ManagementAgent.stop
-_jcmd ManagementAgent.start jmxremote.ssl=false jmxremote.port=$1
+    _jcmd ManagementAgent.stop
+    _jcmd ManagementAgent.start jmxremote.ssl=false jmxremote.port=$1
 
 
-res2=`testme $1`
+    res2=`_testme $1`
 
-_jcmd ManagementAgent.stop
-_jcmd ManagementAgent.start jmxremote.port=$1
+    _jcmd ManagementAgent.stop
+    _jcmd ManagementAgent.start jmxremote.port=$1
 
-res3=`testme $1`
+    res3=`_testme $1`
 
-if [ "${res1}" = "NO_CONN" -a "${res2}" = "OK_CONN" -a "${res3}" = "NO_CONN" ] 
-then
-    _echo "Passed"
-else
-    _echo "Failed r1(NO):${res1} r2(OK):${res2} r3(NO):${res3}"
-    _app_stop "Failed"
-fi
+    if [ "${res1}" = "NO_CONN" -a "${res2}" = "OK_CONN" -a "${res3}" = "NO_CONN" ] 
+    then
+        _echo "Passed"
+    else
+        _echo "Failed r1(NO):${res1} r2(OK):${res2} r3(NO):${res3}"
+        _exit_on_jtreg
+    fi
  
-_app_stop
+    _app_stop
 }   
 
 test_11(){
@@ -434,102 +428,87 @@
 # stop remote agent 
 # make sure local agent is not affected
 
-_echo "**** Test eleven ****"		
+    _echo "**** Test eleven ****"       
 
-_app_start  -Dcom.sun.management.jmxremote.port=$2 \
-	    -Dcom.sun.management.jmxremote.authenticate=false \
-	    -Dcom.sun.management.jmxremote.ssl=false 
-	  
-res1=`testme $2`
+    _app_start  -Dcom.sun.management.jmxremote.port=$2 \
+                -Dcom.sun.management.jmxremote.authenticate=false \
+                -Dcom.sun.management.jmxremote.ssl=false 
+      
+    res1=`_testme $2`
 
-_jcmd ManagementAgent.stop
+    _jcmd ManagementAgent.stop
 
-pid=`${TESTJAVA}/bin/jps | sed -n "/JMXStartStopDoSomething/s/ .*//p"`
-res2=`testme local ${pid}`
+    pid=`${TESTJAVA}/bin/jps | sed -n "/JMXStartStopDoSomething/s/ .*//p"`
+    res2=`_testme local ${pid}`
 
-if [ "${res1}" = "OK_CONN" -a "${res2}" = "OK_CONN" ] 
-then
-    _echo "Passed"
-else
-    _echo "Failed r1(OK):${res1} r2(OK):${res2}"
-    _app_stop "Failed"
-fi
+    if [ "${res1}" = "OK_CONN" -a "${res2}" = "OK_CONN" ] 
+    then
+        _echo "Passed"
+    else
+        _echo "Failed r1(OK):${res1} r2(OK):${res2}"
+        _exit_on_jtreg
+    fi
  
-_app_stop
+    _app_stop
 }   
 
 test_12(){
 # Run an app with JMX disabled 
 # start local agent only
 
-_echo "**** Test twelve ****"		
+    _echo "**** Test twelve ****"       
 
-_app_start 
-	  
-res1=`testme $1`
+    _app_start 
+      
+    res1=`_testme $1`
 
-_jcmd ManagementAgent.start_local
+    _jcmd ManagementAgent.start_local
 
-pid=`_get_pid`
-if [ "x${pid}" = "x" ]
-then
-  res2="NO_CONN"
-else
-  res2=`testme local ${pid}`
-fi
+    pid=`_get_pid`
+    if [ "x${pid}" = "x" ]
+    then
+        res2="NO_CONN"
+    else
+        res2=`_testme local ${pid}`
+    fi
 
-if [ "${res1}" = "NO_CONN" -a "${res2}" = "OK_CONN" ] 
-then
-    _echo "Passed"
-else
-    _echo "Failed r1(NO):${res1} r2(OK):${res2}"
-    _app_stop "Failed"
-fi
+    if [ "${res1}" = "NO_CONN" -a "${res2}" = "OK_CONN" ] 
+    then
+        _echo "Passed"
+    else
+        _echo "Failed r1(NO):${res1} r2(OK):${res2}"
+        _exit_on_jtreg
+    fi
  
-_app_stop
+    _app_stop
 }   
 
 test_13(){
 # Run an app with -javaagent make sure it works as expected - system properties are ignored
 
-_echo "**** Test 13 ****"		
-
-AGENT="${TESTJAVA}/jre/lib/management-agent.jar"
-if [ ! -f ${AGENT} ]
- then
-  AGENT="${TESTJAVA}/lib/management-agent.jar"
-fi
+    _echo "**** Test thirteen ****"       
+			   
+    AGENT="${TESTJAVA}/jre/lib/management-agent.jar"
+    if [ ! -f ${AGENT} ]
+    then
+        AGENT="${TESTJAVA}/lib/management-agent.jar"
+    fi
 
-_app_start -javaagent:${AGENT}=com.sun.management.jmxremote.port=$1,com.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false 
-	  
-res1=`testme $1`
+    _app_start -javaagent:${AGENT}=com.sun.management.jmxremote.port=$1,com.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false 
+      
+    res1=`_testme $1`
 
-if [ "${res1}" = "NO_CONN" ] 
-then
-    _echo "Passed"
-else
-    _echo "Failed r1(NO):${res1}"
-    _app_stop "Failed"
-fi
+    if [ "${res1}" = "NO_CONN" ] 
+    then
+        _echo "Passed"
+    else
+        _echo "Failed r1(NO):${res1}"
+        _exit_on_jtreg
+    fi
  
-_app_stop
+    _app_stop
 }   
 
-
-#============== Server tests =======================
-
-server_test_01(){
-		
-    _echo "**** Server test one ****"		
-
-    _app_start  -Dcom.sun.management.jmxremote.port=$1 \
-                -Dcom.sun.management.jmxremote.rmi.port=$2 \
-                -Dcom.sun.management.jmxremote.authenticate=false \
-                -Dcom.sun.management.jmxremote.ssl=false 
-
-}  
-
- 
 # ============= MAIN =======================================
 
 if [ "x${TESTJAVA}" = "x" ]
@@ -542,11 +521,6 @@
 then
   echo "${TESTJAVA}/bin/jcmd"
   echo "Doesn't exist or not an executable"
-
-  if [ "${_verbose}" != "yes" ]
-  then
-    exit
-  fi
 fi
 
 
@@ -556,8 +530,6 @@
 for parm in "$@"  
 do
    case $parm in
-  --verbose)      _verbose=yes  ;;
-  --server)       _server=yes   ;;
   --jtreg)        _jtreg=yes    ;;
   --no-compile)   _compile=no   ;;
   --testsuite=*)  _testsuite=`_echo $parm | sed "s,^--.*=\(.*\),\1,"`  ;;
@@ -584,20 +556,10 @@
 
 rm -f ${_logname}
 
-# Start server mode tests
-# All of them require manual cleanup
-if [ "x${_server}" = "xyes" ]
-then
-  
- server_test_01 ${_port_one} ${_port_two}
-
-else
+# Local mode tests
+for i in `echo ${_testsuite} | sed -e "s/,/ /g"`
+do
+  test_${i} ${_port_one} ${_port_two}
+done
 
- # Local mode tests
- for i in `echo ${_testsuite} | sed -e "s/,/ /g"`
- do
-  test_${i} ${_port_one} ${_port_two}
- done
 
-fi
-
--- a/jdk/test/sun/management/jmxremote/startstop/REMOTE_TESTING.txt	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/test/sun/management/jmxremote/startstop/REMOTE_TESTING.txt	Thu Oct 11 16:59:50 2012 -0700
@@ -2,7 +2,15 @@
 2. Make sure tcp connection between them works
 3. run tcpdump -i <interface> host <host2_name> and 'tcp[13] & 2!=0'
    on host 1
-4. run JMXStartStopTest.sh --server on host2
+4. run 
+
+   ${TESTJAVA}/bin/java -server JMXStartStopDoSomething \
+   -Dcom.sun.management.jmxremote.port=50234 \
+   -Dcom.sun.management.jmxremote.rmi.port=50235 \
+   -Dcom.sun.management.jmxremote.authenticate=false \
+   -Dcom.sun.management.jmxremote.ssl=false
+
+    on host2
 5. run jconsole on host1
 6. connect jconsole to host2:50234
    Make sure jconsole works
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/sun/security/krb5/auto/UseCacheAndStoreKey.java	Thu Oct 11 16:59:50 2012 -0700
@@ -0,0 +1,71 @@
+/*
+ * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 7201053
+ * @summary Krb5LoginModule shows NPE when both useTicketCache and storeKey
+ *          are set to true
+ * @compile -XDignore.symbol.file UseCacheAndStoreKey.java
+ * @run main/othervm UseCacheAndStoreKey
+ */
+
+import java.io.FileOutputStream;
+import javax.security.auth.login.LoginException;
+
+// The basic krb5 test skeleton you can copy from
+public class UseCacheAndStoreKey {
+
+    public static void main(String[] args) throws Exception {
+
+        new OneKDC(null).writeJAASConf();
+
+        // KDC would save ccache for client
+        System.setProperty("test.kdc.save.ccache", "cache.here");
+        try (FileOutputStream fos = new FileOutputStream(OneKDC.JAAS_CONF)) {
+            fos.write((
+                "me {\n" +
+                "    com.sun.security.auth.module.Krb5LoginModule required\n" +
+                "    principal=\"" + OneKDC.USER + "\"\n" +
+                "    useTicketCache=true\n" +
+                "    ticketCache=cache.here\n" +
+                "    isInitiator=true\n" +
+                "    storeKey=true;\n};\n"
+                ).getBytes());
+        }
+
+        // The first login will use default callback and succeed
+        Context.fromJAAS("me");
+
+        // The second login uses ccache and won't be able to store the keys
+        try {
+            Context.fromJAAS("me");
+            throw new Exception("Should fail");
+        } catch (LoginException le) {
+            if (le.getMessage().indexOf("NullPointerException") >= 0
+                    || le.getCause() instanceof NullPointerException) {
+                throw new Exception("NPE");
+            }
+        }
+    }
+}
--- a/jdk/test/sun/security/provider/X509Factory/BigCRL.java	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/test/sun/security/provider/X509Factory/BigCRL.java	Thu Oct 11 16:59:50 2012 -0700
@@ -25,7 +25,7 @@
  * @test
  * @bug 7099399
  * @summary cannot deal with CRL file larger than 16MB
- * @run main/othervm -Xmx1024m BigCRL
+ * @run main/othervm -Xshare:off -Xmx1024m BigCRL
  */
 
 import java.io.FileInputStream;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/sun/security/ssl/com/sun/net/ssl/internal/ssl/X509TrustManagerImpl/CertRequestOverflow.java	Thu Oct 11 16:59:50 2012 -0700
@@ -0,0 +1,402 @@
+/*
+ * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+//
+// SunJSSE does not support dynamic system properties, no way to re-use
+// system properties in samevm/agentvm mode.
+//
+
+/*
+ * @test
+ * @bug 7200295
+ * @summary CertificateRequest message is wrapping when using large
+ *          numbers of Certs
+ * @run main/othervm CertRequestOverflow
+ */
+
+import java.io.*;
+import java.net.*;
+import java.util.*;
+import javax.net.ssl.*;
+import java.security.cert.*;
+import java.security.*;
+
+public class CertRequestOverflow {
+
+    /*
+     * =============================================================
+     * Set the various variables needed for the tests, then
+     * specify what tests to run on each side.
+     */
+
+    /*
+     * Should we run the client or server in a separate thread?
+     * Both sides can throw exceptions, but do you have a preference
+     * as to which side should be the main thread.
+     */
+    static boolean separateServerThread = false;
+
+    /*
+     * Where do we find the keystores?
+     */
+    static String pathToStores = "../../../../../../../etc";
+    static String keyStoreFile = "keystore";
+    static String trustStoreFile = "truststore";
+    static String passwd = "passphrase";
+    private final static char[] cpasswd = "passphrase".toCharArray();
+
+    /*
+     * Is the server ready to serve?
+     */
+    volatile static boolean serverReady = false;
+
+    /*
+     * Turn on SSL debugging?
+     */
+    static boolean debug = false;
+
+    /*
+     * If the client or server is doing some kind of object creation
+     * that the other side depends on, and that thread prematurely
+     * exits, you may experience a hang.  The test harness will
+     * terminate all hung threads after its timeout has expired,
+     * currently 3 minutes by default, but you might try to be
+     * smart about it....
+     */
+
+    /*
+     * Define the server side of the test.
+     *
+     * If the server prematurely exits, serverReady will be set to true
+     * to avoid infinite hangs.
+     */
+    void doServerSide() throws Exception {
+        SSLServerSocketFactory sslssf =
+                                getContext(true).getServerSocketFactory();
+        SSLServerSocket sslServerSocket =
+            (SSLServerSocket) sslssf.createServerSocket(serverPort);
+        serverPort = sslServerSocket.getLocalPort();
+
+        // enable endpoint identification
+        // ignore, we may test the feature when known how to parse client
+        // hostname
+        //SSLParameters params = sslServerSocket.getSSLParameters();
+        //params.setEndpointIdentificationAlgorithm("HTTPS");
+        //sslServerSocket.setSSLParameters(params);
+
+        /*
+         * Signal Client, we're ready for his connect.
+         */
+        serverReady = true;
+
+        SSLSocket sslSocket = (SSLSocket) sslServerSocket.accept();
+        sslSocket.setNeedClientAuth(true);
+        InputStream sslIS = sslSocket.getInputStream();
+        OutputStream sslOS = sslSocket.getOutputStream();
+
+        try {
+            sslIS.read();
+            sslOS.write(85);
+            sslOS.flush();
+
+            throw new Exception("SERVER TEST FAILED!  " +
+                        "It is expected to fail with field length overflow");
+        } catch (SSLException ssle) {
+            Throwable cause = ssle.getCause();
+            if (!(cause instanceof RuntimeException)) {
+                System.out.println("We are expecting a RuntimeException!");
+                throw ssle;
+            }
+            System.out.println("The expected exception!  " + ssle);
+        } finally {
+            sslSocket.close();
+        }
+
+        System.out.println("SERVER TEST PASSED!");
+    }
+
+    /*
+     * Define the client side of the test.
+     *
+     * If the server prematurely exits, serverReady will be set to true
+     * to avoid infinite hangs.
+     */
+    void doClientSide() throws Exception {
+
+        /*
+         * Wait for server to get started.
+         */
+        while (!serverReady) {
+            Thread.sleep(50);
+        }
+
+        SSLSocketFactory sslsf = getContext(false).getSocketFactory();
+        SSLSocket sslSocket = (SSLSocket)
+            sslsf.createSocket("localhost", serverPort);
+
+        // enable endpoint identification
+        SSLParameters params = sslSocket.getSSLParameters();
+        params.setEndpointIdentificationAlgorithm("HTTPS");
+        sslSocket.setSSLParameters(params);
+
+        InputStream sslIS = sslSocket.getInputStream();
+        OutputStream sslOS = sslSocket.getOutputStream();
+
+        try {
+            sslOS.write(280);
+            sslOS.flush();
+            sslIS.read();
+        } catch (SSLException ssle) {
+            System.out.println("An expected exception!");
+        } finally {
+            sslSocket.close();
+        }
+    }
+
+    MyExtendedX509TM serverTM;
+    MyExtendedX509TM clientTM;
+
+    private SSLContext getContext(boolean server) throws Exception {
+        String keyFilename =
+            System.getProperty("test.src", "./") + "/" + pathToStores +
+                "/" + keyStoreFile;
+        String trustFilename =
+            System.getProperty("test.src", "./") + "/" + pathToStores +
+                "/" + trustStoreFile;
+
+        KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
+        KeyStore ks = KeyStore.getInstance("JKS");
+        ks.load(new FileInputStream(keyFilename), cpasswd);
+        kmf.init(ks, cpasswd);
+
+        TrustManagerFactory tmf = TrustManagerFactory.getInstance("SunX509");
+        KeyStore ts = KeyStore.getInstance("JKS");
+        ts.load(new FileInputStream(trustFilename), cpasswd);
+        tmf.init(ts);
+
+        TrustManager tms[] = tmf.getTrustManagers();
+        if (tms == null || tms.length == 0) {
+            throw new Exception("unexpected trust manager implementation");
+        } else {
+           if (!(tms[0] instanceof X509TrustManager)) {
+            throw new Exception("unexpected trust manager implementation: "
+                                + tms[0].getClass().getCanonicalName());
+           }
+        }
+
+        if (server) {
+            serverTM = new MyExtendedX509TM((X509TrustManager)tms[0]);
+
+            tms = new TrustManager[] {serverTM};
+        } else {
+            clientTM = new MyExtendedX509TM((X509TrustManager)tms[0]);
+
+            tms = new TrustManager[] {clientTM};
+        }
+
+        SSLContext ctx = SSLContext.getInstance("TLS");
+        ctx.init(kmf.getKeyManagers(), tms, null);
+
+        return ctx;
+    }
+
+    static class MyExtendedX509TM extends X509ExtendedTrustManager
+            implements X509TrustManager {
+
+        X509TrustManager tm;
+
+        boolean clientChecked;
+        boolean serverChecked;
+
+        MyExtendedX509TM(X509TrustManager tm) {
+            clientChecked = false;
+            serverChecked = false;
+
+            this.tm = tm;
+        }
+
+        public boolean wasClientChecked() {
+            return clientChecked;
+        }
+
+        public boolean wasServerChecked() {
+            return serverChecked;
+        }
+
+
+        public void checkClientTrusted(X509Certificate chain[], String authType)
+                throws CertificateException {
+            tm.checkClientTrusted(chain, authType);
+        }
+
+        public void checkServerTrusted(X509Certificate chain[], String authType)
+                throws CertificateException {
+            tm.checkServerTrusted(chain, authType);
+        }
+
+        public X509Certificate[] getAcceptedIssuers() {
+            // (hack code) increase the size of the returned array to make a
+            // overflow CertificateRequest.
+            List<X509Certificate> issuersList = new LinkedList<>();
+            X509Certificate[] issuers = tm.getAcceptedIssuers();
+            for (int i = 0; i < 800; i += issuers.length) {
+                for (X509Certificate issuer : issuers) {
+                    issuersList.add(issuer);
+                }
+            }
+
+            return issuersList.toArray(issuers);
+        }
+
+        public void checkClientTrusted(X509Certificate[] chain, String authType,
+                Socket socket) throws CertificateException {
+            clientChecked = true;
+            tm.checkClientTrusted(chain, authType);
+        }
+
+        public void checkServerTrusted(X509Certificate[] chain, String authType,
+                Socket socket) throws CertificateException {
+            serverChecked = true;
+            tm.checkServerTrusted(chain, authType);
+        }
+
+        public void checkClientTrusted(X509Certificate[] chain, String authType,
+            SSLEngine engine) throws CertificateException {
+            clientChecked = true;
+            tm.checkClientTrusted(chain, authType);
+        }
+
+        public void checkServerTrusted(X509Certificate[] chain, String authType,
+            SSLEngine engine) throws CertificateException {
+            serverChecked = true;
+            tm.checkServerTrusted(chain, authType);
+        }
+    }
+
+    /*
+     * =============================================================
+     * The remainder is just support stuff
+     */
+
+    // use any free port by default
+    volatile int serverPort = 0;
+
+    volatile Exception serverException = null;
+    volatile Exception clientException = null;
+
+    public static void main(String[] args) throws Exception {
+
+        if (debug)
+            System.setProperty("javax.net.debug", "all");
+
+        /*
+         * Start the tests.
+         */
+        new CertRequestOverflow();
+    }
+
+    Thread clientThread = null;
+    Thread serverThread = null;
+
+    /*
+     * Primary constructor, used to drive remainder of the test.
+     *
+     * Fork off the other side, then do your work.
+     */
+    CertRequestOverflow() throws Exception {
+        if (separateServerThread) {
+            startServer(true);
+            startClient(false);
+        } else {
+            startClient(true);
+            startServer(false);
+        }
+
+        /*
+         * Wait for other side to close down.
+         */
+        if (separateServerThread) {
+            serverThread.join();
+        } else {
+            clientThread.join();
+        }
+
+        /*
+         * When we get here, the test is pretty much over.
+         *
+         * If the main thread excepted, that propagates back
+         * immediately.  If the other thread threw an exception, we
+         * should report back.
+         */
+        if (serverException != null)
+            throw serverException;
+        if (clientException != null)
+            throw clientException;
+    }
+
+    void startServer(boolean newThread) throws Exception {
+        if (newThread) {
+            serverThread = new Thread() {
+                public void run() {
+                    try {
+                        doServerSide();
+                    } catch (Exception e) {
+                        /*
+                         * Our server thread just died.
+                         *
+                         * Release the client, if not active already...
+                         */
+                        System.err.println("Server died...");
+                        serverReady = true;
+                        serverException = e;
+                    }
+                }
+            };
+            serverThread.start();
+        } else {
+            doServerSide();
+        }
+    }
+
+    void startClient(boolean newThread) throws Exception {
+        if (newThread) {
+            clientThread = new Thread() {
+                public void run() {
+                    try {
+                        doClientSide();
+                    } catch (Exception e) {
+                        /*
+              * Our client thread just died.
+                         */
+                        System.err.println("Client died...");
+                        clientException = e;
+                    }
+                }
+            };
+            clientThread.start();
+        } else {
+            doClientSide();
+        }
+    }
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/sun/security/tools/keytool/ListKeychainStore.sh	Thu Oct 11 16:59:50 2012 -0700
@@ -0,0 +1,142 @@
+#
+# Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+# @test
+# @bug 7133495
+# @summary [macosx] KeyChain KeyStore implementation retrieves only one private key entry
+
+if [ "${TESTJAVA}" = "" ] ; then
+    JAVAC_CMD=`which javac`
+    TESTJAVA=`dirname $JAVAC_CMD`/..
+fi
+
+if [ "${TESTCLASSES}" = "" ] ; then
+    TESTCLASSES=`pwd`
+fi
+
+# Only run on MacOS
+OS=`uname -s`
+case "$OS" in
+    Darwin )
+        ;;
+    * )
+        echo "Will not run test on: ${OS}"
+        exit 0;
+        ;;
+esac
+
+PWD="xxxxxx"
+KEYTOOL="${TESTJAVA}/bin/keytool -storetype KeychainStore -keystore NONE -storepass $PWD"
+TEMPORARY_P12="$TESTCLASSES/7133495.p12"
+TEMPORARY_KC="$TESTCLASSES/7133495.keychain"
+CLEANUP_P12="rm -f $TEMPORARY_P12"
+CLEANUP_KC="security delete-keychain $TEMPORARY_KC"
+
+# Count the number of private key entries in the Keychain keystores
+
+COUNT=`$KEYTOOL -list | grep PrivateKeyEntry | wc -l`
+echo "Found $COUNT private key entries in the Keychain keystores"
+
+if [ $COUNT -gt 1 ]; then
+    exit 0
+fi
+
+# Create a temporary PKCS12 keystore containing 3 public/private keypairs
+
+RESULT=`$CLEANUP_P12`
+
+for i in X Y Z
+do
+    ${TESTJAVA}/bin/keytool -genkeypair \
+        -storetype PKCS12 \
+        -keystore $TEMPORARY_P12 \
+        -storepass $PWD \
+        -dname "CN=$i,OU=$i,O=$i,ST=$i,C=US" \
+        -alias 7133495-$i
+
+    if [ $? -ne 0 ]; then
+        echo "Error: cannot create keypair $i in the temporary PKCS12 keystore"
+        RESULT=`$CLEANUP_P12`
+        exit 1
+    fi
+done
+echo "Created a temporary PKCS12 keystore: $TEMPORARY_P12"
+
+# Create a temporary keychain
+
+security create-keychain -p $PWD $TEMPORARY_KC
+if [ $? -ne 0 ]; then
+    echo "Error: cannot create the temporary keychain"
+    RESULT=`$CLEANUP_P12`
+    exit 2
+fi
+echo "Created a temporary keychain: $TEMPORARY_KC"
+
+# Unlock the temporary keychain
+
+security unlock-keychain -p $PWD $TEMPORARY_KC
+if [ $? -ne 0 ]; then
+    echo "Error: cannot unlock the temporary keychain"
+    RESULT=`$CLEANUP_P12`
+    RESULT=`$CLEANUP_KC`
+    exit 3
+fi
+echo "Unlocked the temporary keychain"
+
+# Import the keypairs from the PKCS12 keystore into the keychain
+
+security import $TEMPORARY_P12 -k $TEMPORARY_KC -f pkcs12 -P $PWD
+if [ $? -ne 0 ]; then
+    echo "Error: cannot import keypairs from PKCS12 keystore into the keychain"
+    RESULT=`$CLEANUP_P12`
+    RESULT=`$CLEANUP_KC`
+    exit 4
+fi
+echo "Imported keypairs from PKCS12 keystore into the keychain"
+
+# Recount the number of private key entries in the Keychain keystores
+
+COUNT=`$KEYTOOL -list | grep PrivateKeyEntry | wc -l`
+echo "Found $COUNT private key entries in the Keychain keystore"
+if [ $COUNT -lt 3 ]; then
+    echo "Error: expected >2 private key entries in the Keychain keystores"
+    RESULT=`$CLEANUP_P12`
+    RESULT=`$CLEANUP_KC`
+    exit 5
+fi
+
+RESULT=`$CLEANUP_P12`
+if [ $? -ne 0 ]; then
+    echo "Error: cannot remove the temporary PKCS12 keystore"
+    exit 6
+fi
+echo "Removed the temporary PKCS12 keystore"
+
+RESULT=`$CLEANUP_KC`
+if [ $? -ne 0 ]; then
+    echo "Error: cannot remove the temporary keychain"
+    exit 7
+fi
+echo "Removed the temporary keychain"
+
+exit 0
--- a/jdk/test/sun/security/tools/keytool/autotest.sh	Thu Oct 11 09:50:14 2012 -0700
+++ b/jdk/test/sun/security/tools/keytool/autotest.sh	Thu Oct 11 16:59:50 2012 -0700
@@ -58,24 +58,18 @@
     LIBNAME="/usr/lib/mps/libsoftokn3.so"
     ;;
   Linux )
-    ARCH=`uname -m`
     FS="/"
-    case "$ARCH" in
-      i[3-6]86 )
+    ${TESTJAVA}${FS}bin${FS}java -XshowSettings:properties -version 2> allprop
+    cat allprop | grep os.arch | grep 64
+    if [ "$?" != "0" ]; then
         LIBNAME=`find_one \
             "/usr/lib/libsoftokn3.so" \
             "/usr/lib/i386-linux-gnu/nss/libsoftokn3.so"`
-        ;;
-      x86_64 )
+    else
         LIBNAME=`find_one \
             "/usr/lib64/libsoftokn3.so" \
             "/usr/lib/x86_64-linux-gnu/nss/libsoftokn3.so"`
-        ;;
-      * )
-        echo "Will not run test on: Linux ${ARCH}"
-        exit 0;
-        ;;
-    esac
+    fi
     ;;
   * )
     echo "Will not run test on: ${OS}"