Update JS project to Java project revision 46. Patch submitted by tronikos.
authorjia.shao.peng <jia.shao.peng@ee073f10-1060-11df-b6a4-87a95322a99c>
Thu, 12 Aug 2010 08:20:42 +0000 (08:20 +0000)
committerjia.shao.peng <jia.shao.peng@ee073f10-1060-11df-b6a4-87a95322a99c>
Thu, 12 Aug 2010 08:20:42 +0000 (08:20 +0000)
git-svn-id: http://libphonenumber.googlecode.com/svn/trunk@49 ee073f10-1060-11df-b6a4-87a95322a99c

javascript/README
javascript/i18n/phonenumbers/asyoutypeformatter.js
javascript/i18n/phonenumbers/asyoutypeformatter_test.js
javascript/i18n/phonenumbers/demo.html
javascript/i18n/phonenumbers/metadata.js
javascript/i18n/phonenumbers/metadatafortesting.js
javascript/i18n/phonenumbers/metadatalite.js [new file with mode: 0644]
javascript/i18n/phonenumbers/phonemetadata.pb.js
javascript/i18n/phonenumbers/phonenumberutil.js
javascript/i18n/phonenumbers/phonenumberutil_test.js

index 0e6fccb..47f8f16 100644 (file)
@@ -25,7 +25,7 @@ pages with your web browser:
 
 How to update:
 ==============
-The JavaScript library is ported from the Java implementation (revision 39).
+The JavaScript library is ported from the Java implementation (revision 46).
 When the Java project gets updated follow these steps to update the JavaScript
 project:
 
@@ -37,7 +37,7 @@ project:
         i18n.phonenumbers.PhoneNumberDesc.prototype.exactlySameAs(other)
         i18n.phonenumbers.PhoneNumber.prototype.exactlySameAs(other)
   c.  Manually update the toJsArray() Java methods in
-        /java/resources/com/google/i18n/phonenumbers/BuildMetadataJSON.java
+      /java/resources/com/google/i18n/phonenumbers/BuildMetadataJsonFromXml.java
 
 2.  If the phone number metadata in the XML format has changed
     (java/resources/com/google/i18n/phonenumbers/src/PhoneNumberMetaData.xml)
@@ -46,13 +46,17 @@ project:
 
     ant -f java/build.xml
     java -cp java/build/classes \
-      com.google.i18n.phonenumbers.BuildMetadataProtoFromXml \
+      com.google.i18n.phonenumbers.BuildMetadataJsonFromXml \
       java/resources/com/google/i18n/phonenumbers/src/PhoneNumberMetaData.xml \
-      javascript/i18n/phonenumbers/metadata.js false json
+      javascript/i18n/phonenumbers/metadata.js false
     java -cp java/build/classes \
-      com.google.i18n.phonenumbers.BuildMetadataProtoFromXml \
+      com.google.i18n.phonenumbers.BuildMetadataJsonFromXml \
+      java/resources/com/google/i18n/phonenumbers/src/PhoneNumberMetaData.xml \
+      javascript/i18n/phonenumbers/metadatalite.js true
+    java -cp java/build/classes \
+      com.google.i18n.phonenumbers.BuildMetadataJsonFromXml \
       java/resources/com/google/i18n/phonenumbers/test/PhoneNumberMetaDataForTesting.xml \
-      javascript/i18n/phonenumbers/metadatafortesting.js false json
+      javascript/i18n/phonenumbers/metadatafortesting.js false
 
 3.  Manually port any changes of the Java code to the JavaScript code:
       PhoneNumberUtil.java => phonenumberutil.js
index 99db063..fc2e0e2 100644 (file)
@@ -51,23 +51,38 @@ goog.require('i18n.phonenumbers.metadata');
  */
 i18n.phonenumbers.AsYouTypeFormatter = function(regionCode) {
   /**
-   * @type {boolean}
+   * A pattern that is used to match character classes in regular expressions.
+   * An example of a character class is [1-4].
+   * @const
+   * @type {RegExp}
    * @private
    */
-  this.ableToFormat_ = true;
+  this.CHARACTER_CLASS_PATTERN_ = /\[([^\[\]])*\]/g;
   /**
-   * @type {boolean}
+   * Any digit in a regular expression that actually denotes a digit. For
+   * example, in the regular expression 80[0-2]\d{6,10}, the first 2 digits
+   * (8 and 0) are standalone digits, but the rest are not.
+   * Two look-aheads are needed because the number following \\d could be a
+   * two-digit number, since the phone number can be as long as 15 digits.
+   * @const
+   * @type {RegExp}
    * @private
    */
-  this.isInternationalFormatting_ = false;
+  this.STANDALONE_DIGIT_PATTERN_ = /\d(?=[^,}][^,}])/g;
   /**
-   * @type {i18n.phonenumbers.PhoneNumberUtil}
+   * This is the minimum length of national number accrued that is required to
+   * trigger the formatter. The first element of the leadingDigitsPattern of
+   * each numberFormat contains a regular expression that matches up to this
+   * number of digits.
+   * @const
+   * @type {number}
    * @private
    */
-  this.phoneUtil_ = i18n.phonenumbers.PhoneNumberUtil.getInstance();
-  // The digits that have not been entered yet will be represented by a \u2008,
-  // the punctuation space.
+  this.MIN_LEADING_DIGITS_LENGTH_ = 3;
   /**
+   * The digits that have not been entered yet will be represented by a \u2008,
+   * the punctuation space.
+   * @const
    * @type {string}
    * @private
    */
@@ -77,58 +92,75 @@ i18n.phonenumbers.AsYouTypeFormatter = function(regionCode) {
    * @private
    */
   this.digitPattern_ = new RegExp(this.digitPlaceholder_);
+
   /**
-   * @type {number}
+   * @type {string}
    * @private
    */
-  this.lastMatchPosition_ = 0;
+  this.currentOutput_ = '';
   /**
-   * The position of a digit upon which inputDigitAndRememberPosition is most
-   * recently invoked, as found in the current output.
-   * @type {number}
+   * @type {!goog.string.StringBuffer}
    * @private
    */
-  this.positionRemembered_ = 0;
+  this.formattingTemplate_ = new goog.string.StringBuffer();
   /**
-   * The position of a digit upon which inputDigitAndRememberPosition is most
-   * recently invoked, as found in the original sequence of characters the user
-   * entered.
-   * @type {number}
+   * The pattern from numberFormat that is currently used to create
+   * formattingTemplate.
+   * @type {string}
    * @private
    */
-  this.originalPosition_ = 0;
+  this.currentFormattingPattern_ = '';
   /**
-   * A pattern that is used to match character classes in regular expressions.
-   * An example of a character class is [1-4].
-   * @type {RegExp}
+   * @type {!goog.string.StringBuffer}
    * @private
    */
-  this.CHARACTER_CLASS_PATTERN_ = /\[([^\[\]])*\]/g;
+  this.accruedInput_ = new goog.string.StringBuffer();
   /**
-   * Any digit in a regular expression that actually denotes a digit. For
-   * example, in the regular expression 80[0-2]\d{6,10}, the first 2 digits
-   * (8 and 0) are standalone digits, but the rest are not.
-   * Two look-aheads are needed because the number following \\d could be a
-   * two-digit number, since the phone number can be as long as 15 digits.
-   * @type {RegExp}
+   * @type {!goog.string.StringBuffer}
    * @private
    */
-  this.STANDALONE_DIGIT_PATTERN_ = /\d(?=[^,}][^,}])/g;
+  this.accruedInputWithoutFormatting_ = new goog.string.StringBuffer();
   /**
-   * @type {!goog.string.StringBuffer}
+   * @type {boolean}
    * @private
    */
-  this.accruedInput_ = new goog.string.StringBuffer();
+  this.ableToFormat_ = true;
   /**
-   * @type {!goog.string.StringBuffer}
+   * @type {boolean}
    * @private
    */
-  this.accruedInputWithoutFormatting_ = new goog.string.StringBuffer();
+  this.isInternationalFormatting_ = false;
   /**
-   * @type {!goog.string.StringBuffer}
+   * @type {boolean}
    * @private
    */
-  this.currentOutput_ = new goog.string.StringBuffer();
+  this.isExpectingCountryCode_ = false;
+  /**
+   * @type {i18n.phonenumbers.PhoneNumberUtil}
+   * @private
+   */
+  this.phoneUtil_ = i18n.phonenumbers.PhoneNumberUtil.getInstance();
+  /**
+   * @type {number}
+   * @private
+   */
+  this.lastMatchPosition_ = 0;
+  /**
+   * The position of a digit upon which inputDigitAndRememberPosition is most
+   * recently invoked, as found in the original sequence of characters the user
+   * entered.
+   * @type {number}
+   * @private
+   */
+  this.originalPosition_ = 0;
+  /**
+   * The position of a digit upon which inputDigitAndRememberPosition is most
+   * recently invoked, as found in accruedInputWithoutFormatting.
+   * entered.
+   * @type {number}
+   * @private
+   */
+  this.positionToRemember_ = 0;
   /**
    * @type {!goog.string.StringBuffer}
    * @private
@@ -140,6 +172,12 @@ i18n.phonenumbers.AsYouTypeFormatter = function(regionCode) {
    */
   this.nationalNumber_ = new goog.string.StringBuffer();
   /**
+   * @type {Array.<i18n.phonenumbers.NumberFormat>}
+   * @private
+   */
+  this.possibleFormats_ = [];
+
+  /**
    *  @type {string}
    * @private
    */
@@ -170,61 +208,82 @@ i18n.phonenumbers.AsYouTypeFormatter.prototype.initializeCountrySpecificInfo_ =
 };
 
 /**
- * @param {string} leadingFourDigitsOfNationalNumber
+ * @return {boolean} true if a new template is created as opposed to reusing the
+ *     existing template.
  * @private
  */
-i18n.phonenumbers.AsYouTypeFormatter.prototype.chooseFormatAndCreateTemplate_ =
-  function(leadingFourDigitsOfNationalNumber) {
+i18n.phonenumbers.AsYouTypeFormatter.prototype.maybeCreateNewTemplate_ =
+  function() {
 
-  /** @type {Array.<i18n.phonenumbers.NumberFormat>} */
-  var formatList = this.getAvailableFormats_(leadingFourDigitsOfNationalNumber);
-  if (formatList.length < 1) {
-    this.ableToFormat_ = false;
-  } else {
-    // When there are multiple available formats, the formatter uses the first
-    // format.
+  // When there are multiple available formats, the formatter uses the first
+  // format where a formatting template could be created.
+  /** @type {number} */
+  var possibleFormatsLength = this.possibleFormats_.length;
+  for (var i = 0; i < possibleFormatsLength; ++i) {
     /** @type {i18n.phonenumbers.NumberFormat} */
-    var format = formatList[0];
-    if (!this.createFormattingTemplate_(format)) {
-      this.ableToFormat_ = false;
-    } else {
-      this.currentOutput_ =
-          new goog.string.StringBuffer(this.formattingTemplate_);
+    var numberFormat = this.possibleFormats_[i];
+    /** @type {string} */
+    var pattern = numberFormat.getPatternOrDefault();
+    if (this.currentFormattingPattern_ == pattern) {
+      return false;
+    }
+    if (this.createFormattingTemplate_(numberFormat)) {
+      this.currentFormattingPattern_ = pattern;
+      return true;
     }
   }
+  this.ableToFormat_ = false;
+  return false;
 };
 
 /**
- * @param {string} leadingFourDigits
- * @return {Array.<i18n.phonenumbers.NumberFormat>}
+ * @param {string} leadingThreeDigits
  * @private
  */
 i18n.phonenumbers.AsYouTypeFormatter.prototype.getAvailableFormats_ =
-  function(leadingFourDigits) {
+  function(leadingThreeDigits) {
 
   /** @type {Array.<i18n.phonenumbers.NumberFormat>} */
-  var matchedList = [];
-  /** @type {Array.<i18n.phonenumbers.NumberFormat>} */
   var formatList = (this.isInternationalFormatting_ && this.currentMetaData_
       .intlNumberFormatCount() > 0) ? this.currentMetaData_
       .intlNumberFormatArray() : this.currentMetaData_.numberFormatArray();
+  this.possibleFormats_ = formatList;
+  this.narrowDownPossibleFormats_(leadingThreeDigits);
+};
+
+/**
+ * @param {string} leadingDigits
+ * @private
+ */
+i18n.phonenumbers.AsYouTypeFormatter.prototype.narrowDownPossibleFormats_ =
+  function(leadingDigits) {
+
+  /** @type {Array.<i18n.phonenumbers.NumberFormat>} */
+  var possibleFormats = [];
+  /** @type {number} */
+  var lengthOfLeadingDigits = leadingDigits.length;
   /** @type {number} */
-  var formatListLength = formatList.length;
-  for (var i = 0; i < formatListLength; ++i) {
+  var indexOfLeadingDigitsPattern =
+      lengthOfLeadingDigits - this.MIN_LEADING_DIGITS_LENGTH_;
+  /** @type {number} */
+  var possibleFormatsLength = this.possibleFormats_.length;
+  for (var i = 0; i < possibleFormatsLength; ++i) {
     /** @type {i18n.phonenumbers.NumberFormat} */
-    var format = formatList[i];
-    if (format.hasLeadingDigits()) {
+    var format = this.possibleFormats_[i];
+    if (format.leadingDigitsPatternCount() > indexOfLeadingDigitsPattern) {
       /** @type {RegExp} */
-      var leadingDigitsPattern =
-          new RegExp('^(' + format.getLeadingDigits() + ')');
-      if (leadingDigitsPattern.test(leadingFourDigits)) {
-        matchedList.push(format);
+      var leadingDigitsPattern = new RegExp('^(' +
+          format.getLeadingDigitsPattern(indexOfLeadingDigitsPattern) + ')');
+      if (leadingDigitsPattern.test(leadingDigits)) {
+        possibleFormats.push(this.possibleFormats_[i]);
       }
     } else {
-      matchedList.push(format);
+      // else the particular format has no more specific leadingDigitsPattern,
+      // and it should be retained.
+      possibleFormats.push(this.possibleFormats_[i]);
     }
   }
-  return matchedList;
+  this.possibleFormats_ = possibleFormats;
 };
 
 /**
@@ -251,9 +310,9 @@ i18n.phonenumbers.AsYouTypeFormatter.prototype.createFormattingTemplate_ =
 
   // Replace any standalone digit (not the one in d{}) with \d
   numberPattern = numberPattern.replace(this.STANDALONE_DIGIT_PATTERN_, '\\d');
-
-  this.formattingTemplate_ = this.getFormattingTemplate_(numberPattern,
-      numberFormat);
+  this.formattingTemplate_.clear();
+  this.formattingTemplate_.append(this.getFormattingTemplate_(numberPattern,
+      numberFormat));
   return true;
 };
 
@@ -291,16 +350,20 @@ i18n.phonenumbers.AsYouTypeFormatter.prototype.getFormattingTemplate_ =
  * Clears the internal state of the formatter, so it could be reused.
  */
 i18n.phonenumbers.AsYouTypeFormatter.prototype.clear = function() {
+  this.currentOutput_ = '';
   this.accruedInput_.clear();
   this.accruedInputWithoutFormatting_.clear();
-  this.currentOutput_.clear();
+  this.formattingTemplate_.clear();
   this.lastMatchPosition_ = 0;
+  this.currentFormattingPattern_ = '';
   this.prefixBeforeNationalNumber_.clear();
   this.nationalNumber_.clear();
   this.ableToFormat_ = true;
-  this.positionRemembered_ = 0;
+  this.positionToRemember_ = 0;
   this.originalPosition_ = 0;
   this.isInternationalFormatting_ = false;
+  this.isExpectingCountryCode_ = false;
+  this.possibleFormats_ = [];
   if (this.currentMetaData_ != this.defaultMetaData_) {
     this.initializeCountrySpecificInfo_(this.defaultCountry_);
   }
@@ -314,7 +377,9 @@ i18n.phonenumbers.AsYouTypeFormatter.prototype.clear = function() {
  * @return {string} the partially formatted phone number.
  */
 i18n.phonenumbers.AsYouTypeFormatter.prototype.inputDigit = function(nextChar) {
-  return this.inputDigitWithOptionToRememberPosition_(nextChar, false);
+  this.currentOutput_ =
+      this.inputDigitWithOptionToRememberPosition_(nextChar, false);
+  return this.currentOutput_;
 };
 
 /**
@@ -329,13 +394,16 @@ i18n.phonenumbers.AsYouTypeFormatter.prototype.inputDigit = function(nextChar) {
 i18n.phonenumbers.AsYouTypeFormatter.prototype.inputDigitAndRememberPosition =
   function(nextChar) {
 
-  return this.inputDigitWithOptionToRememberPosition_(nextChar, true);
+  this.currentOutput_ =
+      this.inputDigitWithOptionToRememberPosition_(nextChar, true);
+  return this.currentOutput_;
 };
 
 /**
  * @param {string} nextChar
  * @param {boolean} rememberPosition
  * @return {string}
+ * @private
  */
 i18n.phonenumbers.AsYouTypeFormatter.prototype.
     inputDigitWithOptionToRememberPosition_ = function(nextChar,
@@ -343,8 +411,7 @@ i18n.phonenumbers.AsYouTypeFormatter.prototype.
 
   this.accruedInput_.append(nextChar);
   if (rememberPosition) {
-    this.positionRemembered_ = this.accruedInput_.getLength();
-    this.originalPosition_ = this.positionRemembered_;
+    this.originalPosition_ = this.accruedInput_.getLength();
   }
   // We do formatting on-the-fly only when each character entered is either a
   // plus sign or a digit.
@@ -353,53 +420,97 @@ i18n.phonenumbers.AsYouTypeFormatter.prototype.
     this.ableToFormat_ = false;
   }
   if (!this.ableToFormat_) {
-    this.resetPositionOnFailureToFormat_();
     return this.accruedInput_.toString();
   }
 
-  nextChar = this.normalizeAndAccrueDigitsAndPlusSign_(nextChar);
+  nextChar = this.normalizeAndAccrueDigitsAndPlusSign_(nextChar,
+                                                       rememberPosition);
 
-  // We start to attempt to format only when at least 6 digits (the plus sign is
-  // counted as a digit as well for this purpose) have been entered.
+  // We start to attempt to format only when at least MIN_LEADING_DIGITS_LENGTH
+  // digits (the plus sign is counted as a digit as well for this purpose) have
+  // been entered.
   switch (this.accruedInputWithoutFormatting_.getLength()) {
   case 0: // this is the case where the first few inputs are neither digits nor
           // the plus sign.
   case 1:
   case 2:
+    return this.accruedInput_.toString();
   case 3:
+    if (this.attemptToExtractIdd_()) {
+      this.isExpectingCountryCode_ = true;
+    } else {
+      // No IDD or plus sign is found, must be entering in national format.
+      this.removeNationalPrefixFromNationalNumber_();
+      return this.attemptToChooseFormattingPattern_();
+    }
   case 4:
   case 5:
-    return this.accruedInput_.toString();
+    if (this.isExpectingCountryCode_) {
+      if (this.attemptToExtractCountryCode_()) {
+        this.isExpectingCountryCode_ = false;
+      }
+      return this.prefixBeforeNationalNumber_.toString() +
+          this.nationalNumber_.toString();
+    }
+  // We make a last attempt to extract a country code at the 6th digit because
+  // the maximum length of IDD and country code are both 3.
   case 6:
-    if (!this.extractIddAndValidCountryCode_()) {
+    if (this.isExpectingCountryCode_ && !this.attemptToExtractCountryCode_()) {
       this.ableToFormat_ = false;
       return this.accruedInput_.toString();
     }
-    this.removeNationalPrefixFromNationalNumber_();
-    return this.attemptToChooseFormattingPattern_(rememberPosition);
   default:
-    if (this.nationalNumber_.getLength() > 4) {
+    if (this.possibleFormats_.length > 0) {
       // The formatting pattern is already chosen.
       /** @type {string} */
-      var temp = this.inputDigitHelper_(nextChar, rememberPosition);
+      var tempNationalNumber = this.inputDigitHelper_(nextChar);
+      // See if the accrued digits can be formatted properly already. If not,
+      // use the results from inputDigitHelper, which does formatting based on
+      // the formatting pattern chosen.
+      /** @type {string} */
+      var formattedNumber = this.attemptToFormatAccruedDigits_();
+      if (formattedNumber.length > 0) {
+        return formattedNumber;
+      }
+      this.narrowDownPossibleFormats_(this.nationalNumber_.toString());
+      if (this.maybeCreateNewTemplate_()) {
+        return this.inputAccruedNationalNumber_();
+      }
       return this.ableToFormat_ ?
-          this.prefixBeforeNationalNumber_.toString() + temp : temp;
+          this.prefixBeforeNationalNumber_.toString() + tempNationalNumber :
+          tempNationalNumber;
     } else {
-      return this.attemptToChooseFormattingPattern_(rememberPosition);
+      return this.attemptToChooseFormattingPattern_();
     }
   }
 };
 
 /**
+ * @return {string}
  * @private
  */
-i18n.phonenumbers.AsYouTypeFormatter.prototype.resetPositionOnFailureToFormat_ =
+i18n.phonenumbers.AsYouTypeFormatter.prototype.attemptToFormatAccruedDigits_ =
   function() {
 
-  if (this.positionRemembered_ > 0) {
-    this.positionRemembered_ = this.originalPosition_;
-    this.currentOutput_.clear();
+  /** @type {string} */
+  var nationalNumber = this.nationalNumber_.toString();
+  /** @type {number} */
+  var possibleFormatsLength = this.possibleFormats_.length;
+  for (var i = 0; i < possibleFormatsLength; ++i) {
+    /** @type {i18n.phonenumbers.NumberFormat} */
+    var numFormat = this.possibleFormats_[i];
+    /** @type {string} */
+    var pattern = numFormat.getPatternOrDefault();
+    /** @type {RegExp} */
+    var patternRegExp = new RegExp('^(' + pattern + ')$');
+    if (patternRegExp.test(nationalNumber)) {
+      /** @type {string} */
+      var formattedNumber = nationalNumber.replace(new RegExp(pattern, 'g'),
+                                                   numFormat.getFormat());
+      return this.prefixBeforeNationalNumber_.toString() + formattedNumber;
+    }
   }
+  return '';
 };
 
 /**
@@ -412,36 +523,51 @@ i18n.phonenumbers.AsYouTypeFormatter.prototype.resetPositionOnFailureToFormat_ =
 i18n.phonenumbers.AsYouTypeFormatter.prototype.getRememberedPosition =
   function() {
 
-  return this.positionRemembered_;
+  if (!this.ableToFormat_) {
+    return this.originalPosition_;
+  }
+  /** @type {number} */
+  var accruedInputIndex = 0;
+  /** @type {number} */
+  var currentOutputIndex = 0;
+  /** @type {string} */
+  var accruedInputWithoutFormatting =
+      this.accruedInputWithoutFormatting_.toString();
+  /** @type {string} */
+  var currentOutput = this.currentOutput_.toString();
+  while (accruedInputIndex < this.positionToRemember_) {
+    if (accruedInputWithoutFormatting.charAt(accruedInputIndex) ==
+        currentOutput.charAt(currentOutputIndex)) {
+      accruedInputIndex++;
+      currentOutputIndex++;
+    } else {
+      currentOutputIndex++;
+    }
+  }
+  return currentOutputIndex;
 };
 
 /**
  * Attempts to set the formatting template and returns a string which contains
  * the formatted version of the digits entered so far.
  *
- * @param {boolean} rememberPosition
  * @return {string}
  * @private
  */
 i18n.phonenumbers.AsYouTypeFormatter.prototype.
-    attemptToChooseFormattingPattern_ = function(rememberPosition) {
+    attemptToChooseFormattingPattern_ = function() {
 
   /** @type {string} */
   var nationalNumber = this.nationalNumber_.toString();
-  /** @type {number} */
-  var nationalNumberLength = nationalNumber.length;
-  // We start to attempt to format only when as least 4 digits of national
-  // number (excluding national prefix) have been entered.
-  if (nationalNumberLength >= 4) {
-    this.chooseFormatAndCreateTemplate_(nationalNumber.substring(0, 4));
-    return this.inputAccruedNationalNumber_(rememberPosition);
+  // We start to attempt to format only when as least MIN_LEADING_DIGITS_LENGTH
+  // digits of national number (excluding national prefix) have been entered.
+  if (nationalNumber.length >= this.MIN_LEADING_DIGITS_LENGTH_) {
+    this.getAvailableFormats_(
+        nationalNumber.substring(0, this.MIN_LEADING_DIGITS_LENGTH_));
+    this.maybeCreateNewTemplate_();
+    return this.inputAccruedNationalNumber_();
   } else {
-    if (rememberPosition) {
-      this.positionRemembered_ =
-          this.prefixBeforeNationalNumber_.length() + nationalNumberLength;
-    }
-    return this.prefixBeforeNationalNumber_.toString() +
-        this.nationalNumber_.toString();
+    return this.prefixBeforeNationalNumber_.toString() + nationalNumber;
   }
 };
 
@@ -449,42 +575,27 @@ i18n.phonenumbers.AsYouTypeFormatter.prototype.
  * Invokes inputDigitHelper on each digit of the national number accrued, and
  * returns a formatted string in the end.
  *
- * @param {boolean} rememberPosition
  * @return {string}
  * @private
  */
 i18n.phonenumbers.AsYouTypeFormatter.prototype.inputAccruedNationalNumber_ =
-  function(rememberPosition) {
+  function() {
 
+  /** @type {string} */
+  var nationalNumber = this.nationalNumber_.toString();
   /** @type {number} */
-  var lengthOfNationalNumber = this.nationalNumber_.getLength();
+  var lengthOfNationalNumber = nationalNumber.length;
   if (lengthOfNationalNumber > 0) {
-    // The positionRemembered should be only adjusted once in the loop that
-    // follows.
-    /** @type {boolean} */
-    var positionAlreadyAdjusted = false;
     /** @type {string} */
     var tempNationalNumber = '';
     for (var i = 0; i < lengthOfNationalNumber; i++) {
       tempNationalNumber =
-          this.inputDigitHelper_(this.nationalNumber_.toString().charAt(i),
-                                 rememberPosition);
-      if (!positionAlreadyAdjusted &&
-          this.positionRemembered_ -
-              this.prefixBeforeNationalNumber_.getLength() == i + 1) {
-        this.positionRemembered_ =
-            this.prefixBeforeNationalNumber_.getLength() +
-            tempNationalNumber.length;
-        positionAlreadyAdjusted = true;
-      }
+          this.inputDigitHelper_(nationalNumber.charAt(i));
     }
     return this.ableToFormat_ ?
         this.prefixBeforeNationalNumber_.toString() + tempNationalNumber :
         tempNationalNumber;
   } else {
-    if (rememberPosition) {
-      this.positionRemembered_ = this.prefixBeforeNationalNumber_.length();
-    }
     return this.prefixBeforeNationalNumber_.toString();
   }
 };
@@ -503,13 +614,7 @@ i18n.phonenumbers.AsYouTypeFormatter.prototype.
       nationalNumber.charAt(0) == '1') {
     startOfNationalNumber = 1;
     this.prefixBeforeNationalNumber_.append('1 ');
-    // Since a space is inserted after the national prefix in this case, we
-    // increase the remembered position by 1 for anything that is after the
-    // national prefix.
-    if (this.positionRemembered_ >
-        this.prefixBeforeNationalNumber_.getLength() - 1) {
-      this.positionRemembered_++;
-    }
+    this.isInternationalFormatting_ = true;
   } else if (this.currentMetaData_.hasNationalPrefix()) {
     /** @type {Array.<string>} */
     var m = nationalNumber.match(this.nationalPrefixForParsing_);
@@ -524,70 +629,73 @@ i18n.phonenumbers.AsYouTypeFormatter.prototype.
 };
 
 /**
- * Extracts IDD, plus sign and country code to prefixBeforeNationalNumber when
- * they are available, and places the remaining input into nationalNumber.
+ * Extracts IDD and plus sign to prefixBeforeNationalNumber when they are
+ * available, and places the remaining input into nationalNumber.
  *
- * @return {boolean} false when accruedInputWithoutFormatting begins with the
- *     plus sign or valid IDD for defaultCountry, but the sequence of digits
- *     after that does not form a valid country code. It returns true for all
- *     other cases.
+ * @return {boolean} true when accruedInputWithoutFormatting begins with the
+ *     plus sign or valid IDD for defaultCountry.
  * @private
  */
-i18n.phonenumbers.AsYouTypeFormatter.prototype.extractIddAndValidCountryCode_ =
+i18n.phonenumbers.AsYouTypeFormatter.prototype.attemptToExtractIdd_ =
   function() {
 
   /** @type {string} */
   var accruedInputWithoutFormatting =
       this.accruedInputWithoutFormatting_.toString();
-  this.nationalNumber_.clear();
   /** @type {Array.<string>} */
   var m = accruedInputWithoutFormatting.match(this.internationalPrefix_);
   if (m != null && m[0] != null && m[0].length > 0) {
     this.isInternationalFormatting_ = true;
     /** @type {number} */
     var startOfCountryCode = m[0].length;
-    /** @type {!goog.string.StringBuffer} */
-    var numberIncludeCountryCode = new goog.string.StringBuffer(
+    this.nationalNumber_.clear();
+    this.nationalNumber_.append(
         accruedInputWithoutFormatting.substring(startOfCountryCode));
+    this.prefixBeforeNationalNumber_.append(
+        accruedInputWithoutFormatting.substring(0, startOfCountryCode));
+    if (accruedInputWithoutFormatting.charAt(0) !=
+        i18n.phonenumbers.PhoneNumberUtil.PLUS_SIGN) {
+      this.prefixBeforeNationalNumber_.append(' ');
+    }
+    return true;
+  }
+  return false;
+};
+
+/**
+ * Extracts country code from the beginning of nationalNumber to
+ * prefixBeforeNationalNumber when they are available, and places the remaining
+ * input into nationalNumber.
+ *
+ * @return {boolean} true when a valid country code can be found.
+ * @private
+ */
+i18n.phonenumbers.AsYouTypeFormatter.prototype.attemptToExtractCountryCode_ =
+  function() {
+
+    if (this.nationalNumber_.getLength() == 0) {
+      return false;
+    }
+    /** @type {!goog.string.StringBuffer} */
+    var numberWithoutCountryCode = new goog.string.StringBuffer();
     /** @type {number} */
     var countryCode = this.phoneUtil_.extractCountryCode(
-        numberIncludeCountryCode, this.nationalNumber_);
+        this.nationalNumber_, numberWithoutCountryCode);
     if (countryCode == 0) {
       return false;
     } else {
+      this.nationalNumber_.clear();
+      this.nationalNumber_.append(numberWithoutCountryCode.toString());
       /** @type {string} */
       var newRegionCode =
           this.phoneUtil_.getRegionCodeForCountryCode(countryCode);
       if (newRegionCode != this.defaultCountry_) {
         this.initializeCountrySpecificInfo_(newRegionCode);
       }
-      this.prefixBeforeNationalNumber_.append(accruedInputWithoutFormatting
-          .substring(0, startOfCountryCode));
-      if (accruedInputWithoutFormatting.charAt(0) !=
-          i18n.phonenumbers.PhoneNumberUtil.PLUS_SIGN) {
-        if (this.positionRemembered_ >
-            this.prefixBeforeNationalNumber_.getLength()) {
-          // Since a space will be inserted in front of the country code in this
-          // case, we increase the remembered position by 1.
-          this.positionRemembered_++;
-        }
-        this.prefixBeforeNationalNumber_.append(' ');
-      }
       /** @type {string} */
       var countryCodeString = '' + countryCode;
-      if (this.positionRemembered_ >
-          this.prefixBeforeNationalNumber_.getLength() +
-              countryCodeString.length) {
-        // Since a space will be inserted after the country code in this case,
-        // we increase the remembered position by 1.
-        this.positionRemembered_++;
-      }
       this.prefixBeforeNationalNumber_.append(countryCodeString).append(' ');
     }
-  } else {
-    this.nationalNumber_.clear();
-    this.nationalNumber_.append(accruedInputWithoutFormatting);
-  }
   return true;
 };
 
@@ -599,59 +707,51 @@ i18n.phonenumbers.AsYouTypeFormatter.prototype.extractIddAndValidCountryCode_ =
  * in non-ASCII format.
  *
  * @param {string} nextChar
+ * @param {boolean} rememberPosition
  * @return {string}
  * @private
  */
 i18n.phonenumbers.AsYouTypeFormatter.prototype.
-    normalizeAndAccrueDigitsAndPlusSign_ = function(nextChar) {
+    normalizeAndAccrueDigitsAndPlusSign_ = function(nextChar,
+                                                    rememberPosition) {
 
   if (nextChar == i18n.phonenumbers.PhoneNumberUtil.PLUS_SIGN) {
     this.accruedInputWithoutFormatting_.append(nextChar);
   }
-
   if (nextChar in i18n.phonenumbers.PhoneNumberUtil.DIGIT_MAPPINGS) {
     nextChar = i18n.phonenumbers.PhoneNumberUtil.DIGIT_MAPPINGS[nextChar];
     this.accruedInputWithoutFormatting_.append(nextChar);
     this.nationalNumber_.append(nextChar);
   }
+  if (rememberPosition) {
+    this.positionToRemember_ = this.accruedInputWithoutFormatting_.getLength();
+  }
   return nextChar;
 };
 
 /**
  * @param {string} nextChar
- * @param {boolean} rememberPosition
  * @return {string}
  * @private
  */
 i18n.phonenumbers.AsYouTypeFormatter.prototype.inputDigitHelper_ =
-  function(nextChar, rememberPosition) {
-
-  if (!(nextChar in i18n.phonenumbers.PhoneNumberUtil.DIGIT_MAPPINGS)) {
-    return this.currentOutput_.toString();
-  }
+  function(nextChar) {
 
   /** @type {string} */
-  var currentOutput = this.currentOutput_.toString();
-  /** @type {string} */
-  var currentOutput2 = currentOutput.substring(this.lastMatchPosition_);
-  /** @type {number} */
-  var digitPatternStart = currentOutput2.search(this.digitPattern_);
-  if (digitPatternStart >= 0) {
-    this.currentOutput_ = new goog.string.StringBuffer(
-        currentOutput.substring(0, this.lastMatchPosition_) +
-        currentOutput2.replace(this.digitPattern_, nextChar));
-    this.lastMatchPosition_ += digitPatternStart;
-    if (rememberPosition) {
-      this.positionRemembered_ = this.prefixBeforeNationalNumber_.getLength() +
-          this.lastMatchPosition_ + 1;
-    }
-    return this.currentOutput_.toString()
-        .substring(0, this.lastMatchPosition_ + 1);
+  var formattingTemplate = this.formattingTemplate_.toString();
+  if (formattingTemplate.substring(this.lastMatchPosition_)
+      .search(this.digitPattern_) >= 0) {
+    /** @type {number} */
+    var digitPatternStart = formattingTemplate.search(this.digitPattern_);
+    /** @type {string} */
+    var tempTemplate = formattingTemplate.replace(this.digitPattern_, nextChar);
+    this.formattingTemplate_.clear();
+    this.formattingTemplate_.append(tempTemplate);
+    this.lastMatchPosition_ = digitPatternStart;
+    return tempTemplate.substring(0, this.lastMatchPosition_ + 1);
   } else {
     // More digits are entered than we could handle.
-    this.currentOutput_.append(nextChar);
     this.ableToFormat_ = false;
-    this.resetPositionOnFailureToFormat_();
     return this.accruedInput_.toString();
   }
 };
index 1109652..831d3b4 100644 (file)
 goog.require('goog.testing.jsunit');
 goog.require('i18n.phonenumbers.AsYouTypeFormatter');
 
-function testAsYouTypeFormatterUS() {
+function testAYTFUS() {
   /** @type {i18n.phonenumbers.AsYouTypeFormatter} */
   var f = new i18n.phonenumbers.AsYouTypeFormatter('US');
   assertEquals('6', f.inputDigit('6'));
   assertEquals('65', f.inputDigit('5'));
   assertEquals('650', f.inputDigit('0'));
-  assertEquals('6502', f.inputDigit('2'));
-  assertEquals('65025', f.inputDigit('5'));
+  assertEquals('650 2', f.inputDigit('2'));
+  assertEquals('650 25', f.inputDigit('5'));
   assertEquals('650 253', f.inputDigit('3'));
-  assertEquals('650 253 2', f.inputDigit('2'));
+  // Note this is how a US local number (without area code) should be formatted.
+  assertEquals('650 2532', f.inputDigit('2'));
   assertEquals('650 253 22', f.inputDigit('2'));
   assertEquals('650 253 222', f.inputDigit('2'));
   assertEquals('650 253 2222', f.inputDigit('2'));
@@ -38,9 +39,9 @@ function testAsYouTypeFormatterUS() {
   f.clear();
   assertEquals('1', f.inputDigit('1'));
   assertEquals('16', f.inputDigit('6'));
-  assertEquals('165', f.inputDigit('5'));
-  assertEquals('1650', f.inputDigit('0'));
-  assertEquals('16502', f.inputDigit('2'));
+  assertEquals('1 65', f.inputDigit('5'));
+  assertEquals('1 650', f.inputDigit('0'));
+  assertEquals('1 650 2', f.inputDigit('2'));
   assertEquals('1 650 25', f.inputDigit('5'));
   assertEquals('1 650 253', f.inputDigit('3'));
   assertEquals('1 650 253 2', f.inputDigit('2'));
@@ -51,12 +52,12 @@ function testAsYouTypeFormatterUS() {
   f.clear();
   assertEquals('0', f.inputDigit('0'));
   assertEquals('01', f.inputDigit('1'));
-  assertEquals('011', f.inputDigit('1'));
-  assertEquals('0114', f.inputDigit('4'));
-  assertEquals('01144', f.inputDigit('4'));
+  assertEquals('011 ', f.inputDigit('1'));
+  assertEquals('011 4', f.inputDigit('4'));
+  assertEquals('011 44 ', f.inputDigit('4'));
   assertEquals('011 44 6', f.inputDigit('6'));
   assertEquals('011 44 61', f.inputDigit('1'));
-  assertEquals('011 44 612', f.inputDigit('2'));
+  assertEquals('011 44 6 12', f.inputDigit('2'));
   assertEquals('011 44 6 123', f.inputDigit('3'));
   assertEquals('011 44 6 123 1', f.inputDigit('1'));
   assertEquals('011 44 6 123 12', f.inputDigit('2'));
@@ -68,12 +69,12 @@ function testAsYouTypeFormatterUS() {
   f.clear();
   assertEquals('0', f.inputDigit('0'));
   assertEquals('01', f.inputDigit('1'));
-  assertEquals('011', f.inputDigit('1'));
-  assertEquals('0115', f.inputDigit('5'));
-  assertEquals('01154', f.inputDigit('4'));
+  assertEquals('011 ', f.inputDigit('1'));
+  assertEquals('011 5', f.inputDigit('5'));
+  assertEquals('011 54 ', f.inputDigit('4'));
   assertEquals('011 54 9', f.inputDigit('9'));
   assertEquals('011 54 91', f.inputDigit('1'));
-  assertEquals('011 54 911', f.inputDigit('1'));
+  assertEquals('011 54 9 11', f.inputDigit('1'));
   assertEquals('011 54 9 11 2', f.inputDigit('2'));
   assertEquals('011 54 9 11 23', f.inputDigit('3'));
   assertEquals('011 54 9 11 231', f.inputDigit('1'));
@@ -84,12 +85,29 @@ function testAsYouTypeFormatterUS() {
   assertEquals('011 54 9 11 2312 1234', f.inputDigit('4'));
 
   f.clear();
+  assertEquals('0', f.inputDigit('0'));
+  assertEquals('01', f.inputDigit('1'));
+  assertEquals('011 ', f.inputDigit('1'));
+  assertEquals('011 2', f.inputDigit('2'));
+  assertEquals('011 24', f.inputDigit('4'));
+  assertEquals('011 244 ', f.inputDigit('4'));
+  assertEquals('011 244 2', f.inputDigit('2'));
+  assertEquals('011 244 28', f.inputDigit('8'));
+  assertEquals('011 244 280', f.inputDigit('0'));
+  assertEquals('011 244 280 0', f.inputDigit('0'));
+  assertEquals('011 244 280 00', f.inputDigit('0'));
+  assertEquals('011 244 280 000', f.inputDigit('0'));
+  assertEquals('011 244 280 000 0', f.inputDigit('0'));
+  assertEquals('011 244 280 000 00', f.inputDigit('0'));
+  assertEquals('011 244 280 000 000', f.inputDigit('0'));
+
+  f.clear();
   assertEquals('+', f.inputDigit('+'));
   assertEquals('+4', f.inputDigit('4'));
-  assertEquals('+48', f.inputDigit('8'));
-  assertEquals('+488', f.inputDigit('8'));
-  assertEquals('+4888', f.inputDigit('8'));
-  assertEquals('+48 881', f.inputDigit('1'));
+  assertEquals('+48 ', f.inputDigit('8'));
+  assertEquals('+48 8', f.inputDigit('8'));
+  assertEquals('+48 88', f.inputDigit('8'));
+  assertEquals('+48 88 1', f.inputDigit('1'));
   assertEquals('+48 88 12', f.inputDigit('2'));
   assertEquals('+48 88 123', f.inputDigit('3'));
   assertEquals('+48 88 123 1', f.inputDigit('1'));
@@ -98,22 +116,22 @@ function testAsYouTypeFormatterUS() {
   assertEquals('+48 88 123 12 12', f.inputDigit('2'));
 }
 
-function testAsYouTypeFormatterUSFullWidthCharacters() {
+function testAYTFUSFullWidthCharacters() {
   /** @type {i18n.phonenumbers.AsYouTypeFormatter} */
   var f = new i18n.phonenumbers.AsYouTypeFormatter('US');
   assertEquals('\uFF16', f.inputDigit('\uFF16'));
   assertEquals('\uFF16\uFF15', f.inputDigit('\uFF15'));
-  assertEquals('\uFF16\uFF15\uFF10', f.inputDigit('\uFF10'));
-  assertEquals('\uFF16\uFF15\uFF10\uFF12', f.inputDigit('\uFF12'));
-  assertEquals('\uFF16\uFF15\uFF10\uFF12\uFF15', f.inputDigit('\uFF15'));
+  assertEquals('650', f.inputDigit('\uFF10'));
+  assertEquals('650 2', f.inputDigit('\uFF12'));
+  assertEquals('650 25', f.inputDigit('\uFF15'));
   assertEquals('650 253', f.inputDigit('\uFF13'));
-  assertEquals('650 253 2', f.inputDigit('\uFF12'));
+  assertEquals('650 2532', f.inputDigit('\uFF12'));
   assertEquals('650 253 22', f.inputDigit('\uFF12'));
   assertEquals('650 253 222', f.inputDigit('\uFF12'));
   assertEquals('650 253 2222', f.inputDigit('\uFF12'));
 }
 
-function testAsYouTypeFormatterUSMobileShortCode() {
+function testAYTFUSMobileShortCode() {
   /** @type {i18n.phonenumbers.AsYouTypeFormatter} */
   var f = new i18n.phonenumbers.AsYouTypeFormatter('US');
   assertEquals('*', f.inputDigit('*'));
@@ -123,7 +141,7 @@ function testAsYouTypeFormatterUSMobileShortCode() {
   assertEquals('*121#', f.inputDigit('#'));
 }
 
-function testAsYouTypeFormatterUSVanityNumber() {
+function testAYTFUSVanityNumber() {
   /** @type {i18n.phonenumbers.AsYouTypeFormatter} */
   var f = new i18n.phonenumbers.AsYouTypeFormatter('US');
   assertEquals('8', f.inputDigit('8'));
@@ -140,17 +158,17 @@ function testAsYouTypeFormatterUSVanityNumber() {
   assertEquals('800 MY APPLE', f.inputDigit('E'));
 }
 
-function testAsYouTypeFormatterAndRememberPositionUS() {
+function testAYTFAndRememberPositionUS() {
   /** @type {i18n.phonenumbers.AsYouTypeFormatter} */
   var f = new i18n.phonenumbers.AsYouTypeFormatter('US');
   assertEquals('1', f.inputDigitAndRememberPosition('1'));
   assertEquals(1, f.getRememberedPosition());
   assertEquals('16', f.inputDigit('6'));
-  assertEquals('165', f.inputDigit('5'));
+  assertEquals('1 65', f.inputDigit('5'));
   assertEquals(1, f.getRememberedPosition());
-  assertEquals('1650', f.inputDigitAndRememberPosition('0'));
-  assertEquals(4, f.getRememberedPosition());
-  assertEquals('16502', f.inputDigit('2'));
+  assertEquals('1 650', f.inputDigitAndRememberPosition('0'));
+  assertEquals(5, f.getRememberedPosition());
+  assertEquals('1 650 2', f.inputDigit('2'));
   assertEquals('1 650 25', f.inputDigit('5'));
   // Note the remembered position for digit '0' changes from 4 to 5, because a
   // space is now inserted in the front.
@@ -170,39 +188,40 @@ function testAsYouTypeFormatterAndRememberPositionUS() {
 
   f.clear();
   assertEquals('1', f.inputDigit('1'));
-  assertEquals('16', f.inputDigit('6'));
-  assertEquals('165', f.inputDigitAndRememberPosition('5'));
-  assertEquals('1650', f.inputDigit('0'));
+  assertEquals('16', f.inputDigitAndRememberPosition('6'));
+  assertEquals(2, f.getRememberedPosition());
+  assertEquals('1 65', f.inputDigit('5'));
+  assertEquals('1 650', f.inputDigit('0'));
   assertEquals(3, f.getRememberedPosition());
-  assertEquals('16502', f.inputDigit('2'));
+  assertEquals('1 650 2', f.inputDigit('2'));
   assertEquals('1 650 25', f.inputDigit('5'));
-  assertEquals(4, f.getRememberedPosition());
+  assertEquals(3, f.getRememberedPosition());
   assertEquals('1 650 253', f.inputDigit('3'));
   assertEquals('1 650 253 2', f.inputDigit('2'));
   assertEquals('1 650 253 22', f.inputDigit('2'));
-  assertEquals(4, f.getRememberedPosition());
+  assertEquals(3, f.getRememberedPosition());
   assertEquals('1 650 253 222', f.inputDigit('2'));
   assertEquals('1 650 253 2222', f.inputDigit('2'));
   assertEquals('165025322222', f.inputDigit('2'));
-  assertEquals(3, f.getRememberedPosition());
+  assertEquals(2, f.getRememberedPosition());
   assertEquals('1650253222222', f.inputDigit('2'));
-  assertEquals(3, f.getRememberedPosition());
+  assertEquals(2, f.getRememberedPosition());
 
   f.clear();
   assertEquals('6', f.inputDigit('6'));
   assertEquals('65', f.inputDigit('5'));
   assertEquals('650', f.inputDigit('0'));
-  assertEquals('6502', f.inputDigit('2'));
-  assertEquals('65025', f.inputDigitAndRememberPosition('5'));
-  assertEquals(5, f.getRememberedPosition());
+  assertEquals('650 2', f.inputDigit('2'));
+  assertEquals('650 25', f.inputDigit('5'));
   assertEquals('650 253', f.inputDigit('3'));
-  assertEquals(6, f.getRememberedPosition());
-  assertEquals('650 253 2', f.inputDigit('2'));
+  assertEquals('650 2532', f.inputDigitAndRememberPosition('2'));
+  assertEquals(8, f.getRememberedPosition());
   assertEquals('650 253 22', f.inputDigit('2'));
+  assertEquals(9, f.getRememberedPosition());
   assertEquals('650 253 222', f.inputDigit('2'));
   // No more formatting when semicolon is entered.
   assertEquals('650253222;', f.inputDigit(';'));
-  assertEquals(5, f.getRememberedPosition());
+  assertEquals(7, f.getRememberedPosition());
   assertEquals('650253222;2', f.inputDigit('2'));
 
   f.clear();
@@ -226,14 +245,14 @@ function testAsYouTypeFormatterAndRememberPositionUS() {
   f.clear();
   assertEquals('0', f.inputDigit('0'));
   assertEquals('01', f.inputDigit('1'));
-  assertEquals('011', f.inputDigit('1'));
-  assertEquals('0114', f.inputDigitAndRememberPosition('4'));
-  assertEquals('01148', f.inputDigit('8'));
-  assertEquals(4, f.getRememberedPosition());
+  assertEquals('011 ', f.inputDigit('1'));
+  assertEquals('011 4', f.inputDigitAndRememberPosition('4'));
+  assertEquals('011 48 ', f.inputDigit('8'));
+  assertEquals(5, f.getRememberedPosition());
   assertEquals('011 48 8', f.inputDigit('8'));
   assertEquals(5, f.getRememberedPosition());
   assertEquals('011 48 88', f.inputDigit('8'));
-  assertEquals('011 48 881', f.inputDigit('1'));
+  assertEquals('011 48 88 1', f.inputDigit('1'));
   assertEquals('011 48 88 12', f.inputDigit('2'));
   assertEquals(5, f.getRememberedPosition());
   assertEquals('011 48 88 123', f.inputDigit('3'));
@@ -245,10 +264,10 @@ function testAsYouTypeFormatterAndRememberPositionUS() {
   f.clear();
   assertEquals('+', f.inputDigit('+'));
   assertEquals('+1', f.inputDigit('1'));
-  assertEquals('+16', f.inputDigitAndRememberPosition('6'));
-  assertEquals('+165', f.inputDigit('5'));
-  assertEquals('+1650', f.inputDigit('0'));
-  assertEquals(3, f.getRememberedPosition());
+  assertEquals('+1 6', f.inputDigitAndRememberPosition('6'));
+  assertEquals('+1 65', f.inputDigit('5'));
+  assertEquals('+1 650', f.inputDigit('0'));
+  assertEquals(4, f.getRememberedPosition());
   assertEquals('+1 650 2', f.inputDigit('2'));
   assertEquals(4, f.getRememberedPosition());
   assertEquals('+1 650 25', f.inputDigit('5'));
@@ -261,10 +280,10 @@ function testAsYouTypeFormatterAndRememberPositionUS() {
   f.clear();
   assertEquals('+', f.inputDigit('+'));
   assertEquals('+1', f.inputDigit('1'));
-  assertEquals('+16', f.inputDigitAndRememberPosition('6'));
-  assertEquals('+165', f.inputDigit('5'));
-  assertEquals('+1650', f.inputDigit('0'));
-  assertEquals(3, f.getRememberedPosition());
+  assertEquals('+1 6', f.inputDigitAndRememberPosition('6'));
+  assertEquals('+1 65', f.inputDigit('5'));
+  assertEquals('+1 650', f.inputDigit('0'));
+  assertEquals(4, f.getRememberedPosition());
   assertEquals('+1 650 2', f.inputDigit('2'));
   assertEquals(4, f.getRememberedPosition());
   assertEquals('+1 650 25', f.inputDigit('5'));
@@ -276,15 +295,15 @@ function testAsYouTypeFormatterAndRememberPositionUS() {
   assertEquals(3, f.getRememberedPosition());
 }
 
-function testAsYouTypeFormatterGBFixedLine() {
+function testAYTFGBFixedLine() {
   /** @type {i18n.phonenumbers.AsYouTypeFormatter} */
   var f = new i18n.phonenumbers.AsYouTypeFormatter('GB');
   assertEquals('0', f.inputDigit('0'));
   assertEquals('02', f.inputDigit('2'));
   assertEquals('020', f.inputDigit('0'));
-  assertEquals('0207', f.inputDigitAndRememberPosition('7'));
-  assertEquals(4, f.getRememberedPosition());
-  assertEquals('02070', f.inputDigit('0'));
+  assertEquals('020 7', f.inputDigitAndRememberPosition('7'));
+  assertEquals(5, f.getRememberedPosition());
+  assertEquals('020 70', f.inputDigit('0'));
   assertEquals('020 703', f.inputDigit('3'));
   assertEquals(5, f.getRememberedPosition());
   assertEquals('020 7031', f.inputDigit('1'));
@@ -294,14 +313,14 @@ function testAsYouTypeFormatterGBFixedLine() {
   assertEquals('020 7031 3000', f.inputDigit('0'));
 }
 
-function testAsYouTypeFormatterGBTollFree() {
-  /** @type {i18n.phonenumbers.AsYouTypeFormatter} */
+function testAYTFGBTollFree() {
+   /** @type {i18n.phonenumbers.AsYouTypeFormatter} */
   var f = new i18n.phonenumbers.AsYouTypeFormatter('gb');
   assertEquals('0', f.inputDigit('0'));
   assertEquals('08', f.inputDigit('8'));
   assertEquals('080', f.inputDigit('0'));
-  assertEquals('0807', f.inputDigit('7'));
-  assertEquals('08070', f.inputDigit('0'));
+  assertEquals('080 7', f.inputDigit('7'));
+  assertEquals('080 70', f.inputDigit('0'));
   assertEquals('080 703', f.inputDigit('3'));
   assertEquals('080 7031', f.inputDigit('1'));
   assertEquals('080 7031 3', f.inputDigit('3'));
@@ -310,14 +329,14 @@ function testAsYouTypeFormatterGBTollFree() {
   assertEquals('080 7031 3000', f.inputDigit('0'));
 }
 
-function testAsYouTypeFormatterGBPremiumRate() {
+function testAYTFGBPremiumRate() {
   /** @type {i18n.phonenumbers.AsYouTypeFormatter} */
   var f = new i18n.phonenumbers.AsYouTypeFormatter('GB');
   assertEquals('0', f.inputDigit('0'));
   assertEquals('09', f.inputDigit('9'));
   assertEquals('090', f.inputDigit('0'));
-  assertEquals('0907', f.inputDigit('7'));
-  assertEquals('09070', f.inputDigit('0'));
+  assertEquals('090 7', f.inputDigit('7'));
+  assertEquals('090 70', f.inputDigit('0'));
   assertEquals('090 703', f.inputDigit('3'));
   assertEquals('090 7031', f.inputDigit('1'));
   assertEquals('090 7031 3', f.inputDigit('3'));
@@ -326,14 +345,14 @@ function testAsYouTypeFormatterGBPremiumRate() {
   assertEquals('090 7031 3000', f.inputDigit('0'));
 }
 
-function testAsYouTypeFormatterNZMobile() {
+function testAYTFNZMobile() {
   /** @type {i18n.phonenumbers.AsYouTypeFormatter} */
   var f = new i18n.phonenumbers.AsYouTypeFormatter('NZ');
   assertEquals('0', f.inputDigit('0'));
   assertEquals('02', f.inputDigit('2'));
   assertEquals('021', f.inputDigit('1'));
-  assertEquals('0211', f.inputDigit('1'));
-  assertEquals('02112', f.inputDigit('2'));
+  assertEquals('02-11', f.inputDigit('1'));
+  assertEquals('02-112', f.inputDigit('2'));
   // Note the unittest is using fake metadata which might produce non-ideal
   // results.
   assertEquals('02-112 3', f.inputDigit('3'));
@@ -342,26 +361,54 @@ function testAsYouTypeFormatterNZMobile() {
   assertEquals('02-112 3456', f.inputDigit('6'));
 }
 
-function testAsYouTypeFormatterDE() {
+function testAYTFDE() {
   /** @type {i18n.phonenumbers.AsYouTypeFormatter} */
   var f = new i18n.phonenumbers.AsYouTypeFormatter('DE');
   assertEquals('0', f.inputDigit('0'));
   assertEquals('03', f.inputDigit('3'));
   assertEquals('030', f.inputDigit('0'));
-  assertEquals('0301', f.inputDigit('1'));
-  assertEquals('03012', f.inputDigit('2'));
+  assertEquals('030 1', f.inputDigit('1'));
+  assertEquals('030 12', f.inputDigit('2'));
   assertEquals('030 123', f.inputDigit('3'));
   assertEquals('030 1234', f.inputDigit('4'));
+
+  // 08021 2345
+  f.clear();
+  assertEquals('0', f.inputDigit('0'));
+  assertEquals('08', f.inputDigit('8'));
+  assertEquals('080', f.inputDigit('0'));
+  assertEquals('0802', f.inputDigit('2'));
+  assertEquals('08021', f.inputDigit('1'));
+  assertEquals('08021 2', f.inputDigit('2'));
+  assertEquals('08021 23', f.inputDigit('3'));
+  assertEquals('08021 234', f.inputDigit('4'));
+  assertEquals('08021 2345', f.inputDigit('5'));
+
+  // 00 1 650 253 2250
+  f.clear();
+  assertEquals('0', f.inputDigit('0'));
+  assertEquals('00', f.inputDigit('0'));
+  assertEquals('00 1 ', f.inputDigit('1'));
+  assertEquals('00 1 6', f.inputDigit('6'));
+  assertEquals('00 1 65', f.inputDigit('5'));
+  assertEquals('00 1 650', f.inputDigit('0'));
+  assertEquals('00 1 650 2', f.inputDigit('2'));
+  assertEquals('00 1 650 25', f.inputDigit('5'));
+  assertEquals('00 1 650 253', f.inputDigit('3'));
+  assertEquals('00 1 650 253 2', f.inputDigit('2'));
+  assertEquals('00 1 650 253 22', f.inputDigit('2'));
+  assertEquals('00 1 650 253 222', f.inputDigit('2'));
+  assertEquals('00 1 650 253 2222', f.inputDigit('2'));
 }
 
-function testAsYouTypeFormatterAR() {
+function testAYTFAR() {
   /** @type {i18n.phonenumbers.AsYouTypeFormatter} */
   var f = new i18n.phonenumbers.AsYouTypeFormatter('AR');
   assertEquals('0', f.inputDigit('0'));
   assertEquals('01', f.inputDigit('1'));
   assertEquals('011', f.inputDigit('1'));
-  assertEquals('0117', f.inputDigit('7'));
-  assertEquals('01170', f.inputDigit('0'));
+  assertEquals('011 7', f.inputDigit('7'));
+  assertEquals('011 70', f.inputDigit('0'));
   assertEquals('011 703', f.inputDigit('3'));
   assertEquals('011 7031', f.inputDigit('1'));
   assertEquals('011 7031-3', f.inputDigit('3'));
@@ -370,15 +417,15 @@ function testAsYouTypeFormatterAR() {
   assertEquals('011 7031-3000', f.inputDigit('0'));
 }
 
-function testAsYouTypeFormatterARMobile() {
+function testAYTFARMobile() {
   /** @type {i18n.phonenumbers.AsYouTypeFormatter} */
   var f = new i18n.phonenumbers.AsYouTypeFormatter('AR');
   assertEquals('+', f.inputDigit('+'));
   assertEquals('+5', f.inputDigit('5'));
-  assertEquals('+54', f.inputDigit('4'));
-  assertEquals('+549', f.inputDigit('9'));
-  assertEquals('+5491', f.inputDigit('1'));
-  assertEquals('+54 911', f.inputDigit('1'));
+  assertEquals('+54 ', f.inputDigit('4'));
+  assertEquals('+54 9', f.inputDigit('9'));
+  assertEquals('+54 91', f.inputDigit('1'));
+  assertEquals('+54 9 11', f.inputDigit('1'));
   assertEquals('+54 9 11 2', f.inputDigit('2'));
   assertEquals('+54 9 11 23', f.inputDigit('3'));
   assertEquals('+54 9 11 231', f.inputDigit('1'));
@@ -389,16 +436,16 @@ function testAsYouTypeFormatterARMobile() {
   assertEquals('+54 9 11 2312 1234', f.inputDigit('4'));
 }
 
-function testAsYouTypeFormatterKR() {
+function testAYTFKR() {
   // +82 51 234 5678
   /** @type {i18n.phonenumbers.AsYouTypeFormatter} */
   var f = new i18n.phonenumbers.AsYouTypeFormatter('KR');
   assertEquals('+', f.inputDigit('+'));
   assertEquals('+8', f.inputDigit('8'));
-  assertEquals('+82', f.inputDigit('2'));
-  assertEquals('+825', f.inputDigit('5'));
-  assertEquals('+8251', f.inputDigit('1'));
-  assertEquals('+82 512', f.inputDigit('2'));
+  assertEquals('+82 ', f.inputDigit('2'));
+  assertEquals('+82 5', f.inputDigit('5'));
+  assertEquals('+82 51', f.inputDigit('1'));
+  assertEquals('+82 51-2', f.inputDigit('2'));
   assertEquals('+82 51-23', f.inputDigit('3'));
   assertEquals('+82 51-234', f.inputDigit('4'));
   assertEquals('+82 51-234-5', f.inputDigit('5'));
@@ -410,10 +457,10 @@ function testAsYouTypeFormatterKR() {
   f.clear();
   assertEquals('+', f.inputDigit('+'));
   assertEquals('+8', f.inputDigit('8'));
-  assertEquals('+82', f.inputDigit('2'));
-  assertEquals('+822', f.inputDigit('2'));
-  assertEquals('+8225', f.inputDigit('5'));
-  assertEquals('+82 253', f.inputDigit('3'));
+  assertEquals('+82 ', f.inputDigit('2'));
+  assertEquals('+82 2', f.inputDigit('2'));
+  assertEquals('+82 25', f.inputDigit('5'));
+  assertEquals('+82 2-53', f.inputDigit('3'));
   assertEquals('+82 2-531', f.inputDigit('1'));
   assertEquals('+82 2-531-5', f.inputDigit('5'));
   assertEquals('+82 2-531-56', f.inputDigit('6'));
@@ -424,10 +471,10 @@ function testAsYouTypeFormatterKR() {
   f.clear();
   assertEquals('+', f.inputDigit('+'));
   assertEquals('+8', f.inputDigit('8'));
-  assertEquals('+82', f.inputDigit('2'));
-  assertEquals('+822', f.inputDigit('2'));
-  assertEquals('+8223', f.inputDigit('3'));
-  assertEquals('+82 236', f.inputDigit('6'));
+  assertEquals('+82 ', f.inputDigit('2'));
+  assertEquals('+82 2', f.inputDigit('2'));
+  assertEquals('+82 23', f.inputDigit('3'));
+  assertEquals('+82 2-36', f.inputDigit('6'));
   assertEquals('+82 2-366', f.inputDigit('6'));
   assertEquals('+82 2-3665', f.inputDigit('5'));
   assertEquals('+82 2-3665-5', f.inputDigit('5'));
@@ -435,22 +482,21 @@ function testAsYouTypeFormatterKR() {
   assertEquals('+82 2-3665-567', f.inputDigit('7'));
   assertEquals('+82 2-3665-5678', f.inputDigit('8'));
 
-  // 02-114 : This is too short to format. Checking that there are no
-  // side-effects.
+  // 02-114
   f.clear();
   assertEquals('0', f.inputDigit('0'));
   assertEquals('02', f.inputDigit('2'));
   assertEquals('021', f.inputDigit('1'));
-  assertEquals('0211', f.inputDigit('1'));
-  assertEquals('02114', f.inputDigit('4'));
+  assertEquals('02-11', f.inputDigit('1'));
+  assertEquals('02-114', f.inputDigit('4'));
 
   // 02-1300
   f.clear();
   assertEquals('0', f.inputDigit('0'));
   assertEquals('02', f.inputDigit('2'));
   assertEquals('021', f.inputDigit('1'));
-  assertEquals('0213', f.inputDigit('3'));
-  assertEquals('02130', f.inputDigit('0'));
+  assertEquals('02-13', f.inputDigit('3'));
+  assertEquals('02-130', f.inputDigit('0'));
   assertEquals('02-1300', f.inputDigit('0'));
 
   // 011-456-7890
@@ -458,8 +504,8 @@ function testAsYouTypeFormatterKR() {
   assertEquals('0', f.inputDigit('0'));
   assertEquals('01', f.inputDigit('1'));
   assertEquals('011', f.inputDigit('1'));
-  assertEquals('0114', f.inputDigit('4'));
-  assertEquals('01145', f.inputDigit('5'));
+  assertEquals('011-4', f.inputDigit('4'));
+  assertEquals('011-45', f.inputDigit('5'));
   assertEquals('011-456', f.inputDigit('6'));
   assertEquals('011-456-7', f.inputDigit('7'));
   assertEquals('011-456-78', f.inputDigit('8'));
@@ -471,8 +517,8 @@ function testAsYouTypeFormatterKR() {
   assertEquals('0', f.inputDigit('0'));
   assertEquals('01', f.inputDigit('1'));
   assertEquals('011', f.inputDigit('1'));
-  assertEquals('0119', f.inputDigit('9'));
-  assertEquals('01198', f.inputDigit('8'));
+  assertEquals('011-9', f.inputDigit('9'));
+  assertEquals('011-98', f.inputDigit('8'));
   assertEquals('011-987', f.inputDigit('7'));
   assertEquals('011-9876', f.inputDigit('6'));
   assertEquals('011-9876-7', f.inputDigit('7'));
@@ -480,3 +526,52 @@ function testAsYouTypeFormatterKR() {
   assertEquals('011-9876-789', f.inputDigit('9'));
   assertEquals('011-9876-7890', f.inputDigit('0'));
 }
+
+function testAYTFMultipleLeadingDigitPatterns() {
+  // +81 50 2345 6789
+  /** @type {i18n.phonenumbers.AsYouTypeFormatter} */
+  var f = new i18n.phonenumbers.AsYouTypeFormatter('JP');
+  assertEquals('+', f.inputDigit('+'));
+  assertEquals('+8', f.inputDigit('8'));
+  assertEquals('+81 ', f.inputDigit('1'));
+  assertEquals('+81 5', f.inputDigit('5'));
+  assertEquals('+81 50', f.inputDigit('0'));
+  assertEquals('+81 50 2', f.inputDigit('2'));
+  assertEquals('+81 50 23', f.inputDigit('3'));
+  assertEquals('+81 50 234', f.inputDigit('4'));
+  assertEquals('+81 50 2345', f.inputDigit('5'));
+  assertEquals('+81 50 2345 6', f.inputDigit('6'));
+  assertEquals('+81 50 2345 67', f.inputDigit('7'));
+  assertEquals('+81 50 2345 678', f.inputDigit('8'));
+  assertEquals('+81 50 2345 6789', f.inputDigit('9'));
+
+  // +81 222 12 5678
+  f.clear();
+  assertEquals('+', f.inputDigit('+'));
+  assertEquals('+8', f.inputDigit('8'));
+  assertEquals('+81 ', f.inputDigit('1'));
+  assertEquals('+81 2', f.inputDigit('2'));
+  assertEquals('+81 22', f.inputDigit('2'));
+  assertEquals('+81 22 2', f.inputDigit('2'));
+  assertEquals('+81 22 21', f.inputDigit('1'));
+  assertEquals('+81 2221 2', f.inputDigit('2'));
+  assertEquals('+81 222 12 5', f.inputDigit('5'));
+  assertEquals('+81 222 12 56', f.inputDigit('6'));
+  assertEquals('+81 222 12 567', f.inputDigit('7'));
+  assertEquals('+81 222 12 5678', f.inputDigit('8'));
+
+  // +81 3332 2 5678
+  f.clear();
+  assertEquals('+', f.inputDigit('+'));
+  assertEquals('+8', f.inputDigit('8'));
+  assertEquals('+81 ', f.inputDigit('1'));
+  assertEquals('+81 3', f.inputDigit('3'));
+  assertEquals('+81 33', f.inputDigit('3'));
+  assertEquals('+81 33 3', f.inputDigit('3'));
+  assertEquals('+81 3332', f.inputDigit('2'));
+  assertEquals('+81 3332 2', f.inputDigit('2'));
+  assertEquals('+81 3332 2 5', f.inputDigit('5'));
+  assertEquals('+81 3332 2 56', f.inputDigit('6'));
+  assertEquals('+81 3332 2 567', f.inputDigit('7'));
+  assertEquals('+81 3332 2 5678', f.inputDigit('8'));
+}
index 306dafd..3845967 100644 (file)
@@ -31,6 +31,7 @@ limitations under the License.
 <script src="phonenumber.pb.js"></script>
 <script src="metadata.js"></script>
 <script src="phonenumberutil.js"></script>
+<script src="asyoutypeformatter.js"></script>
 </head>
 <body>
 
@@ -39,10 +40,11 @@ function phoneNumberParser() {
   var $ = goog.dom.getElement;
   var phoneNumber = $('phoneNumber').value;
   var regionCode = $('defaultCountry').value;
+  var carrierCode = $('carrierCode').value;
   var output = new goog.string.StringBuffer();
   try {
     var phoneUtil = i18n.phonenumbers.PhoneNumberUtil.getInstance();
-    var number = phoneUtil.parse(phoneNumber, regionCode);
+    var number = phoneUtil.parseAndKeepRawInput(phoneNumber, regionCode);
     output.append('****Parsing Result:****\n');
     output.append(goog.json.serialize(new goog.proto2.ObjectSerializer(
         goog.proto2.ObjectSerializer.KeyOption.NAME).serialize(number)));
@@ -86,6 +88,8 @@ function phoneNumberParser() {
     }
     var PNF = i18n.phonenumbers.PhoneNumberFormat;
     output.append('\n\n****Formatting Results:**** ');
+    output.append('\nOriginal format: ');
+    output.append(phoneUtil.formatInOriginalFormat(number, regionCode));
     output.append('\nE164 format: ');
     output.append(phoneUtil.format(number, PNF.E164));
     output.append('\nInternational format: ');
@@ -94,6 +98,21 @@ function phoneNumberParser() {
     output.append(phoneUtil.format(number, PNF.NATIONAL));
     output.append('\nOut-of-country format from US: ');
     output.append(phoneUtil.formatOutOfCountryCallingNumber(number, 'US'));
+    if (carrierCode.length > 0) {
+      output.append('\nNational format with carrier code: ');
+      output.append(phoneUtil.formatNationalNumberWithCarrierCode(number,
+                                                                  carrierCode));
+    }
+    output.append('\n\n****AsYouTypeFormatter Results****');
+    var formatter = new i18n.phonenumbers.AsYouTypeFormatter(regionCode);
+    var phoneNumberLength = phoneNumber.length;
+    for (var i = 0; i < phoneNumberLength; ++i) {
+      var inputChar = phoneNumber.charAt(i);
+      output.append('\nChar entered: ');
+      output.append(inputChar);
+      output.append(' Output: ');
+      output.append(formatter.inputDigit(inputChar));
+    }
   } catch (e) {
     output.append('\n' + e);
   }
@@ -114,10 +133,15 @@ function phoneNumberParser() {
   <input type="text" name="defaultCountry" id="defaultCountry" size="2" />
   (ISO 3166-1 two-letter country code)
   </p>
+  <p>
+  Specify a Carrier Code:
+  <input type="text" name="carrierCode" id="carrierCode" size="2" />
+  (optional, only valid for some countries)
+  </p>
   <input type="submit" value="Submit" onclick="return phoneNumberParser();" />
   <input type="reset" value="Reset" />
   <p>
-  <textarea id="output" rows="15" cols="60"></textarea>
+  <textarea id="output" rows="30" cols="80"></textarea>
   </p>
 </form>
 
index 055a3f7..5249900 100644 (file)
@@ -14,7 +14,7 @@
 
 /**
  * @fileoverview Generated metadata for file
- * PhoneNumberMetaData.xml
+ * java/resources/com/google/i18n/phonenumbers/src/PhoneNumberMetaData.xml
  * @author Nikolaos Trogkanis
  */
 
@@ -247,8 +247,12 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"AD",376,"00",,,,,,,,[[,"(\\d{3})(\\d{3})","$1 $2","[346-9]","",""],
-[,"(180[02])(\\d{4})","$1 $2","1","",""]]]
+,"AD",376,"00",,,,,,,,[[,"(\\d{3})(\\d{3})","$1 $2",["[346-9]"]
+,"",""]
+,[,"(180[02])(\\d{4})","$1 $2",["1"]
+,"",""]
+]
+]
 ,
   "AE": [,[,,"[2-79]\\d{7,8}|800\\d{2,9}","\\d{5,12}"]
 ,[,,"(?:[2-4679][2-8]\\d|600[25])\\d{5}","\\d{7,9}",,,"22345678"]
@@ -258,10 +262,16 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"700[05]\\d{5}","\\d{9}",,,"700012345"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"AE",971,"00","0",,,"0",,,,[[,"([2-4679])(\\d{3})(\\d{4})","$1 $2 $3","[2-4679][2-8]","0$1",""],
-[,"(5[056])(\\d{3})(\\d{4})","$1 $2 $3","5","0$1",""],
-[,"([4679]00)(\\d)(\\d{5})","$1 $2 $3","[4679]0","0$1",""],
-[,"(800)(\\d{2})(\\d{0,7})","$1 $2 $3","8","0$1",""]]]
+,"AE",971,"00","0",,,"0",,,,[[,"([2-4679])(\\d{3})(\\d{4})","$1 $2 $3",["[2-4679][2-8]"]
+,"0$1",""]
+,[,"(5[056])(\\d{3})(\\d{4})","$1 $2 $3",["5"]
+,"0$1",""]
+,[,"([4679]00)(\\d)(\\d{5})","$1 $2 $3",["[4679]0"]
+,"0$1",""]
+,[,"(800)(\\d{2})(\\d{0,7})","$1 $2 $3",["8"]
+,"0$1",""]
+]
+]
 ,
   "AF": [,[,,"[2-7]\\d{8}","\\d{9}"]
 ,[,,"(?:[25][0-8]|[34][0-4]|6[0-5])[2-9]\\d{6}","\\d{9}",,,"234567890"]
@@ -271,7 +281,9 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"AF",93,"00","0",,,"0",,,,[[,"([2-7]\\d)(\\d{3})(\\d{4})","$1 $2 $3",,"0$1",""]]]
+,"AF",93,"00","0",,,"0",,,,[[,"([2-7]\\d)(\\d{3})(\\d{4})","$1 $2 $3",,"0$1",""]
+]
+]
 ,
   "AG": [,[,,"[289]\\d{9}","\\d{7,10}"]
 ,[,,"268(?:4(?:6[0-3]|84)|56[0-2])\\d{4}","\\d{7,10}",,,"2684601234"]
@@ -301,13 +313,16 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"808\\d{3}","\\d{6}",,,"808123"]
 ,[,,"700\\d{5}","\\d{8}",,,"70012345"]
 ,[,,"NA","NA"]
-,"AL",355,"00","0",,,"0",,,,[[,"(4)(\\d{3})(\\d{4})","$1 $2 $3","4[0-6]","0$1",""],
-[,"(6[6-9])(\\d{3})(\\d{4})","$1 $2 $3","6","0$1",""],
-[,"(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3","[2358][2-5]|4[7-9]","0$1",""],
-[,"(\\d{3})(\\d{5})","$1 $2","[2358][16-9]","0$1",""],
-[,"(800)(\\d{4})","$1 $2","800","0$1",""],
-[,"(\\d{3})(\\d{3})","$1 $2","9|808","0$1",""],
-[,"(700)(\\d{5})","$1 $2","7","0$1",""]]]
+,"AL",355,"00","0",,,"0",,,,[[,"(4)(\\d{3})(\\d{4})","$1 $2 $3",["4[0-6]"]
+,"0$1",""]
+,[,"(6[6-9])(\\d{3})(\\d{4})","$1 $2 $3",["6"]
+,"0$1",""]
+,[,"(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["[2358][2-5]|4[7-9]"]
+,"0$1",""]
+,[,"(\\d{3})(\\d{3,5})","$1 $2",["[235][16-9]|8[016-9]|[79]"]
+,"0$1",""]
+]
+]
 ,
   "AM": [,[]
 ,[]
@@ -337,7 +352,9 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"AO",244,"00",,,,,,,,[[,"(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",,"",""]]]
+,"AO",244,"00",,,,,,,,[[,"(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",,"",""]
+]
+]
 ,
   "AR": [,[,,"[1-9]\\d{9,11}","\\d{6,12}"]
 ,[,,"[1-9]\\d{9}","\\d{6,10}",,,"1123456789"]
@@ -347,20 +364,37 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"AR",54,"00","0",,,"0(?:(11|2(?:2(?:02?|[13]|2[13-79]|4[1-6]|5[2457]|6[124-8]|7[1-4]|8[13-6]|9[1-367])|3(?:[06]2|1[467]|2[02-6]|3[13-8]|[49][2-6]|5[2-8]|7)|47[3-578]|6(?:1|2[2-7]|4[6-8]?|5[125-8])|9(?:0[1-3]|[19]|2\\d|3[1-6]|4[0-24-68]|5[2-4]|6[2-6]|72?|8[23]?))|3(?:3(?:2[79]|8[2578])|4(?:0[124-9]|[12]|3[5-8]?|4[24-7]|5[4-68]?|6\\d|7[126]|8[237-9]|9[1-36-8])|5(?:1|2[1245]|3[2-4]?|4[1-46-9]|6[2-4]|7[1-6]|8[2-5]?)|7(?:1[15-8]|2[125]|3[1245]|4[13]|5[124-8]|7[2-57]|8[1-36])|8(?:1|2[125-7]|3[23578]|4[13-6]|5[4-8]?|6[1-357-9]|7[5-8]?|8[4-7]?|9[124])))15)?","9$1",,,[[,"([68]\\d{2})(\\d{3})(\\d{4})","$1-$2-$3","[68]","0$1",""],
-[,"9(11)(\\d{4})(\\d{4})","$1 15-$2-$3","91","0$1",""],
-[,"9(\\d{3})(\\d{3})(\\d{4})","$1 15-$2-$3","9(?:2(?:2[013]|37|6[14]|9[179])|3(?:4[1235]|5[138]|8[1578]))","0$1",""],
-[,"9(\\d{4})(\\d{2})(\\d{4})","$1 15-$2-$3","9(?:2(?:2[24-9]|3[0-69]|47|6[25]|9[02-68])|3(?:3[28]|4[046-9]|5[2467]|7[1-578]|8[23469]))","0$1",""],
-[,"(11)(\\d{4})(\\d{4})","$1 $2-$3","1","0$1",""],
-[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2-$3","2(?:2[013]|37|6[14]|9[179])|3(?:4[1235]|5[138]|8[1578])","0$1",""],
-[,"(\\d{4})(\\d{2})(\\d{4})","$1 $2-$3","[23]","0$1",""]]
-,[[,"([68]\\d{2})(\\d{3})(\\d{4})","$1-$2-$3","[68]",,""],
-[,"9(11)(\\d{4})(\\d{4})","9 $1 $2-$3","91",,""],
-[,"9(\\d{3})(\\d{3})(\\d{4})","9 $1 $2-$3","9(?:2(?:2[013]|37|6[14]|9[179])|3(?:4[1235]|5[138]|8[1578]))",,""],
-[,"9(\\d{4})(\\d{2})(\\d{4})","9 $1 $2-$3","9(?:2(?:2[24-9]|3[0-69]|47|6[25]|9[02-68])|3(?:3[28]|4[046-9]|5[2467]|7[1-578]|8[23469]))",,""],
-[,"(11)(\\d{4})(\\d{4})","$1 $2-$3","1",,""],
-[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2-$3","2(?:2[013]|37|6[14]|9[179])|3(?:4[1235]|5[138]|8[1578])",,""],
-[,"(\\d{4})(\\d{2})(\\d{4})","$1 $2-$3","[23]",,""]]]
+,"AR",54,"00","0",,,"0(?:(11|2(?:2(?:02?|[13]|2[13-79]|4[1-6]|5[2457]|6[124-8]|7[1-4]|8[13-6]|9[1-367])|3(?:[06]2|1[467]|2[02-6]|3[13-8]|[49][2-6]|5[2-8]|7)|47[3-578]|6(?:1|2[2-7]|4[6-8]?|5[125-8])|9(?:0[1-3]|[19]|2\\d|3[1-6]|4[0-24-68]|5[2-4]|6[2-6]|72?|8[23]?))|3(?:3(?:2[79]|8[2578])|4(?:0[124-9]|[12]|3[5-8]?|4[24-7]|5[4-68]?|6\\d|7[126]|8[237-9]|9[1-36-8])|5(?:1|2[1245]|3[2-4]?|4[1-46-9]|6[2-4]|7[1-6]|8[2-5]?)|7(?:1[15-8]|2[125]|3[1245]|4[13]|5[124-8]|7[2-57]|8[1-36])|8(?:1|2[125-7]|3[23578]|4[13-6]|5[4-8]?|6[1-357-9]|7[5-8]?|8[4-7]?|9[124])))15)?","9$1",,,[[,"([68]\\d{2})(\\d{3})(\\d{4})","$1-$2-$3",["[68]"]
+,"0$1",""]
+,[,"9(11)(\\d{4})(\\d{4})","$1 15-$2-$3",["91"]
+,"0$1",""]
+,[,"9(\\d{3})(\\d{3})(\\d{4})","$1 15-$2-$3",["9(?:2[2369]|3[458])","9(?:2(?:2[013]|37|6[14]|9[179])|3(?:4[1235]|5[138]|8[1578]))"]
+,"0$1",""]
+,[,"9(\\d{4})(\\d{2})(\\d{4})","$1 15-$2-$3",["9(?:2[2-469]|3[3-578])","9(?:2(?:2[24-9]|3[0-69]|47|6[25]|9[02-68])|3(?:3[28]|4[046-9]|5[2467]|7[1-578]|8[23469]))"]
+,"0$1",""]
+,[,"(11)(\\d{4})(\\d{4})","$1 $2-$3",["1"]
+,"0$1",""]
+,[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2-$3",["2(?:2[013]|37|6[14]|9[179])|3(?:4[1235]|5[138]|8[1578])"]
+,"0$1",""]
+,[,"(\\d{4})(\\d{2})(\\d{4})","$1 $2-$3",["[23]"]
+,"0$1",""]
+]
+,[[,"([68]\\d{2})(\\d{3})(\\d{4})","$1-$2-$3",["[68]"]
+,,""]
+,[,"9(11)(\\d{4})(\\d{4})","9 $1 $2-$3",["91"]
+,,""]
+,[,"9(\\d{3})(\\d{3})(\\d{4})","9 $1 $2-$3",["9(?:2[2369]|3[458])","9(?:2(?:2[013]|37|6[14]|9[179])|3(?:4[1235]|5[138]|8[1578]))"]
+,,""]
+,[,"9(\\d{4})(\\d{2})(\\d{4})","9 $1 $2-$3",["9(?:2[2-469]|3[3-578])","9(?:2(?:2[24-9]|3[0-69]|47|6[25]|9[02-68])|3(?:3[28]|4[046-9]|5[2467]|7[1-578]|8[23469]))"]
+,,""]
+,[,"(11)(\\d{4})(\\d{4})","$1 $2-$3",["1"]
+,,""]
+,[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2-$3",["2(?:2[013]|37|6[14]|9[179])|3(?:4[1235]|5[138]|8[1578])"]
+,,""]
+,[,"(\\d{4})(\\d{2})(\\d{4})","$1 $2-$3",["[23]"]
+,,""]
+]
+]
 ,
   "AS": [,[,,"[689]\\d{9}","\\d{7,10}"]
 ,[,,"6846(?:22|33|44|55|77|88|9[19])\\d{4}","\\d{7,10}",,,"6846221234"]
@@ -380,9 +414,14 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"8(?:10|2[018])\\d{6,10}","\\d{9,13}",,,"810123456"]
 ,[,,"NA","NA"]
 ,[,,"780\\d{6,10}","\\d{9,13}",,,"780123456"]
-,"AT",43,"00","0",,,"0",,,,[[,"([15])(\\d{3,12})","$1 $2","1|5[079]","0$1",""],
-[,"(\\d{3})(\\d{3,10})","$1 $2","316|46|51|732|6(?:44|5[0-3579]|[6-9])|7(?:1|[28]0)|[89]","0$1",""],
-[,"(\\d{4})(\\d{3,9})","$1 $2","2|3(?:1[1-578]|[3-8])|4[2378]|5[2-6]|6(?:[12]|4[1-35-9]|5[468])|7(?:2[1-8]|35|4[1-8]|[57-9])","0$1",""]]]
+,"AT",43,"00","0",,,"0",,,,[[,"([15])(\\d{3,12})","$1 $2",["1|5[079]"]
+,"0$1",""]
+,[,"(\\d{3})(\\d{3,10})","$1 $2",["316|46|51|732|6(?:44|5[0-3579]|[6-9])|7(?:1|[28]0)|[89]"]
+,"0$1",""]
+,[,"(\\d{4})(\\d{3,9})","$1 $2",["2|3(?:1[1-578]|[3-8])|4[2378]|5[2-6]|6(?:[12]|4[1-35-9]|5[468])|7(?:2[1-8]|35|4[1-8]|[57-9])"]
+,"0$1",""]
+]
+]
 ,
   "AU": [,[,,"[1-578]\\d{5,9}","\\d{6,10}"]
 ,[,,"[2378]\\d{8}","\\d{8,9}",,,"212345678"]
@@ -392,12 +431,20 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"500\\d{6}","\\d{9}",,,"500123456"]
 ,[,,"550\\d{6}","\\d{9}",,,"550123456"]
-,"AU",61,"(?:14(?:1[14]|34|4[17]|[56]6|7[47]|88))?001[14-689]","0",,,"0",,"0011",,[[,"([2378])(\\d{4})(\\d{4})","$1 $2 $3","[2378]","(0$1)",""],
-[,"(4\\d{2})(\\d{3})(\\d{3})","$1 $2 $3","4","0$1",""],
-[,"(5[05]0)(\\d{3})(\\d{3})","$1 $2 $3","5","0$1",""],
-[,"(1[389]\\d{2})(\\d{3})(\\d{3})","$1 $2 $3","1(?:[38]00|9)","$1",""],
-[,"(180)(\\d{4})","$1 $2","180[1-9]","$1",""],
-[,"(13)(\\d{2})(\\d{2})","$1 $2 $3","13[1-9]","$1",""]]]
+,"AU",61,"(?:14(?:1[14]|34|4[17]|[56]6|7[47]|88))?001[14-689]","0",,,"0",,"0011",,[[,"([2378])(\\d{4})(\\d{4})","$1 $2 $3",["[2378]"]
+,"(0$1)",""]
+,[,"(4\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["4"]
+,"0$1",""]
+,[,"(5[05]0)(\\d{3})(\\d{3})","$1 $2 $3",["5"]
+,"0$1",""]
+,[,"(1[389]\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["1(?:[38]0|9)","1(?:[38]00|9)"]
+,"$1",""]
+,[,"(180)(\\d{4})","$1 $2",["180","180[1-9]"]
+,"$1",""]
+,[,"(13)(\\d{2})(\\d{2})","$1 $2 $3",["13[1-9]"]
+,"$1",""]
+]
+]
 ,
   "AW": [,[,,"[5-9]\\d{6}","\\d{7}"]
 ,[,,"5(?:2\\d{2}|8(?:[2-7]\\d|8[0-79]|9[48]))\\d{3}","\\d{7}",,,"5212345"]
@@ -407,19 +454,24 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"AW",297,"00",,,,,,,,[[,"([5-9]\\d{2})(\\d{4})","$1 $2",,"",""]]]
+,"AW",297,"00",,,,,,,,[[,"([5-9]\\d{2})(\\d{4})","$1 $2",,"",""]
+]
+]
 ,
-  "AZ": [,[,,"[124-8]\\d{7,8}","\\d{8,9}"]
-,[,,"(?:1(?:(?:[28]\\d|36|9)\\d|02|1[0-589]|3[358]|4[013-79]|5[0-479]|6[0236-9]|7[0-24-8])|2(?:16|2\\d|3[0-24]|4[1468]|55|6[56]|79))\\d{5}","\\d{8,9}",,,"123123456"]
+  "AZ": [,[,,"[1-8]\\d{7,8}","\\d{8,9}"]
+,[,,"(?:1(?:(?:[28]\\d|9)\\d|02|1[0-589]|3[358]|4[013-79]|5[0-479]|6[0236-9]|7[0-24-8])|2(?:16|2\\d|3[0-24]|4[1468]|55|6[56]|79)|365?\\d)\\d{5}","\\d{8,9}",,,"123123456"]
 ,[,,"(?:4[04]|5[015]|60|7[07])\\d{7}","\\d{9}",,,"401234567"]
 ,[,,"88\\d{7}","\\d{9}",,,"881234567"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"AZ",994,"00",,,,,,,,[[,"([4-8]\\d)(\\d{3})(\\d{4})","$1 $2 $3","[4-8]","",""],
-[,"([12]\\d)(\\d{3})(\\d{3,4})","$1 $2 $3","1[28]|22","",""],
-[,"([12]\\d{2})(\\d{5})","$1 $2","1[013-79]|2[013-9]","",""]]]
+,"AZ",994,"00",,,,,,,,[[,"(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["1[28]|22|[3-8]"]
+,"",""]
+,[,"([12]\\d{2})(\\d{5})","$1 $2",["1[013-79]|2[013-9]"]
+,"",""]
+]
+]
 ,
   "BA": [,[,,"[3-689]\\d{7}","\\d{6,8}"]
 ,[,,"(?:[35]\\d|49|81)\\d{6}","\\d{6,8}",,,"30123456"]
@@ -429,7 +481,9 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"82\\d{6}","\\d{8}",,,"82123456"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"BA",387,"00","0",,,"0",,,,[[,"([3-689]\\d)(\\d{3})(\\d{3})","$1 $2-$3",,"0$1",""]]]
+,"BA",387,"00","0",,,"0",,,,[[,"([3-689]\\d)(\\d{3})(\\d{3})","$1 $2-$3",,"0$1",""]
+]
+]
 ,
   "BB": [,[,,"[289]\\d{9}","\\d{7,10}"]
 ,[,,"246[2-9]\\d{6}","\\d{7,10}",,,"2462345678"]
@@ -449,10 +503,16 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"BD",880,"00[12]?","0",,,"0",,"00",,[[,"(2)(\\d{7})","$1 $2","2","0$1",""],
-[,"(\\d{2})(\\d{4,6})","$1 $2","[3-79]1","0$1",""],
-[,"(\\d{3})(\\d{3,7})","$1 $2","[3-79][2-9]|8","0$1",""],
-[,"(\\d{4})(\\d{6})","$1 $2","1","0$1",""]]]
+,"BD",880,"00[12]?","0",,,"0",,"00",,[[,"(2)(\\d{7})","$1 $2",["2"]
+,"0$1",""]
+,[,"(\\d{2})(\\d{4,6})","$1 $2",["[3-79]1"]
+,"0$1",""]
+,[,"(\\d{3})(\\d{3,7})","$1 $2",["[3-79][2-9]|8"]
+,"0$1",""]
+,[,"(\\d{4})(\\d{6})","$1 $2",["1"]
+,"0$1",""]
+]
+]
 ,
   "BE": [,[,,"[1-9]\\d{7,8}","\\d{8,9}"]
 ,[,,"(?:1[0-69]|[23][2-8]|[49][23]|5\\d|6[013-57-9]|7[18])\\d{6}|8(?:0[1-9]|[1-79]\\d)\\d{5}","\\d{8}",,,"12345678"]
@@ -462,11 +522,16 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"BE",32,"00","0",,,"0",,,,[[,"(4[7-9]\\d)(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4","4[7-9]","0$1",""],
-[,"([2-49])(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4","[23]|[49][23]","0$1",""],
-[,"([15-8]\\d)(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4","[156]|7[18]|8(?:0[1-9]|[1-79])","0$1",""],
-[,"([89]\\d{2})(\\d{2})(\\d{3})","$1 $2 $3","(?:80|9)0","0$1",""],
-[,"(7[07])(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4","7[07]","0$1",""]]]
+,"BE",32,"00","0",,,"0",,,,[[,"(4[7-9]\\d)(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["4[7-9]"]
+,"0$1",""]
+,[,"([2-49])(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[23]|[49][23]"]
+,"0$1",""]
+,[,"([15-8]\\d)(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[156]|7[0178]|8(?:0[1-9]|[1-79])"]
+,"0$1",""]
+,[,"([89]\\d{2})(\\d{2})(\\d{3})","$1 $2 $3",["(?:80|9)0"]
+,"0$1",""]
+]
+]
 ,
   "BF": [,[,,"[2457]\\d{7}","\\d{8}"]
 ,[,,"(?:20(?:49|5[23]|9[016-9])|40(?:4[569]|55|7[0179])|50[34]\\d)\\d{4}","\\d{8}",,,"20491234"]
@@ -476,7 +541,9 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"BF",226,"00",,,,,,,,[[,"(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",,"",""]]]
+,"BF",226,"00",,,,,,,,[[,"(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",,"",""]
+]
+]
 ,
   "BG": [,[,,"[1-9]\\d{6,8}","\\d{7,9}"]
 ,[,,"2\\d{6,7}|(?:[367]\\d|4[124-7]|5[1-9]|8[1-6]|9[1-7])\\d{5,6}|43[1-6]\\d{4,5}","\\d{7,8}",,,"2123456"]
@@ -486,12 +553,16 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"BG",359,"00","0",,,"0",,,,[[,"(2)(\\d{3})(\\d{3,4})","$1 $2 $3","2","0$1",""],
-[,"(43[1-6])(\\d{4,5})","$1 $2","43[1-6]","0$1",""],
-[,"(\\d{2})(\\d{2,3})(\\d{3})","$1 $2 $3","[35-7]|4[124-7]|8[1-6]|9[1-7]","0$1",""],
-[,"([89]\\d)(\\d{3})(\\d{4})","$1 $2 $3","8[7-9]|98","0$1",""],
-[,"([49]\\d)(\\d{3})(\\d{3})","$1 $2 $3","48|90","0$1",""],
-[,"(\\d{3})(\\d{5})","$1 $2","43[0789]|800","0$1",""]]]
+,"BG",359,"00","0",,,"0",,,,[[,"(2)(\\d{3})(\\d{3,4})","$1 $2 $3",["2"]
+,"0$1",""]
+,[,"(\\d{3})(\\d{4,5})","$1 $2",["43|800"]
+,"0$1",""]
+,[,"(\\d{2})(\\d{2,3})(\\d{3})","$1 $2 $3",["[35-7]|4[124-7]|8[1-6]|9[1-7]"]
+,"0$1",""]
+,[,"(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["48|8[7-9]|9[08]"]
+,"0$1",""]
+]
+]
 ,
   "BH": [,[]
 ,[]
@@ -511,7 +582,9 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"BI",257,"00",,,,,,,,[[,"([27]\\d)(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",,"",""]]]
+,"BI",257,"00",,,,,,,,[[,"([27]\\d)(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",,"",""]
+]
+]
 ,
   "BJ": [,[,,"[2689]\\d{7}|7\\d{3}","\\d{4,8}"]
 ,[,,"2(?:02|1[037]|2[45]|3[68])\\d{5}","\\d{8}",,,"20211234"]
@@ -521,7 +594,9 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"857[58]\\d{4}","\\d{8}",,,"85751234"]
-,"BJ",229,"00",,,,,,,,[[,"(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",,"",""]]]
+,"BJ",229,"00",,,,,,,,[[,"(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",,"",""]
+]
+]
 ,
   "BL": [,[,,"[56]\\d{8}","\\d{9}"]
 ,[,,"590(?:2[7-9]|5[12]|87)\\d{4}","\\d{9}",,,"590271234"]
@@ -551,7 +626,9 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"BN",673,"00","0",,,"0",,,,[[,"([2-578]\\d{2})(\\d{4})","$1 $2",,"0$1",""]]]
+,"BN",673,"00","0",,,"0",,,,[[,"([2-578]\\d{2})(\\d{4})","$1 $2",,"0$1",""]
+]
+]
 ,
   "BO": [,[]
 ,[]
@@ -571,9 +648,14 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"(?:400\\d|3003)\\d{4}","\\d{8,10}",,,"40041234"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"BR",55,"00(?:1[45]|2[135]|[34]1|43)","0",,,"0(?:(?:1[245]|2[135]|[34]1)(\\d{10}))?","$1",,,[[,"(\\d{2})(\\d{4})(\\d{4})","$1 $2-$3","[1-9][1-9]","($1)","0 $CC $1"],
-[,"([34]00\\d)(\\d{4})","$1-$2","400|3003","",""],
-[,"([3589]00)(\\d{2,3})(\\d{4})","$1 $2 $3","[3589]00","0$1",""]]]
+,"BR",55,"00(?:1[45]|2[135]|[34]1|43)","0",,,"0(?:(?:1[245]|2[135]|[34]1)(\\d{10}))?","$1",,,[[,"(\\d{2})(\\d{4})(\\d{4})","$1 $2-$3",["[1-9][1-9]"]
+,"($1)","0 $CC $1"]
+,[,"([34]00\\d)(\\d{4})","$1-$2",["[34]00","400|3003"]
+,"",""]
+,[,"([3589]00)(\\d{2,3})(\\d{4})","$1 $2 $3",["[3589]00"]
+,"0$1",""]
+]
+]
 ,
   "BS": [,[,,"[289]\\d{9}","\\d{7,10}"]
 ,[,,"242(?:3(?:02|[236][1-9]|4[0-24-9]|5[0-68]|7[3467]|8[0-4]|9[2-467])|461|502|6(?:12|7[67]|8[78]|9[89])|702)\\d{4}","\\d{7,10}",,,"2423456789"]
@@ -593,8 +675,12 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"BT",975,"00",,,,,,,,[[,"(17)(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4","1","",""],
-[,"([2-8])(\\d{3})(\\d{3})","$1 $2 $3","[2-8]","",""]]]
+,"BT",975,"00",,,,,,,,[[,"(17)(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["1"]
+,"",""]
+,[,"([2-8])(\\d{3})(\\d{3})","$1 $2 $3",["[2-8]"]
+,"",""]
+]
+]
 ,
   "BW": [,[,,"[2-9]\\d{6,7}","\\d{7,8}"]
 ,[,,"(?:2(?:4[0-48]|6[0-24]|9[0578])|3(?:1[0235-9]|55|6\\d|7[01]|9[0-57])|4(?:6[03]|7[1267]|9[0-5])|5(?:3[0389]|4[0489]|7[1-47]|88|9[0-49])|6(?:2[1-35]|5[149]|8[067]))\\d{4}","\\d{7}",,,"2401234"]
@@ -604,8 +690,12 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"BW",267,"00",,,,,,,,[[,"(7[1-4])(\\d{3})(\\d{3})","$1 $2 $3","7","",""],
-[,"(90)(\\d{5})","$1 $2","9","",""]]]
+,"BW",267,"00",,,,,,,,[[,"(7[1-4])(\\d{3})(\\d{3})","$1 $2 $3",["7"]
+,"",""]
+,[,"(90)(\\d{5})","$1 $2",["9"]
+,"",""]
+]
+]
 ,
   "BY": [,[,,"[12-4]\\d{8}|[89]\\d{9}","\\d{7,10}"]
 ,[,,"(?:1(?:5(?:1[1-5]|2\\d|6[1-4]|9[1-7])|6(?:[235]\\d|4[1-7])|7\\d{2})|2(?:1(?:[246]\\d|3[0-35-9]|5[1-9])|2(?:[235]\\d|4[0-8])|3(?:2\\d|3[02-79]|4[024-7]|5[0-7])))\\d{5}","\\d{7,9}",,,"152450911"]
@@ -615,8 +705,12 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"BY",375,"8~10","8",,,"80?",,,,[[,"([1-4]\\d)(\\d{3})(\\d{4})","$1 $2 $3","[1-4]","8 0$1",""],
-[,"([89]\\d{2})(\\d{3})(\\d{4})","$1 $2 $3","[89]","8 $1",""]]]
+,"BY",375,"8~10","8",,,"80?",,,,[[,"([1-4]\\d)(\\d{3})(\\d{4})","$1 $2 $3",["[1-4]"]
+,"8 0$1",""]
+,[,"([89]\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["[89]"]
+,"8 $1",""]
+]
+]
 ,
   "BZ": [,[]
 ,[]
@@ -646,8 +740,12 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"CD",243,"00","0",,,"0",,,,[[,"([89]\\d{2})(\\d{3})(\\d{3})","$1 $2 $3","[89]","0$1",""],
-[,"([1-6]\\d)(\\d{5})","$1 $2","[1-6]","0$1",""]]]
+,"CD",243,"00","0",,,"0",,,,[[,"([89]\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["[89]"]
+,"0$1",""]
+,[,"([1-6]\\d)(\\d{5})","$1 $2",["[1-6]"]
+,"0$1",""]
+]
+]
 ,
   "CF": [,[,,"[278]\\d{7}","\\d{8}"]
 ,[,,"2[12]\\d{6}","\\d{8}",,,"21612345"]
@@ -657,7 +755,9 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"CF",236,"00",,,,,,,,[[,"(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",,"",""]]]
+,"CF",236,"00",,,,,,,,[[,"(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",,"",""]
+]
+]
 ,
   "CG": [,[,,"[24-68]\\d{6}","\\d{7}"]
 ,[,,"(?:2[1-589]|8\\d)\\d{5}","\\d{7}",,,"2123456"]
@@ -667,7 +767,9 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"CG",242,"00",,,,,,,,[[,"(\\d{3})(\\d{4})","$1 $2",,"",""]]]
+,"CG",242,"00",,,,,,,,[[,"(\\d{3})(\\d{4})","$1 $2",,"",""]
+]
+]
 ,
   "CH": [,[,,"[2-9]\\d{8}","\\d{9}"]
 ,[,,"(?:2[12467]|3[1-4]|4[134]|5[12568]|6[12]|[7-9]1)\\d{7}","\\d{9}",,,"212345678"]
@@ -677,9 +779,12 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"84[0248]\\d{6}","\\d{9}",,,"840123456"]
 ,[,,"878\\d{6}","\\d{9}",,,"878123456"]
 ,[,,"NA","NA"]
-,"CH",41,"00","0",,,"0",,,,[[,"([2-9]\\d)(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4","[2-6]|[7-9]1","0$1",""],
-[,"(7[46-9])(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4","7[46-9]","0$1",""],
-[,"([89]\\d{2})(\\d{3})(\\d{3})","$1 $2 $3","8[047]|90","0$1",""]]]
+,"CH",41,"00","0",,,"0",,,,[[,"([2-9]\\d)(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[2-7]|[89]1"]
+,"0$1",""]
+,[,"([89]\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["8[047]|90"]
+,"0$1",""]
+]
+]
 ,
   "CI": [,[,,"[02-5]\\d{7}","\\d{8}"]
 ,[,,"(?:2(?:0[023]|1[02357]|[23][045]|4[03-5])|3(?:0[06]|1[069]|[2-4][07]|5[09]|6[08]))\\d{5}","\\d{8}",,,"21234567"]
@@ -689,7 +794,9 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"CI",225,"00",,,,,,,,[[,"(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",,"",""]]]
+,"CI",225,"00",,,,,,,,[[,"(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",,"",""]
+]
+]
 ,
   "CK": [,[]
 ,[]
@@ -709,14 +816,22 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"44\\d{7}","\\d{9}",,,"441234567"]
-,"CL",56,"(?:0|1(?:1[0-69]|2[0-57]|5[13-58]|69|7[0167]|8[018]))0","0",,,"(?:0|1(?:1[0-69]|2[0-57]|5[13-58]|69|7[0167]|8[018]))",,,,[[,"(2)(\\d{3})(\\d{4})","$1 $2 $3","2","0$1",""],
-[,"(\\d{2})(\\d{2,3})(\\d{4})","$1 $2 $3","[357]|4[1-35]|6[13-57]","0$1",""],
-[,"(9)([6-9]\\d{3})(\\d{4})","$1 $2 $3","9","0$1",""],
-[,"(44)(\\d{3})(\\d{4})","$1 $2 $3","44","0$1",""],
-[,"(600)(\\d{3})(\\d{4})","$1 $2 $3","60","$1",""],
-[,"(600)(\\d{3})(\\d{2})(\\d{3})","$1 $2 $3 $4","60","$1",""],
-[,"(800)(\\d{3})(\\d{3})","$1 $2 $3","8","$1",""],
-[,"(1230)(\\d{3})(\\d{4})","$1 $2 $3","1","$1",""]]]
+,"CL",56,"(?:0|1(?:1[0-69]|2[0-57]|5[13-58]|69|7[0167]|8[018]))0","0",,,"(?:0|1(?:1[0-69]|2[0-57]|5[13-58]|69|7[0167]|8[018]))",,,,[[,"(2)(\\d{3})(\\d{4})","$1 $2 $3",["2"]
+,"0$1",""]
+,[,"(\\d{2})(\\d{2,3})(\\d{4})","$1 $2 $3",["[357]|4[1-35]|6[13-57]"]
+,"0$1",""]
+,[,"(9)([6-9]\\d{3})(\\d{4})","$1 $2 $3",["9"]
+,"0$1",""]
+,[,"(44)(\\d{3})(\\d{4})","$1 $2 $3",["44"]
+,"0$1",""]
+,[,"([68]00)(\\d{3})(\\d{3,4})","$1 $2 $3",["60|8"]
+,"$1",""]
+,[,"(600)(\\d{3})(\\d{2})(\\d{3})","$1 $2 $3 $4",["60"]
+,"$1",""]
+,[,"(1230)(\\d{3})(\\d{4})","$1 $2 $3",["1"]
+,"$1",""]
+]
+]
 ,
   "CM": [,[,,"[237-9]\\d{7}","\\d{8}"]
 ,[,,"(?:22|33)\\d{6}","\\d{8}",,,"22123456"]
@@ -726,24 +841,58 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"CM",237,"00",,,,,,,,[[,"([237-9]\\d)(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4","[2379]|88","",""],
-[,"(800)(\\d{2})(\\d{3})","$1 $2 $3","80","",""]]]
+,"CM",237,"00",,,,,,,,[[,"([237-9]\\d)(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[2379]|88"]
+,"",""]
+,[,"(800)(\\d{2})(\\d{3})","$1 $2 $3",["80"]
+,"",""]
+]
+]
 ,
   "CN": [,[,,"[1-79]\\d{7,11}|8[0-357-9]\\d{6,9}","\\d{4,12}"]
 ,[,,"21\\d{8,10}|(?:10|2[02-57-9]|3(?:11|7[159])|4[135]1|5(?:1\\d|2[37]|3[12]|7[13-79]|9[15])|7(?:31|5[457]|6[09])|898)\\d{8}|(?:3(?:1[02-9]|35|49|5\\d|7[02-68]|9[1-68])|4(?:1[02-9]|2[179]|[35][2-9]|6[4789]|7[0-46-9]|8[23])|5(?:3[03-9]|4[36]|5\\d|6[1-6]|7[028]|80|9[2-46-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\d|2[248]|3[04-9]|4[3-6]|6[2368])|8(?:1[236-8]|2[5-7]|[37]\\d|5[1-9]|8[3678]|9[1-7])|9(?:0[1-3689]|1[1-79]|[379]\\d|4[13]|5[1-5]))\\d{7}|80(?:29|6[03578]|7[018]|81)\\d{4}","\\d{4,12}",,,"1012345678"]
 ,[,,"1(?:3[0-9]|47|5[0135689]|8[05-9])\\d{8}","\\d{11}",,,"13123456789"]
-,[,,"10800\\d{7}","\\d{12}",,,"108001234567"]
+,[,,"(?:10)?800\\d{7}","\\d{10,12}",,,"8001234567"]
 ,[,,"16[08]\\d{5}","\\d{8}",,,"16812345"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"400\\d{7}","\\d{10}",,,"4001234567"]
-,"CN",86,"00","0",,,"0",,,,[[,"(21)(\\d{4})(\\d{4,6})","$1 $2 $3","21","0$1",""],
-[,"([12]\\d)(\\d{4})(\\d{4})","$1 $2 $3","10[1-9]|2[02-9]","0$1",""],
-[,"(80\\d{2})(\\d{4})","$1 $2","80","0$1",""],
-[,"(\\d{3})(\\d{3,4})(\\d{4})","$1 $2 $3","[35-79]|[48][1-9]","0$1",""],
-[,"(1[3-58]\\d)(\\d{4})(\\d{4})","$1 $2 $3","1[3-58]","",""],
-[,"(400)(\\d{3})(\\d{4})","$1 $2 $3","40","",""],
-[,"(10800)(\\d{3})(\\d{4})","$1 $2 $3","1080","",""]]]
+,"CN",86,"00","0",,,"0",,,,[[,"(80\\d{2})(\\d{4})","$1 $2",["80[2678]"]
+,"0$1",""]
+,[,"(\\d{3,4})(\\d{4})","$1 $2",["[2-9]"]
+,"",""]
+,[,"(21)(\\d{4})(\\d{4,6})","$1 $2 $3",["21"]
+,"0$1",""]
+,[,"([12]\\d)(\\d{4})(\\d{4})","$1 $2 $3",["10[1-9]|2[02-9]","10[1-9]|2[02-9]","10(?:[1-79]|8(?:[1-9]|0[1-9]))|2[02-9]"]
+,"0$1",""]
+,[,"(\\d{3})(\\d{4})(\\d{4})","$1 $2 $3",["3(?:11|7[159])|4[135]1|5(?:1|2[37]|3[12]|7[13-79]|9[15])|7(?:31|5[457]|6[09])|898"]
+,"0$1",""]
+,[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["3(?:1[02-9]|35|49|5|7[02-68]|9[1-68])|4(?:1[02-9]|2[179]|[35][2-9]|6[4789]|7[0-46-9]|8[23])|5(?:3[03-9]|4[36]|5|6[1-6]|7[028]|80|9[2-46-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]|2[248]|3[04-9]|4[3-6]|6[2368])|8(?:1[236-8]|2[5-7]|[37]|5[1-9]|8[3678]|9[1-7])|9(?:0[1-3689]|1[1-79]|[379]|4[13]|5[1-5])"]
+,"0$1",""]
+,[,"(1[3-58]\\d)(\\d{4})(\\d{4})","$1 $2 $3",["1[3-58]"]
+,"",""]
+,[,"([48]00)(\\d{3})(\\d{4})","$1 $2 $3",["[48]00"]
+,"",""]
+,[,"(10800)(\\d{3})(\\d{4})","$1 $2 $3",["108","1080","10800"]
+,"",""]
+]
+,[[,"(21)(\\d{4})(\\d{4,6})","$1 $2 $3",["21"]
+,,""]
+,[,"([12]\\d)(\\d{4})(\\d{4})","$1 $2 $3",["10[1-9]|2[02-9]","10[1-9]|2[02-9]","10(?:[1-79]|8(?:[1-9]|0[1-9]))|2[02-9]"]
+,,""]
+,[,"(80\\d{2})(\\d{4})","$1 $2",["80[2678]"]
+,,""]
+,[,"(\\d{3})(\\d{4})(\\d{4})","$1 $2 $3",["3(?:11|7[159])|4[135]1|5(?:1|2[37]|3[12]|7[13-79]|9[15])|7(?:31|5[457]|6[09])|898"]
+,,""]
+,[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["3(?:1[02-9]|35|49|5|7[02-68]|9[1-68])|4(?:1[02-9]|2[179]|[35][2-9]|6[4789]|7[0-46-9]|8[23])|5(?:3[03-9]|4[36]|5|6[1-6]|7[028]|80|9[2-46-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]|2[248]|3[04-9]|4[3-6]|6[2368])|8(?:1[236-8]|2[5-7]|[37]|5[1-9]|8[3678]|9[1-7])|9(?:0[1-3689]|1[1-79]|[379]|4[13]|5[1-5])"]
+,,""]
+,[,"(1[3-58]\\d)(\\d{4})(\\d{4})","$1 $2 $3",["1[3-58]"]
+,,""]
+,[,"([48]00)(\\d{3})(\\d{4})","$1 $2 $3",["[48]00"]
+,,""]
+,[,"(10800)(\\d{3})(\\d{4})","$1 $2 $3",["108","1080","10800"]
+,,""]
+]
+]
 ,
   "CO": [,[]
 ,[]
@@ -763,7 +912,9 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"CR",506,"00",,,,,,,,[[,"([28]\\d{3})(\\d{4})","$1 $2",,"",""]]]
+,"CR",506,"00",,,,,,,,[[,"([28]\\d{3})(\\d{4})","$1 $2",,"",""]
+]
+]
 ,
   "CU": [,[]
 ,[]
@@ -783,7 +934,9 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"CV",238,"0",,,,,,,,[[,"(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3",,"",""]]]
+,"CV",238,"0",,,,,,,,[[,"(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3",,"",""]
+]
+]
 ,
   "CY": [,[,,"[27-9]\\d{7}","\\d{8}"]
 ,[,,"2[2-6]\\d{6}","\\d{8}",,,"22345678"]
@@ -793,7 +946,9 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"700\\d{5}","\\d{8}",,,"70012345"]
 ,[,,"NA","NA"]
-,"CY",357,"00",,,,,,,,[[,"([27-9]\\d)(\\d{6})","$1 $2",,"",""]]]
+,"CY",357,"00",,,,,,,,[[,"([27-9]\\d)(\\d{6})","$1 $2",,"",""]
+]
+]
 ,
   "CZ": [,[,,"[2-9]\\d{8}","\\d{9}"]
 ,[,,"2\\d{8}|(?:3[1257-9]|4[16-9]|5[13-9])\\d{7}","\\d{9}",,,"212345678"]
@@ -803,7 +958,9 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"8[134]\\d{7}","\\d{9}",,,"811234567"]
 ,[,,"70[01]\\d{6}","\\d{9}",,,"700123456"]
 ,[,,"NA","NA"]
-,"CZ",420,"00",,,,,,,,[[,"([2-9]\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",,"",""]]]
+,"CZ",420,"00",,,,,,,,[[,"([2-9]\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",,"",""]
+]
+]
 ,
   "DE": [,[,,"(?:4[0-8]|[1-35-9]\\d)\\d{4,12}|49(?:4[1-8]|[0-35-7]\\d)\\d{2,7}","\\d{2,14}"]
 ,[,,"(?:[246]\\d{2}|3[02-9]\\d|5(?:0[2-8]|[38][0-8]|[124-6]\\d|[79][0-7])|[789](?:[1-9]\\d|0[2-9]))\\d{3,10}","\\d{2,14}",,,"30123456"]
@@ -813,17 +970,22 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"180\\d{5,11}","\\d{8,14}",,,"18012345"]
 ,[,,"700\\d{8}","\\d{11}",,,"70012345678"]
 ,[,,"NA","NA"]
-,"DE",49,"00","0",,,"0",,,,[[,"(\\d{2})(\\d{4,11})","$1/$2","3[02]|40|[68]9","0$1",""],
-[,"(\\d{3})(\\d{3,10})","$1/$2","2(?:\\d1|0[2389]|1[24]|28|34)|3[3-9][15]|340|906|[4-9][1-9]1","0$1",""],
-[,"([24-9]\\d{3})(\\d{2,8})","$1/$2","[24-6]|[7-9](?:\\d[1-9]|[1-9]\\d)","0$1",""],
-[,"(\\d{4})(\\d{2,7})","$1/$2","3(?:3(?:0[1-467]|2[127-9]|3[124578]|[46][1246]|7[1257-9]|8[1256]|9[145])|4(?:2[135]|3[1357]|4[13578]|6[1246]|7[1356]|9[1346])|5(?:0[14]|2[1-3589]|3[1357]|4[1246]|6[1-4]|7[1346]|8[13568]|9[1246])|6(?:0[356]|2[1-489]|3[124-6]|4[1347]|6[13]|7[12579]|8[1-356]|9[135])|7(?:2[1-7]|3[1357]|4[145]|6[1-5]|7[1-4])|8(?:21|3[1468]|4[1347]|6[0135-9]|7[1467]|8[136])|9(?:0[12479]|2[1358]|3[1357]|4[134679]|6[1-9]|7[136]|8[147]|9[1468]))","0$1",""],
-[,"(\\d{5})(\\d{1,6})","$1/$2","3","0$1",""],
-[,"(1[5-7]\\d)(\\d{7,8})","$1 $2","1[5-7]","0$1",""],
-[,"(180)(\\d)(\\d{4,10})","$1 $2 $3","180","0$1",""],
-[,"(700)(\\d{4})(\\d{4})","$1 $2 $3","700","0$1",""],
-[,"(800)(\\d{7,9})","$1 $2","800","0$1",""],
-[,"(900)(\\d)(\\d{6})","$1 $2 $3","900[135]","0$1",""],
-[,"(900)(9)(\\d{7})","$1 $2 $3","9009","0$1",""]]]
+,"DE",49,"00","0",,,"0",,,,[[,"(\\d{2})(\\d{4,11})","$1/$2",["3[02]|40|[68]9"]
+,"0$1",""]
+,[,"(\\d{3})(\\d{3,10})","$1/$2",["2(?:\\d1|0[2389]|1[24]|28|34)|3(?:[3-9][15]|40)|[4-8][1-9]1|9(?:06|[1-9]1)"]
+,"0$1",""]
+,[,"(\\d{4})(\\d{2,8})","$1/$2",["[24-6]|[7-9](?:\\d[1-9]|[1-9]\\d)|3(?:[3569][02-46-9]|4[2-4679]|7[2-467]|8[2-46-8])","[24-6]|[7-9](?:\\d[1-9]|[1-9]\\d)|3(?:3(?:0[1-467]|2[127-9]|3[124578]|[46][1246]|7[1257-9]|8[1256]|9[145])|4(?:2[135]|3[1357]|4[13578]|6[1246]|7[1356]|9[1346])|5(?:0[14]|2[1-3589]|3[1357]|4[1246]|6[1-4]|7[1346]|8[13568]|9[1246])|6(?:0[356]|2[1-489]|3[124-6]|4[1347]|6[13]|7[12579]|8[1-356]|9[135])|7(?:2[1-7]|3[1357]|4[145]|6[1-5]|7[1-4])|8(?:21|3[1468]|4[1347]|6[0135-9]|7[1467]|8[136])|9(?:0[12479]|2[1358]|3[1357]|4[134679]|6[1-9]|7[136]|8[147]|9[1468]))"]
+,"0$1",""]
+,[,"(\\d{5})(\\d{1,6})","$1/$2",["3"]
+,"0$1",""]
+,[,"([18]\\d{2})(\\d{7,9})","$1 $2",["1[5-7]|800"]
+,"0$1",""]
+,[,"(\\d{3})(\\d)(\\d{4,10})","$1 $2 $3",["(?:18|90)0","180|900[1359]"]
+,"0$1",""]
+,[,"(700)(\\d{4})(\\d{4})","$1 $2 $3",["700"]
+,"0$1",""]
+]
+]
 ,
   "DJ": [,[,,"[2-8]\\d{5}","\\d{6}"]
 ,[,,"(?:25|3[0-6]|42)\\d{4}","\\d{6}",,,"251234"]
@@ -833,7 +995,9 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"DJ",253,"00",,,,,,,,[[,"([2-8]\\d)(\\d{2})(\\d{2})","$1 $2 $3",,"",""]]]
+,"DJ",253,"00",,,,,,,,[[,"([2-8]\\d)(\\d{2})(\\d{2})","$1 $2 $3",,"",""]
+]
+]
 ,
   "DK": [,[,,"[1-9]\\d{7}","\\d{8}"]
 ,[,,"(?:3[2-9]|4[3-9]|5[4-9]|6[2-9]|7[02-9]|8[26-9]|9[6-9])\\d{6}","\\d{8}",,,"32123456"]
@@ -843,7 +1007,9 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"DK",45,"00",,,,,,,,[[,"([1-9]\\d)(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",,"",""]]]
+,"DK",45,"00",,,,,,,,[[,"([1-9]\\d)(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",,"",""]
+]
+]
 ,
   "DM": [,[,,"[7-9]\\d{9}","\\d{7,10}"]
 ,[,,"767(?:2(?:55|66)|4(?:2[01]|4[0-25-9])|50[0-4])\\d{4}","\\d{7,10}",,,"7674201234"]
@@ -873,9 +1039,14 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"80[12]1\\d{5}","\\d{9}",,,"801123456"]
 ,[,,"NA","NA"]
 ,[,,"98[23]\\d{6}","\\d{9}",,,"983123456"]
-,"DZ",213,"00","0",,,"0",,,,[[,"([1-4]\\d)(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4","[1-4]","0$1",""],
-[,"([5-8]\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4","[5-8]","0$1",""],
-[,"(9\\d)(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4","9","0$1",""]]]
+,"DZ",213,"00","0",,,"0",,,,[[,"([1-4]\\d)(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[1-4]"]
+,"0$1",""]
+,[,"([5-8]\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[5-8]"]
+,"0$1",""]
+,[,"(9\\d)(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",["9"]
+,"0$1",""]
+]
+]
 ,
   "EC": [,[]
 ,[]
@@ -895,10 +1066,14 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"70\\d{5}","\\d{7}",,,"7012345"]
 ,[,,"NA","NA"]
-,"EE",372,"00",,,,,,,,[[,"([34-79]\\d{2})(\\d{4})","$1 $2","[34679]|5(?:[02]\\d{2}|1(?:[0-8]\\d|95)|5[0-478]\\d|64[0-4]|65[1-589])","",""],
-[,"(8000)(\\d{3})(\\d{3})","$1 $2 $3","8000","",""],
-[,"([58]\\d{3})(\\d{4})","$1 $2","5|8(?:001|[1-5])","",""],
-[,"(800[2-9])(\\d{3})","$1 $2","800[2-9]","",""]]]
+,"EE",372,"00",,,,,,,,[[,"([34-79]\\d{2})(\\d{4})","$1 $2",["[34679]|5(?:[0-2]|5[0-478]|6[45])","[34679]|5(?:[02]|1(?:[0-8]|95)|5[0-478]|6(?:4[0-4]|5[1-589]))"]
+,"",""]
+,[,"(8000)(\\d{3})(\\d{3})","$1 $2 $3",["800","8000"]
+,"",""]
+,[,"([58]\\d{3})(\\d{3,4})","$1 $2",["5|8(?:00|[1-5])","5|8(?:00[1-9]|[1-5])"]
+,"",""]
+]
+]
 ,
   "EG": [,[,,"1\\d{4,9}|[2-689]\\d{7,9}","\\d{5,10}"]
 ,[,,"(?:1[35][23]|2[23]\\d|3\\d|4(?:0[2-4]|[578][23]|64)|5(?:0[234]|[57][23])|6[24-689]3|8(?:[28][2-4]|42|6[23])|9(?:[25]2|3[24]|6[23]|7[2-4]))\\d{6}|1[69]\\d{3}","\\d{5,9}",,,"234567890"]
@@ -908,10 +1083,14 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"EG",20,"00","0",,,"0",,,,[[,"(2)(\\d{8})","$1 $2","2","0$1",""],
-[,"(3)(\\d{7})","$1 $2","3","0$1",""],
-[,"(\\d{2})(\\d{7})","$1 $2","[14-6]|[89][2-9]","0$1",""],
-[,"([89]00)(\\d{3})(\\d{4})","$1 $2 $3","[89]00","0$1",""]]]
+,"EG",20,"00","0",,,"0",,,,[[,"(\\d)(\\d{7,8})","$1 $2",["[23]"]
+,"0$1",""]
+,[,"(\\d{2})(\\d{7})","$1 $2",["[14-6]|[89][2-9]"]
+,"0$1",""]
+,[,"([89]00)(\\d{3})(\\d{4})","$1 $2 $3",["[89]00"]
+,"0$1",""]
+]
+]
 ,
   "ER": [,[,,"[178]\\d{6}","\\d{6,7}"]
 ,[,,"1(?:1[12568]|20|40|55|6[146])\\d{4}|8\\d{6}","\\d{6,7}",,,"8370362"]
@@ -921,7 +1100,9 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"ER",291,"00","0",,,"0",,,,[[,"(\\d)(\\d{3})(\\d{3})","$1 $2 $3",,"0$1",""]]]
+,"ER",291,"00","0",,,"0",,,,[[,"(\\d)(\\d{3})(\\d{3})","$1 $2 $3",,"0$1",""]
+]
+]
 ,
   "ES": [,[,,"[5-9]\\d{8}","\\d{9}"]
 ,[,,"[89][1-8]\\d{7}","\\d{9}",,,"812345678"]
@@ -931,7 +1112,9 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"90[12]\\d{6}","\\d{9}",,,"901123456"]
 ,[,,"70\\d{7}","\\d{9}",,,"701234567"]
 ,[,,"NA","NA"]
-,"ES",34,"00",,,,,,,,[[,"([5-9]\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",,"",""]]]
+,"ES",34,"00",,,,,,,,[[,"([5-9]\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",,"",""]
+]
+]
 ,
   "ET": [,[,,"[1-59]\\d{8}","\\d{7,9}"]
 ,[,,"(?:11(?:1(?:1[124]|2[2-57]|3[1-5]|5[5-8]|8[6-8])|2(?:13|3[6-8]|5[89]|7[05-9]|8[2-6])|3(?:2[01]|3[0-289]|4[1289]|7[1-4]|87)|4(?:1[69]|3[2-49]|4[0-23]|6[5-8])|5(?:1[57]|44|5[0-4])|6(?:18|2[69]|4[5-7]|5[1-5]|6[0-59]|8[015-8]))|2(?:2(?:11[1-9]|22[0-7]|33\\d|44[1467]|66[1-68])|5(?:11[124-6]|33[2-8]|44[1467]|55[14]|66[1-3679]|77[124-79]|880))|3(?:3(?:11[0-46-8]|22[0-6]|33[0134689]|44[04]|55[0-6]|66[01467])|4(?:44[0-8]|55[0-69]|66[0-3]|77[1-5]))|4(?:6(?:22[0-24-7]|33[1-5]|44[13-69]|55[14-689]|660|88[1-4])|7(?:11[1-9]|22[1-9]|33[13-7]|44[13-6]|55[1-689]))|5(?:7(?:227|55[05]|(?:66|77)[14-8])|8(?:11[149]|22[013-79]|33[0-68]|44[013-8]|550|66[1-5]|77\\d)))\\d{4}","\\d{7,9}",,,"111112345"]
@@ -941,7 +1124,9 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"ET",251,"00","0",,,"0",,,,[[,"([1-59]\\d)(\\d{3})(\\d{4})","$1 $2 $3",,"0$1",""]]]
+,"ET",251,"00","0",,,"0",,,,[[,"([1-59]\\d)(\\d{3})(\\d{4})","$1 $2 $3",,"0$1",""]
+]
+]
 ,
   "FI": [,[,,"[1-9]\\d{4,11}","\\d{5,12}"]
 ,[,,"1(?:0[1-9]\\d{3,7}|[35689][1-8]\\d{3,9}|[47]\\d{5,10})|2(?:0(?:[16-8]\\d{3,7}|2[14-9]\\d{1,6}|[3-5]\\d{2,7}|9[0-7]\\d{1,6})|[1-8]\\d{3,9}|9\\d{4,8})|3(?:0[1-9]\\d{3,7}|[1-8]\\d{3,9}|9\\d{4,8})|[5689][1-8]\\d{3,9}|7(?:1\\d{7}|3\\d{8}|5[03-9]\\d{2,7})","\\d{5,12}",,,"1312345678"]
@@ -951,9 +1136,14 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"FI",358,"00|99[049]","0",,,"0",,,,[[,"(\\d{2})(\\d{4,10})","$1 $2","2[09]|[14]|50|7[135]","0$1",""],
-[,"(\\d)(\\d{4,11})","$1 $2","[25689][1-8]|3","0$1",""],
-[,"([6-8]00)(\\d{4,7})","$1 $2","[6-8]0","0$1",""]]]
+,"FI",358,"00|99[049]","0",,,"0",,,,[[,"(\\d{2})(\\d{4,10})","$1 $2",["2[09]|[14]|50|7[135]"]
+,"0$1",""]
+,[,"(\\d)(\\d{4,11})","$1 $2",["[25689][1-8]|3"]
+,"0$1",""]
+,[,"([6-8]00)(\\d{4,7})","$1 $2",["[6-8]0"]
+,"0$1",""]
+]
+]
 ,
   "FJ": [,[]
 ,[]
@@ -1003,8 +1193,12 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"9\\d{8}","\\d{9}",,,"912345678"]
-,"FR",33,"[04579]0","0",,,"0",,,,[[,"([1-79])(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4 $5","[1-79]","0$1",""],
-[,"(8\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4","8","0 $1",""]]]
+,"FR",33,"[04579]0","0",,,"0",,"00",,[[,"([1-79])(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4 $5",["[1-79]"]
+,"0$1",""]
+,[,"(8\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["8"]
+,"0 $1",""]
+]
+]
 ,
   "GA": [,[,,"[4-9]\\d{5}|0\\d{7}","\\d{6,8}"]
 ,[,,"(?:4(?:[04-8]\\d|2[04])|(?:5[04-689]|6[024-9]|7\\d|8[236]|9[02368])\\d)\\d{3}","\\d{6}",,,"441234"]
@@ -1014,8 +1208,12 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"GA",241,"00",,,,,,,,[[,"(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3","[4-9]","",""],
-[,"(0\\d)(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4","0","",""]]]
+,"GA",241,"00",,,,,,,,[[,"(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3",["[4-9]"]
+,"",""]
+,[,"(0\\d)(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["0"]
+,"",""]
+]
+]
 ,
   "GB": [,[,,"\\d{7,10}","\\d{6,10}"]
 ,[,,"1(?:1[3-8]|[2-69]1)\\d{7}|1(?:2(?:0[024-9]|2[3-9]|3[3-79]|4[1-689]|[58][02-9]|6[0-47-9]|7[013-9]|8[02-9]|9[0-9])|3(?:0\\d|[25][02-9]|3[02-579]|4[0-56-9]|[68][0-46-9]|7[1-35-79]|9[24578])|4(?:0[03-9]|2[02-57-9]|[37]\\d|4[02-69]|5[0-8]|[69][0-79]|8[02-9])|5(?:0[1-35-9]|2[024-9]|3[015689]|4[02-9]|[57][03-9]|6\\d|8[0-68]|9[0-57-9])|6(?:0[034689]|2[035689]|3[13-9]|4[1-467]|5[0-69]|6[13-9]|7[0-8]|8[013-9]|9[0-24578])|7(?:0[0246-9]|2\\d|3[0236-8]|4[03-9]|5[0-46-9]|6[13-9]|7[0-35-9]|8[024-9]|9[02-9])|8(?:0[35-9]|2[1-9]|3[02-578]|4[0-578]|5[124-9]|6[2-69]|7\\d|8[2-9]|9[02569])|9(?:0[02-589]|2[02-689]|3[1-57-9]|4[2-9]|5[0-579]|6[2-47-9]|7[0-24578]|8\\d|9[2-57]))\\d{5,6}|(?:2[03489]|3[0347]|55)\\d{8}","\\d{6,10}",,,"1212345678"]
@@ -1025,17 +1223,23 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"8(?:4[3-5]|70)\\d{7}","\\d{10}",,,"8431234567"]
 ,[,,"70\\d{8}","\\d{10}",,,"7012345678"]
 ,[,,"56\\d{8}","\\d{10}",,,"5612345678"]
-,"GB",44,"00","0"," x",,"0",,,,[[,"([235]\\d)(\\d{4})(\\d{4})","$1 $2 $3","[23]|55","0$1",""],
-[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3","1(?:1\\d|\\d1)","0$1",""],
-[,"(\\d{5})(\\d{4,5})","$1 $2","1(?:3873|5(?:242|39[4-6])|697[347]|768[347]|9467)","0$1",""],
-[,"(\\d{4})(\\d{4,6})","$1 $2","1","0$1",""],
-[,"(7\\d{3})(\\d{3})(\\d{3})","$1 $2 $3","7[1-9]","0$1",""],
-[,"(500)(\\d{3})(\\d{3})","$1 $2 $3","500","0$1",""],
-[,"([59]\\d)(\\d{4})(\\d{4})","$1 $2 $3","56|9[018]","0$1",""],
-[,"(70\\d{2})(\\d{6})","$1 $2","70","0$1",""],
-[,"(800)(1111)","$1 $2","8001","0$1",""],
-[,"(80\\d)(\\d{3})(\\d{3,4})","$1 $2 $3","80","0$1",""],
-[,"(8\\d{2})(\\d{3})(\\d{4})","$1 $2 $3","8(?:4[3-5]|7[01])","0$1",""]]
+,"GB",44,"00","0"," x",,"0",,,,[[,"(\\d{2})(\\d{4})(\\d{4})","$1 $2 $3",["[23]|5[56]|9[018]"]
+,"0$1",""]
+,[,"(\\d{3})(\\d{3})(\\d{3,4})","$1 $2 $3",["1(?:1|\\d1)|500"]
+,"0$1",""]
+,[,"(\\d{5})(\\d{4,5})","$1 $2",["1(?:38|5[23]|69|76|94)","1(?:387|5(?:24|39)|697|768|946)","1(?:3873|5(?:242|39[4-6])|697[347]|768[347]|9467)"]
+,"0$1",""]
+,[,"(1\\d{3})(\\d{4,6})","$1 $2",["1"]
+,"0$1",""]
+,[,"(7\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["7[1-9]"]
+,"0$1",""]
+,[,"(70\\d{2})(\\d{6})","$1 $2",["70"]
+,"0$1",""]
+,[,"(800)(1111)","$1 $2",["800","8001"]
+,"0$1",""]
+,[,"(8\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["8(?:0|4[3-5]|7[01])"]
+,"0$1",""]
+]
 ,,,1]
 ,
   "GD": [,[,,"[489]\\d{9}","\\d{7,10}"]
@@ -1056,12 +1260,18 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"GE",995,"8~10","8",,,"8",,,,[[,"(32)(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4","32","8 $1",""],
-[,"(\\d{3})(\\d{5})","$1 $2","2|3[13-79]|446","8 $1",""],
-[,"(\\d{4})(\\d{4})","$1 $2","44(?:2[2369]|[345])","8 $1",""],
-[,"(442[57])(\\d{3})","$1 $2","442[57]","8 $1",""],
-[,"(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3","[5679]","8 $1",""],
-[,"(800)(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4","8","8 $1",""]]]
+,"GE",995,"8~10","8",,,"8",,,,[[,"(32)(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["32"]
+,"8 $1",""]
+,[,"(\\d{3})(\\d{5})","$1 $2",["2|3[13-79]|446"]
+,"8 $1",""]
+,[,"(\\d{4})(\\d{3,4})","$1 $2",["44[2-5]"]
+,"8 $1",""]
+,[,"(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["[5679]"]
+,"8 $1",""]
+,[,"(800)(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["8"]
+,"8 $1",""]
+]
+]
 ,
   "GF": [,[]
 ,[]
@@ -1083,19 +1293,17 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"56\\d{8}","\\d{10}",,,"5612345678"]
 ,"GG",44,"00","0"," x",,"0"]
 ,
-  "GH": [,[,,"[2-9]\\d{4,8}","\\d{5,9}"]
-,[,,"(?:251|3[467]2|41|5(?:[36]1|[78]2)|61|882|9(?:1|6[268]))\\d{3}|(?:31[24]|567|6(?:1|5[23])|7(?:2|43)|9(?:1|35))\\d{4}|(?:2[12]|3(?:45|9[24])|4(?:2|32])|5(?:1|6[58])|64[28]|7(?:1[567]?|46|5[26]|62)|8(?:1|4[268]|7[26])|9(?:31|53))\\d{5}|(?:2[12]|42|51)\\d{6}|3\\d{8}","\\d{5,9}",,,"251234"]
-,[,,"2(?:755\\d{4}|(?:4\\d?|08)\\d{6}|[368]\\d{7})|54\\d{7}","\\d{8,9}",,,"27551234"]
+  "GH": [,[,,"[235]\\d{6,8}","\\d{7,9}"]
+,[,,"3(?:0[237]\\d|[167](?:2[0-6]|7\\d)|2(?:2[0-5]|7\\d)|3(?:2[0-37]|7\\d)|4(?:[27]\\d|30)|5(?:2[0-7]|7\\d)|8(?:2[0-2]|7\\d)|9(?:20|7\\d))\\d{5}","\\d{7,9}",,,"302345678"]
+,[,,"2((?:[47]\\d|08)\\d{6}|[368]\\d{7})|54\\d{7}","\\d{9}",,,"231234567"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"GH",233,"00","0",,,"0",,,,[[,"(\\d{2})(\\d{3,6})","$1 $2","[27][12]|4[12]|[35689]1","0$1",""],
-[,"([2-9]\\d{2})(\\d{3,5})","$1 $2","25|31|[4-9]","0$1",""],
-[,"(3\\d)(\\d{3})(\\d{4})","$1 $2 $3","3[02-9]","0$1",""],
-[,"(2[47])(\\d{3})(\\d{3,4})","$1 $2 $3","2[47]","0$1",""],
-[,"([25]\\d)(\\d{3})(\\d{4})","$1 $2 $3","2[0368]|54","0$1",""]]]
+,"GH",233,"00","0",,,"0",,,,[[,"(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",,"0$1",""]
+]
+]
 ,
   "GI": [,[]
 ,[]
@@ -1125,7 +1333,9 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"GM",220,"00",,,,,,,,[[,"(\\d{3})(\\d{4})","$1 $2",,"",""]]]
+,"GM",220,"00",,,,,,,,[[,"(\\d{3})(\\d{4})","$1 $2",,"",""]
+]
+]
 ,
   "GN": [,[,,"[367]\\d{7}","\\d{8}"]
 ,[,,"30(?:24|3[12]|4[1-35-7]|5[13]|6[189]|[78]1|9[1478])\\d{4}","\\d{8}",,,"30241234"]
@@ -1135,7 +1345,9 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"GN",224,"00",,,,,,,,[[,"(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",,"",""]]]
+,"GN",224,"00",,,,,,,,[[,"(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",,"",""]
+]
+]
 ,
   "GP": [,[,,"[56]\\d{8}","\\d{9}"]
 ,[,,"590(?:1[12]|2[0-68]|3[28]|4[126-8]|5[067]|6[018]|[89]\\d)\\d{4}","\\d{9}",,,"590201234"]
@@ -1145,7 +1357,8 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"GP",590,"00","0",,,"0",,,,[[,"([56]90)(\\d{2})(\\d{4})","$1 $2-$3",,"0$1",""]]
+,"GP",590,"00","0",,,"0",,,,[[,"([56]90)(\\d{2})(\\d{4})","$1 $2-$3",,"0$1",""]
+]
 ,,,1]
 ,
   "GQ": [,[,,"[23589]\\d{8}","\\d{6,9}"]
@@ -1156,8 +1369,12 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"GQ",240,"00",,,,,,,,[[,"(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3","[235]","",""],
-[,"(\\d{3})(\\d{6})","$1 $2","[899]","",""]]]
+,"GQ",240,"00",,,,,,,,[[,"(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["[235]"]
+,"",""]
+,[,"(\\d{3})(\\d{6})","$1 $2",["[89]"]
+,"",""]
+]
+]
 ,
   "GR": [,[,,"[26-9]\\d{9}","\\d{10}"]
 ,[,,"2(?:1\\d{2}|2(?:3[1-8]|4[1-7]|5[1-4]|6[1-8]|7[1-5]|[289][1-9])|3(?:1\\d|2[1-5]|3[1-4]|[45][1-3]|7[1-7]|8[1-6]|9[1-79])|4(?:1\\d|2[1-8]|3[1-4]|4[13-5]|6[1-578]|9[1-5])|5(?:1\\d|2[1-3]|4[124]|5[1-6]|[39][1-4])|6(?:1\\d|3[24]|4[1-7]|5[13-9]|[269][1-6]|7[14]|8[1-35])|7(?:1\\d|[23][1-5]|4[1-7]|5[1-57]|6[134]|9[15-7])|8(?:1\\d|2[1-5]|[34][1-4]|9[1-7]))\\d{6}","\\d{10}",,,"2123456789"]
@@ -1167,9 +1384,14 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"8(?:0[16]|12|25)\\d{7}","\\d{10}",,,"8011234567"]
 ,[,,"70\\d{8}","\\d{10}",,,"7012345678"]
 ,[,,"NA","NA"]
-,"GR",30,"00",,,,,,,,[[,"([27]\\d)(\\d{4})(\\d{4})","$1 $2 $3","21|7","",""],
-[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3","2[2-9]1|[689]","",""],
-[,"(2\\d{3})(\\d{6})","$1 $2","2[2-9][02-9]","",""]]]
+,"GR",30,"00",,,,,,,,[[,"([27]\\d)(\\d{4})(\\d{4})","$1 $2 $3",["21|7"]
+,"",""]
+,[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["2[2-9]1|[689]"]
+,"",""]
+,[,"(2\\d{3})(\\d{6})","$1 $2",["2[2-9][02-9]"]
+,"",""]
+]
+]
 ,
   "GT": [,[]
 ,[]
@@ -1199,7 +1421,9 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"GW",245,"00",,,,,,,,[[,"(\\d{3})(\\d{4})","$1 $2",,"",""]]]
+,"GW",245,"00",,,,,,,,[[,"(\\d{3})(\\d{4})","$1 $2",,"",""]
+]
+]
 ,
   "GY": [,[]
 ,[]
@@ -1211,7 +1435,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,"GY",592,"001","0",,,"0",,,1]
 ,
-  "HK": [,[,,"[235-9]\\d{7,11}","\\d{8,11}"]
+  "HK": [,[,,"[235-7]\\d{7}|8\\d{7,8}|9\\d{7,10}","\\d{8,11}"]
 ,[,,"[23]\\d{7}","\\d{8}",,,"21234567"]
 ,[,,"[5-79]\\d{7}","\\d{8}",,,"51234567"]
 ,[,,"800\\d{6}","\\d{9}",,,"800123456"]
@@ -1219,9 +1443,14 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"8[1-3]\\d{6}","\\d{8}"]
 ,[,,"NA","NA"]
-,"HK",852,"00",,,,,,,,[[,"(\\d{4})(\\d{4})","$1 $2","[235-7]|[89](?:0[1-9]|[1-9])","",""],
-[,"(800)(\\d{3})(\\d{3})","$1 $2 $3","800","",""],
-[,"(900)(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3 $4","900","",""]]]
+,"HK",852,"00",,,,,,,,[[,"(\\d{4})(\\d{4})","$1 $2",["[235-7]|[89](?:0[1-9]|[1-9])"]
+,"",""]
+,[,"(800)(\\d{3})(\\d{3})","$1 $2 $3",["800"]
+,"",""]
+,[,"(900)(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3 $4",["900"]
+,"",""]
+]
+]
 ,
   "HN": [,[]
 ,[]
@@ -1241,15 +1470,26 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"7[45]\\d{4,7}","\\d{6,9}",,,"741234567"]
 ,[,,"NA","NA"]
-,"HR",385,"00","0",,,"0",,,,[[,"(1)(\\d{4})(\\d{3})","$1 $2 $3","1","0$1",""],
-[,"(6[029])(\\d{4})(\\d{3})","$1 $2 $3","6[029]","0$1",""],
-[,"([2-5]\\d)(\\d{3})(\\d{3})","$1 $2 $3","[2-5]","0$1",""],
-[,"(9[12589])(\\d{3,4})(\\d{3,4})","$1 $2 $3","9","0$1",""],
-[,"(9[12589])(\\d{3,4})(\\d{3})(\\d{3})","$1 $2 $3 $4","9","0$1",""],
-[,"(\\d{2})(\\d{2})(\\d{2,3})","$1 $2 $3","6[145]|7","0$1",""],
-[,"(\\d{2})(\\d{3,4})(\\d{3})","$1 $2 $3","6[145]|7","0$1",""],
-[,"(80[01])(\\d{2})(\\d{2,3})","$1 $2 $3","8","0$1",""],
-[,"(80[01])(\\d{3,4})(\\d{3})","$1 $2 $3","8","0$1",""]]]
+,"HR",385,"00","0",,,"0",,,,[[,"(1)(\\d{4})(\\d{3})","$1 $2 $3",["1"]
+,"0$1",""]
+,[,"(6[029])(\\d{4})(\\d{3})","$1 $2 $3",["6[029]"]
+,"0$1",""]
+,[,"([2-5]\\d)(\\d{3})(\\d{3})","$1 $2 $3",["[2-5]"]
+,"0$1",""]
+,[,"(9[12589])(\\d{3,4})(\\d{3,4})","$1 $2 $3",["9"]
+,"0$1",""]
+,[,"(9[12589])(\\d{3,4})(\\d{3})(\\d{3})","$1 $2 $3 $4",["9"]
+,"0$1",""]
+,[,"(\\d{2})(\\d{2})(\\d{2,3})","$1 $2 $3",["6[145]|7"]
+,"0$1",""]
+,[,"(\\d{2})(\\d{3,4})(\\d{3})","$1 $2 $3",["6[145]|7"]
+,"0$1",""]
+,[,"(80[01])(\\d{2})(\\d{2,3})","$1 $2 $3",["8"]
+,"0$1",""]
+,[,"(80[01])(\\d{3,4})(\\d{3})","$1 $2 $3",["8"]
+,"0$1",""]
+]
+]
 ,
   "HT": [,[]
 ,[]
@@ -1269,9 +1509,12 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"40\\d{6}","\\d{8}",,,"40123456"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"HU",36,"00","06",,,"06",,,,[[,"(1)(\\d{3})(\\d{4})","$1 $2 $3","1","($1)",""],
-[,"(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3","[4-689]|[237][2-9]","($1)",""],
-[,"([237][01])(\\d{3})(\\d{4})","$1 $2 $3","[237][01]","($1)",""]]]
+,"HU",36,"00","06",,,"06",,,,[[,"(1)(\\d{3})(\\d{4})","$1 $2 $3",["1"]
+,"($1)",""]
+,[,"(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["[2-9]"]
+,"($1)",""]
+]
+]
 ,
   "ID": [,[,,"[1-9]\\d{6,10}","\\d{5,11}"]
 ,[,,"2[124]\\d{7,8}|(?:2(?:[35][1-4]|6[0-8]|7[1-6]|8\\d|9[1-8])|3(?:1|2[1-578]|3[1-68]|4[1-3]|5[1-8]|6[1-3568]|7[0-46]|8\\d)|4(?:0[1-589]|1[01347-9]|2[0-36-8]|3[0-24-68]|5[1-378]|6[1-5]|7[134]|8[1245])|5(?:1[1-35-9]|2[25-8]|3[1246-9]|4[1-3589]|5[1-46]|6[1-8])|6(?:19?|[25]\\d|3[1-469]|4[1-6])|7(?:1[1-46-9]|2[14-9]|[36]\\d|4[1-8]|5[1-9]|7[0-36-9])|9(?:0[12]|1[0134-8]|2[0-479]|5[125-8]|6[23679]|7[159]|8[01346]))\\d{5,8}","\\d{5,10}",,,"612345678"]
@@ -1281,12 +1524,20 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"ID",62,"0(?:0[1789]|10(?:00|1[67]))","0",,,"0",,,,[[,"(\\d{2})(\\d{7,8})","$1 $2","2[124]|[36]1","(0$1)",""],
-[,"(\\d{3})(\\d{5,7})","$1 $2","[4579]|2[035-9]|[36][02-9]","(0$1)",""],
-[,"(8\\d{2})(\\d{3,4})(\\d{3,4})","$1-$2-$3","8[1-35-9]","0$1",""],
-[,"(177)(\\d{6,8})","$1 $2","1","0$1",""],
-[,"(800)(\\d{5,7})","$1 $2","800","0$1",""],
-[,"(809)(\\d)(\\d{3})(\\d{3})","$1 $2 $3 $4","809","0$1",""]]]
+,"ID",62,"0(?:0[1789]|10(?:00|1[67]))","0",,,"0",,,,[[,"(\\d{2})(\\d{7,8})","$1 $2",["2[124]|[36]1"]
+,"(0$1)",""]
+,[,"(\\d{3})(\\d{5,7})","$1 $2",["[4579]|2[035-9]|[36][02-9]"]
+,"(0$1)",""]
+,[,"(8\\d{2})(\\d{3,4})(\\d{3,4})","$1-$2-$3",["8[1-35-9]"]
+,"0$1",""]
+,[,"(177)(\\d{6,8})","$1 $2",["1"]
+,"0$1",""]
+,[,"(800)(\\d{5,7})","$1 $2",["800"]
+,"0$1",""]
+,[,"(809)(\\d)(\\d{3})(\\d{3})","$1 $2 $3 $4",["809"]
+,"0$1",""]
+]
+]
 ,
   "IE": [,[,,"[124-9]\\d{6,9}","\\d{5,10}"]
 ,[,,"1\\d{7,8}|(?:2[24-9]|4(?:0[24]|7)|5(?:0[45]|8)|6[237-9]|9[3-9])\\d{5}|(?:45|[569]1|818)\\d{6}|(?:4[12469]|5[3679]|6[56]|7[14]|9[04])\\d{7}|21\\d{6,7}|(?:23|4[34]|52|64)\\d{5,7}|48\\d{8}","\\d{5,10}",,,"2212345"]
@@ -1296,16 +1547,26 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"18[59]0\\d{6}","\\d{10}",,,"1850123456"]
 ,[,,"700\\d{6}","\\d{9}",,,"700123456"]
 ,[,,"76\\d{7}","\\d{9}",,,"761234567"]
-,"IE",353,"00","0",,,"0",,,,[[,"(1)(\\d{3,4})(\\d{4})","$1 $2 $3","1","(0$1)",""],
-[,"(\\d{2})(\\d{5})","$1 $2","2[2-9]|4[347]|5[2-58]|6[2-47-9]|9[3-9]","(0$1)",""],
-[,"(\\d{3})(\\d{5})","$1 $2","40[24]|50[45]","(0$1)",""],
-[,"(48)(\\d{4})(\\d{4})","$1 $2 $3","48","(0$1)",""],
-[,"(818)(\\d{3})(\\d{3})","$1 $2 $3","81","(0$1)",""],
-[,"(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3","[24-69]|7[14]","(0$1)",""],
-[,"(8[35-9])(\\d{3})(\\d{4})","$1 $2 $3","8[35-9]","0$1",""],
-[,"(76)(\\d{3})(\\d{4})","$1 $2 $3","76","0$1",""],
-[,"(700)(\\d{3})(\\d{3})","$1 $2 $3","70","0$1",""],
-[,"(\\d{4})(\\d{3})(\\d{3})","$1 $2 $3","1(?:8[059]0|5)","$1",""]]]
+,"IE",353,"00","0",,,"0",,,,[[,"(1)(\\d{3,4})(\\d{4})","$1 $2 $3",["1"]
+,"(0$1)",""]
+,[,"(\\d{2})(\\d{5})","$1 $2",["2[2-9]|4[347]|5[2-58]|6[2-47-9]|9[3-9]"]
+,"(0$1)",""]
+,[,"(\\d{3})(\\d{5})","$1 $2",["40[24]|50[45]"]
+,"(0$1)",""]
+,[,"(48)(\\d{4})(\\d{4})","$1 $2 $3",["48"]
+,"(0$1)",""]
+,[,"(818)(\\d{3})(\\d{3})","$1 $2 $3",["81"]
+,"(0$1)",""]
+,[,"(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["[24-69]|7[14]"]
+,"(0$1)",""]
+,[,"([78]\\d)(\\d{3})(\\d{4})","$1 $2 $3",["76|8[35-9]"]
+,"0$1",""]
+,[,"(700)(\\d{3})(\\d{3})","$1 $2 $3",["70"]
+,"0$1",""]
+,[,"(\\d{4})(\\d{3})(\\d{3})","$1 $2 $3",["1(?:8[059]|5)","1(?:8[059]0|5)"]
+,"$1",""]
+]
+]
 ,
   "IL": [,[,,"[1-57-9]\\d{6,9}","\\d{7,10}"]
 ,[,,"(?:[2-489]|7[2-46-8])\\d{7}","\\d{7,9}",,,"21234567"]
@@ -1315,12 +1576,20 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"1(?:700|809)\\d{6}","\\d{10}",,,"1700123456"]
 ,[,,"NA","NA"]
 ,[,,"77\\d{7}","\\d{9}",,,"771234567"]
-,"IL",972,"0(?:0|1[2-48])","0",,,"0",,,,[[,"([2-489])(\\d{3})(\\d{4})","$1-$2-$3","[2-489]","0$1",""],
-[,"([57]\\d)(\\d{3})(\\d{4})","$1-$2-$3","[57]","0$1",""],
-[,"(1)([7-9]\\d{2})(\\d{3})(\\d{3})","$1-$2-$3-$4","1[7-9]","$1",""],
-[,"(1255)(\\d{3})","$1-$2","125","$1",""],
-[,"(1200)(\\d{3})(\\d{3})","$1-$2-$3","120","$1",""],
-[,"(1212)(\\d{2})(\\d{2})","$1-$2-$3","121","$1",""]]]
+,"IL",972,"0(?:0|1[2-48])","0",,,"0",,,,[[,"([2-489])(\\d{3})(\\d{4})","$1-$2-$3",["[2-489]"]
+,"0$1",""]
+,[,"([57]\\d)(\\d{3})(\\d{4})","$1-$2-$3",["[57]"]
+,"0$1",""]
+,[,"(1)([7-9]\\d{2})(\\d{3})(\\d{3})","$1-$2-$3-$4",["1[7-9]"]
+,"$1",""]
+,[,"(1255)(\\d{3})","$1-$2",["125"]
+,"$1",""]
+,[,"(1200)(\\d{3})(\\d{3})","$1-$2-$3",["120"]
+,"$1",""]
+,[,"(1212)(\\d{2})(\\d{2})","$1-$2-$3",["121"]
+,"$1",""]
+]
+]
 ,
   "IM": [,[,,"[157-9]\\d{6,9}","\\d{6,10}"]
 ,[,,"1624\\d{6}","\\d{6,10}",,,"1624123456"]
@@ -1340,19 +1609,34 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"IN",91,"00","0",,,"0",,,,[[,"(\\d{2})(\\d{2})(\\d{6})","$1 $2 $3","7(?:39|5(?:50|[6-9])|[67][02-9]|8[0-6])|8(?:0[01589]|1[024]|8(?:[079]|44)|9[057-9])|9","0$1",""],
-[,"(\\d{2})(\\d{4})(\\d{4})","$1 $2 $3","11|2[02]|33|4[04]|79|80[2-6]","0$1",""],
-[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3","1(?:2[0-249]|3[0-25]|4[145]|5[14]|6[14]|7[1257]|8[1346]|9[14]|[68][1-9])","0$1",""],
-[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3","2(?:1[257]|3[013]|4[01]|5[0137]|6[0158]|78|8[1568]|9[14])","0$1",""],
-[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3","3(?:26|4[1-3]|5[34]|6[01489]|7[02-46]|8[159])","0$1",""],
-[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3","4(?:1[36]|2[1-47]|3[15]|5[12]|6[126-9]|7[0-24-9]|8[013-57]|9[014-7])","0$1",""],
-[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3","5(?:1[25]|22|3[25]|4[28]|5[12]|6[25]|[78]1|9[15])","0$1",""],
-[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3","6(?:12|[2345]1|57|6[13]|7[14]|80)","0$1",""],
-[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3","7(?:12|2[14]|3[134]|4[47]|5(?:1|5[1-9])|[67]1|88)","0$1",""],
-[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3","8(?:16|2[014]|3[126]|6[136]|7[078]|8[34]|91)","0$1",""],
-[,"(\\d{4})(\\d{3})(\\d{3})","$1 $2 $3","1(?:[2-579]|[68][1-9])|[2-8]","0$1",""],
-[,"(1600)(\\d{2})(\\d{4})","$1 $2 $3","1600","$1",""],
-[,"(1800)(\\d{2,3})(\\d{4})","$1 $2 $3","1800","$1",""]]]
+,"IN",91,"00","0",,,"0",,,,[[,"(\\d{2})(\\d{2})(\\d{6})","$1 $2 $3",["7(?:39|5[5-9]|[67][02-9]|8[0-6])|8(?:0[01589]|1[024]|8[0479]|9[057-9])|9","7(?:39|5(?:50|[6-9])|[67][02-9]|8[0-6])|8(?:0[01589]|1[024]|8(?:[079]|44)|9[057-9])|9"]
+,"0$1",""]
+,[,"(\\d{2})(\\d{4})(\\d{4})","$1 $2 $3",["11|2[02]|33|4[04]|79|80[2-6]"]
+,"0$1",""]
+,[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["1(?:2[0-249]|3[0-25]|4[145]|[569][14]|7[1257]|8[1346]|[68][1-9])"]
+,"0$1",""]
+,[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["2(?:1[257]|3[013]|4[01]|5[0137]|6[0158]|78|8[1568]|9[14])"]
+,"0$1",""]
+,[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["3(?:26|4[1-3]|5[34]|6[01489]|7[02-46]|8[159])"]
+,"0$1",""]
+,[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["4(?:1[36]|2[1-47]|3[15]|5[12]|6[126-9]|7[0-24-9]|8[013-57]|9[014-7])"]
+,"0$1",""]
+,[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["5(?:[136][25]|22|4[28]|5[12]|[78]1|9[15])"]
+,"0$1",""]
+,[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["6(?:12|[2345]1|57|6[13]|7[14]|80)"]
+,"0$1",""]
+,[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["7(?:12|2[14]|3[134]|4[47]|5[15]|[67]1|88)","7(?:12|2[14]|3[134]|4[47]|5(?:1|5[1-9])|[67]1|88)"]
+,"0$1",""]
+,[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["8(?:16|2[014]|3[126]|6[136]|7[078]|8[34]|91)"]
+,"0$1",""]
+,[,"(\\d{4})(\\d{3})(\\d{3})","$1 $2 $3",["1(?:[2-579]|[68][1-9])|[2-8]"]
+,"0$1",""]
+,[,"(1600)(\\d{2})(\\d{4})","$1 $2 $3",["160","1600"]
+,"$1",""]
+,[,"(1800)(\\d{2,3})(\\d{4})","$1 $2 $3",["180","1800"]
+,"$1",""]
+]
+]
 ,
   "IO": [,[]
 ,[]
@@ -1372,9 +1656,14 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"IQ",964,"00","0",,,"0",,,,[[,"(1)(\\d{3})(\\d{4})","$1 $2 $3","1","0$1",""],
-[,"([2-6]\\d)(\\d{3})(\\d{3,4})","$1 $2 $3","[2-6]","0$1",""],
-[,"(7[5-9]\\d)(\\d{3})(\\d{4})","$1 $2 $3","7","0$1",""]]]
+,"IQ",964,"00","0",,,"0",,,,[[,"(1)(\\d{3})(\\d{4})","$1 $2 $3",["1"]
+,"0$1",""]
+,[,"([2-6]\\d)(\\d{3})(\\d{3,4})","$1 $2 $3",["[2-6]"]
+,"0$1",""]
+,[,"(7[5-9]\\d)(\\d{3})(\\d{4})","$1 $2 $3",["7"]
+,"0$1",""]
+]
+]
 ,
   "IR": [,[,,"[1-9]\\d{9}","\\d{7,10}"]
 ,[,,"[1-8]\\d{9}","\\d{7,10}",,,"2123456789"]
@@ -1384,8 +1673,12 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"IR",98,"00","0",,,"0",,,,[[,"(21)(\\d{4})(\\d{4})","$1 $2 $3","21","0$1",""],
-[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3","[13-89]|2[02-9]","0$1",""]]]
+,"IR",98,"00","0",,,"0",,,,[[,"(21)(\\d{4})(\\d{4})","$1 $2 $3",["21"]
+,"0$1",""]
+,[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["[13-89]|2[02-9]"]
+,"0$1",""]
+]
+]
 ,
   "IS": [,[]
 ,[]
@@ -1405,17 +1698,26 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"84[78]\\d{6,7}","\\d{9,10}",,,"8481234567"]
 ,[,,"178\\d{6,7}","\\d{9,10}",,,"1781234567"]
 ,[,,"NA","NA"]
-,"IT",39,"00",,,,,,,,[[,"(0[26])(\\d{3,4})(\\d{4})","$1 $2 $3","0[26]","",""],
-[,"(0[26])(\\d{4})(\\d{5})","$1 $2 $3","0[26]","",""],
-[,"(0[26])(\\d{6})","$1 $2","0[26]","",""],
-[,"(0\\d{2})(\\d{3,4})(\\d{4})","$1 $2 $3","0(?:[13-57-9][0159]|36)","",""],
-[,"(0\\d{2})(\\d{5,6})","$1 $2","0(?:[13-57-9][0159]|36)","",""],
-[,"(0\\d{3})(\\d{3})(\\d{4})","$1 $2 $3","0[13-57-9]","",""],
-[,"(0\\d{3})(\\d{4,6})","$1 $2","0[13-57-9]","",""],
-[,"(\\d{3})(\\d{3})(\\d{3,4})","$1 $2 $3","[13]|84[78]","",""],
-[,"(800)(\\d{3})(\\d{3})","$1 $2 $3","800","",""],
-[,"(803)(\\d{3})","$1 $2","803","",""],
-[,"(89\\d)(\\d{3,6})","$1 $2","89","",""]]]
+,"IT",39,"00",,,,,,,,[[,"(0[26])(\\d{3,4})(\\d{4})","$1 $2 $3",["0[26]"]
+,"",""]
+,[,"(0[26])(\\d{4})(\\d{5})","$1 $2 $3",["0[26]"]
+,"",""]
+,[,"(0[26])(\\d{6})","$1 $2",["0[26]"]
+,"",""]
+,[,"(0\\d{2})(\\d{3,4})(\\d{4})","$1 $2 $3",["0(?:[13-57-9][0159]|36)"]
+,"",""]
+,[,"(0\\d{2})(\\d{5,6})","$1 $2",["0(?:[13-57-9][0159]|36)"]
+,"",""]
+,[,"(0\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["0[13-57-9]"]
+,"",""]
+,[,"(0\\d{3})(\\d{4,6})","$1 $2",["0[13-57-9]"]
+,"",""]
+,[,"(\\d{3})(\\d{3})(\\d{3,4})","$1 $2 $3",["[13]|8(?:00|4[78])"]
+,"",""]
+,[,"(\\d{3})(\\d{3,6})","$1 $2",["8(?:03|9)"]
+,"",""]
+]
+]
 ,
   "JE": [,[,,"[157-9]\\d{6,9}","\\d{6,10}"]
 ,[,,"1534\\d{6}","\\d{6,10}",,,"1534123456"]
@@ -1438,17 +1740,21 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,"JM",1,"011",,,,,,,,,,,,"876"]
 ,
   "JO": [,[,,"[235-9]\\d{7,8}","\\d{7,9}"]
-,[,,"(?:[2356][2-8])\\d{6}","\\d{7,8}",,,"62345678"]
-,[,,"7(?:4[5-7]|7[5-79]|8[5-8]|9[05-9])\\d{6}","\\d{9}",,,"790123456"]
+,[,,"[2356][2-8]\\d{6}","\\d{7,8}",,,"62345678"]
+,[,,"7(?:4[5-7]|55|7[5-79]|8[5-8]|9[05-9])\\d{6}","\\d{9}",,,"790123456"]
 ,[,,"80\\d{6}","\\d{8}",,,"80012345"]
 ,[,,"90\\d{6}","\\d{8}",,,"90012345"]
 ,[,,"(?:8[57]\\d|810)\\d{5}","\\d{8}",,,"85012345"]
 ,[,,"70\\d{7}","\\d{9}",,,"700123456"]
 ,[,,"NA","NA"]
-,"JO",962,"00","0",,,"0",,,,[[,"([2356])(\\d{3})(\\d{4})","$1 $2 $3","[2356]","(0$1)",""],
-[,"(7)(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4 $5","7[47-9]","0$1",""],
-[,"(70\\d)(\\d{6})","$1 $2","70","0$1",""],
-[,"([89]\\d{2})(\\d{5})","$1 $2","[89]","0$1",""]]]
+,"JO",962,"00","0",,,"0",,,,[[,"([2356])(\\d{3})(\\d{4})","$1 $2 $3",["[2356]"]
+,"(0$1)",""]
+,[,"(7)(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4 $5",["7[457-9]"]
+,"0$1",""]
+,[,"(\\d{3})(\\d{5,6})","$1 $2",["70|[89]"]
+,"0$1",""]
+]
+]
 ,
   "JP": [,[,,"\\d{9,10}","\\d{9,10}"]
 ,[,,"(?:1[1-9][1-9]|9(?:[3-9][1-9]|2\\d)|(?:[36][1-9]|[24578][2-9])\\d)\\d{6}","\\d{9}",,,"312345678"]
@@ -1458,14 +1764,24 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"60\\d{7}","\\d{9}",,,"601234567"]
 ,[,,"50\\d{8}","\\d{10}",,,"5012345678"]
-,"JP",81,"010","0",,,"0",,,,[[,"(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3","(?:12|99)0","0$1",""],
-[,"(\\d{2})(\\d{4})(\\d{4})","$1 $2 $3","[57-9]0","0$1",""],
-[,"(\\d{4})(\\d)(\\d{4})","$1 $2 $3","1(?:267|3(?:7[247]|9[278])|4(?:5[67]|66)|5(?:47|58|64|8[67])|6(?:3[245]|48|5[4-68]))|5(?:769|979[2-69])|499[2468]|7468|8(?:3(?:8[78]|96[2457-9])|636[2-57-9]|477|51[24])|9(?:496|802|91[23]|969)","0$1",""],
-[,"(\\d{3})(\\d{2})(\\d{4})","$1 $2 $3","1(?:2[3-6]|3[3-9]|4[2-6]|5(?:[236-8]|[45][2-69])|6[2-7]|7[2-689]|8[2-7]|9[1-578])|2(?:2[04-9]|3[3-58]|4[0-468]|6[0135-8]|7[0679]|8[024578]|23[23]|5(?:5[78]|7[2-4]|[0468][2-9])|6(?:17|4[2-5])|78[2-7]|8(?:3[25-9]|9[6-9])|9(?:11|3[2-4]))|4(?:2(?:2[2-9]|8[237-9])|7[059][2-8]|3[689]|6[035-7]|7[68]|80|9[3-5])|5(?:3[1-36-9]|9(?:7[49]|[89][2-8])|4[4578]|5[013-8]|6[1-9]|7[2-8]|8[14-7]|9[4-7])|7(?:2[15]|3[5-9]|4[02-9]|6[135-8]|7[0-4689]|9[017-9]|618|797|9(?:4[6-8]|5[2-478]|6[2-589]))|8(?:29(?:20|4[04-9]|65[25]|[36]60)|376[0-59]|6(?:366|55[014-9]|69[02-69]|99[23])|24[4-8]|29[3578]|3(?:[3-6][2-9]|[78][2-5])|6(?:5[467]|9[236-8]|[68][2-8])|4[5-8]|5[2-9]|6[37]|7[579]|8[03-579]|9[2-8])|9(?:[23]0|4[0246-9]|5[025-79]|6[4-9]|7[27-9]|8[02-7]|[47]3|[57]4|9(?:4[2-69]|3(?:3[02-9]|4[0-24689])|[5-7]))","0$1",""],
-[,"(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3","1|2(?:23|5(?:[57]|[68]0|917|999)|64|78|8[39]|917)|4(?:2(?:[68]|20|9[178])|64|7[347])|5(?:[2-589]|39[67])|8(?:[46-9]|3[279]|2(?:[124589]|9[24])|3[79]6|6(?:69|99))|9(?:[235-8]|9331|934)|15[45]","0$1",""],
-[,"(\\d{3})(\\d{2})(\\d{4})","$1 $2 $3","2(?:9[14-79]|74|[34]7|[56]9)|82|993","0$1",""],
-[,"(\\d)(\\d{4})(\\d{4})","$1 $2 $3","[36]|4(?:2[09]|7[01])","0$1",""],
-[,"(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3","[2479]","0$1",""]]]
+,"JP",81,"010","0",,,"0",,,,[[,"(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["(?:12|99)0"]
+,"0$1",""]
+,[,"(\\d{2})(\\d{4})(\\d{4})","$1 $2 $3",["[57-9]0"]
+,"0$1",""]
+,[,"(\\d{4})(\\d)(\\d{4})","$1 $2 $3",["1(?:26|3[79]|4[56]|5[4-68]|6[3-5])|5(?:76|97)|499|746|8(?:3[89]|63|47|51)|9(?:49|80|9[16])","1(?:267|3(?:7[247]|9[278])|4(?:5[67]|66)|5(?:47|58|64|8[67])|6(?:3[245]|48|5[4-68]))|5(?:76|97)9|499[2468]|7468|8(?:3(?:8[78]|96)|636|477|51[24])|9(?:496|802|9(?:1[23]|69))","1(?:267|3(?:7[247]|9[278])|4(?:5[67]|66)|5(?:47|58|64|8[67])|6(?:3[245]|48|5[4-68]))|5(?:769|979[2-69])|499[2468]|7468|8(?:3(?:8[78]|96[2457-9])|636[2-57-9]|477|51[24])|9(?:496|802|9(?:1[23]|69))"]
+,"0$1",""]
+,[,"(\\d{3})(\\d{2})(\\d{4})","$1 $2 $3",["1(?:2[3-6]|3[3-9]|4[2-6]|5[2-8]|[68][2-7]|7[2-689]|9[1-578])|2(?:2[034-9]|3[3-58]|4[0-468]|5[04-8]|6[013-8]|7[06-9]|8[02-57-9]|9[13])|4(?:2[28]|3[689]|6[035-7]|7[05689]|80|9[3-5])|5(?:3[1-36-9]|4[4578]|5[013-8]|6[1-9]|7[2-8]|8[14-7]|9[4-9])|7(?:2[15]|3[5-9]|4[02-9]|6[135-8]|7[0-4689]|9[014-9])|8(?:2[49]|3[3-8]|4[5-8]|5[2-9]|6[35-9]|7[579]|8[03-579]|9[2-8])|9(?:[23]0|4[02-46-9]|5[0245-79]|6[4-9]|7[2-47-9]|8[02-7]|9[3-7])","1(?:2[3-6]|3[3-9]|4[2-6]|5(?:[236-8]|[45][2-69])|[68][2-7]|7[2-689]|9[1-578])|2(?:2(?:[04-9]|3[23])|3[3-58]|4[0-468]|5(?:5[78]|7[2-4]|[0468][2-9])|6(?:[0135-8]|4[2-5])|7(?:[0679]|8[2-7])|8(?:[024578]|3[25-9]|9[6-9])|9(?:11|3[2-4]))|4(?:2(?:2[2-9]|8[237-9])|3[689]|6[035-7]|7(?:[059][2-8]|[68])|80|9[3-5])|5(?:3[1-36-9]|4[4578]|5[013-8]|6[1-9]|7[2-8]|8[14-7]|9(?:[89][2-8]|[4-7]))|7(?:2[15]|3[5-9]|4[02-9]|6[135-8]|7[0-4689]|9(?:[017-9]|4[6-8]|5[2-478]|6[2-589]))|8(?:2(?:4[4-8]|9[2-8])|3(?:7[2-56]|[3-6][2-9]|8[2-5])|4[5-8]|5[2-9]|6(?:[37]|5[4-7]|6[2-9]|8[2-8]|9[236-9])|7[579]|8[03-579]|9[2-8])|9(?:[23]0|4[02-46-9]|5[0245-79]|6[4-9]|7[2-47-9]|8[02-7]|9(?:3[34]|[4-7]))","1(?:2[3-6]|3[3-9]|4[2-6]|5(?:[236-8]|[45][2-69])|[68][2-7]|7[2-689]|9[1-578])|2(?:2(?:[04-9]|3[23])|3[3-58]|4[0-468]|5(?:5[78]|7[2-4]|[0468][2-9])|6(?:[0135-8]|4[2-5])|7(?:[0679]|8[2-7])|8(?:[024578]|3[25-9]|9[6-9])|9(?:11|3[2-4]))|4(?:2(?:2[2-9]|8[237-9])|3[689]|6[035-7]|7(?:[059][2-8]|[68])|80|9[3-5])|5(?:3[1-36-9]|4[4578]|5[013-8]|6[1-9]|7[2-8]|8[14-7]|9(?:[89][2-8]|[4-7]))|7(?:2[15]|3[5-9]|4[02-9]|6[135-8]|7[0-4689]|9(?:[017-9]|4[6-8]|5[2-478]|6[2-589]))|8(?:2(?:4[4-8]|9(?:[3578]|20|4[04-9]|6[56]))|3(?:7(?:[2-5]|6[0-59])|[3-6][2-9]|8[2-5])|4[5-8]|5[2-9]|6(?:[37]|5(?:[467]|5[014-9])|6(?:[2-8]|9[02-69])|8[2-8]|9(?:[236-8]|9[23]))|7[579]|8[03-579]|9[2-8])|9(?:[23]0|4[02-46-9]|5[0245-79]|6[4-9]|7[2-47-9]|8[02-7]|9(?:3(?:3[02-9]|4[0-24689])|4[2-69]|[5-7]))","1(?:2[3-6]|3[3-9]|4[2-6]|5(?:[236-8]|[45][2-69])|[68][2-7]|7[2-689]|9[1-578])|2(?:2(?:[04-9]|3[23])|3[3-58]|4[0-468]|5(?:5[78]|7[2-4]|[0468][2-9])|6(?:[0135-8]|4[2-5])|7(?:[0679]|8[2-7])|8(?:[024578]|3[25-9]|9[6-9])|9(?:11|3[2-4]))|4(?:2(?:2[2-9]|8[237-9])|3[689]|6[035-7]|7(?:[059][2-8]|[68])|80|9[3-5])|5(?:3[1-36-9]|4[4578]|5[013-8]|6[1-9]|7[2-8]|8[14-7]|9(?:[89][2-8]|[4-7]))|7(?:2[15]|3[5-9]|4[02-9]|6[135-8]|7[0-4689]|9(?:[017-9]|4[6-8]|5[2-478]|6[2-589]))|8(?:2(?:4[4-8]|9(?:[3578]|20|4[04-9]|6(?:5[25]|60)))|3(?:7(?:[2-5]|6[0-59])|[3-6][2-9]|8[2-5])|4[5-8]|5[2-9]|6(?:[37]|5(?:[467]|5[014-9])|6(?:[2-8]|9[02-69])|8[2-8]|9(?:[236-8]|9[23]))|7[579]|8[03-579]|9[2-8])|9(?:[23]0|4[02-46-9]|5[0245-79]|6[4-9]|7[2-47-9]|8[02-7]|9(?:3(?:3[02-9]|4[0-24689])|4[2-69]|[5-7]))"]
+,"0$1",""]
+,[,"(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["1|2(?:23|5[5-89]|64|78|8[39]|91)|4(?:2[2689]|64|7[347])|5(?:[2-589]|39)|8(?:[46-9]|3[279]|2[124589])|9(?:[235-8]|93)","1|2(?:23|5(?:[57]|[68]0|9[19])|64|78|8[39]|917)|4(?:2(?:[68]|20|9[178])|64|7[347])|5(?:[2-589]|39[67])|8(?:[46-9]|3[279]|2[124589])|9(?:[235-8]|93[34])","1|2(?:23|5(?:[57]|[68]0|9(?:17|99))|64|78|8[39]|917)|4(?:2(?:[68]|20|9[178])|64|7[347])|5(?:[2-589]|39[67])|8(?:[46-9]|3[279]|2[124589])|9(?:[235-8]|93(?:31|4))"]
+,"0$1",""]
+,[,"(\\d{3})(\\d{2})(\\d{4})","$1 $2 $3",["2(?:9[14-79]|74|[34]7|[56]9)|82|993"]
+,"0$1",""]
+,[,"(\\d)(\\d{4})(\\d{4})","$1 $2 $3",["[36]|4(?:2[09]|7[01])"]
+,"0$1",""]
+,[,"(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["[2479]"]
+,"0$1",""]
+]
+]
 ,
   "KE": [,[,,"\\d{6,10}","\\d{4,10}"]
 ,[,,"(?:20|4[0-6]|5\\d|6[0-24-9])\\d{4,7}","\\d{4,9}",,,"202012345"]
@@ -1475,10 +1791,12 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"KE",254,"000","0",,,"0",,,,[[,"([2-6]\\d)(\\d{4,7})","$1 $2","[2-6]","0$1",""],
-[,"(7\\d{2})(\\d{6})","$1 $2","7","0$1",""],
-[,"(\\d{3})(\\d{6,7})","$1 $2","8|90","0$1",""],
-[,"(91)(\\d{6,7})","$1 $2","91","0$1",""]]]
+,"KE",254,"000","0",,,"0",,,,[[,"(\\d{2})(\\d{4,7})","$1 $2",["[2-6]|91"]
+,"0$1",""]
+,[,"(\\d{3})(\\d{6,7})","$1 $2",["[78]|90"]
+,"0$1",""]
+]
+]
 ,
   "KG": [,[,,"[356-8]\\d{8}","\\d{5,9}"]
 ,[,,"(?:3(?:1(?:2\\d|3[1-9]|52|6[1-8])|2(?:22|3[0-479]|6[0-7])|4(?:22|5[6-9]|6[0-4])|5(?:22|3[4-7]|59|6[0-5])|6(?:22|5[35-7]|6[0-3])|7(?:22|3[468]|4[1-8]|59|6\\d|7[5-7])|9(?:22|4[1-7]|6[0-8]))|6(?:09|12|2[2-4])\\d)\\d{5}","\\d{5,9}",,,"312123456"]
@@ -1488,8 +1806,12 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"KG",996,"00","0",,,"0",,,,[[,"(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3","31[25]|[5-8]","0$1",""],
-[,"(\\d{4})(\\d{5})","$1 $2","3(?:1[36]|[2-9])","0$1",""]]]
+,"KG",996,"00","0",,,"0",,,,[[,"(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["31[25]|[5-8]"]
+,"0$1",""]
+,[,"(\\d{4})(\\d{5})","$1 $2",["3(?:1[36]|[2-9])"]
+,"0$1",""]
+]
+]
 ,
   "KH": [,[,,"[1-9]\\d{7,9}","\\d{6,10}"]
 ,[,,"(?:2[3-6]|3[2-6]|4[2-4]|[5-7][2-5])[2-47-9]\\d{5}","\\d{6,8}",,,"23456789"]
@@ -1499,8 +1821,12 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"KH",855,"00[178]","0",,,"0",,,,[[,"(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3","1\\d[1-9]|[2-9]","0$1",""],
-[,"(1[89]00)(\\d{3})(\\d{3})","$1 $2 $3","1[89]0","",""]]]
+,"KH",855,"00[178]","0",,,"0",,,,[[,"(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["1\\d[1-9]|[2-9]"]
+,"0$1",""]
+,[,"(1[89]00)(\\d{3})(\\d{3})","$1 $2 $3",["1[89]0"]
+,"",""]
+]
+]
 ,
   "KI": [,[]
 ,[]
@@ -1520,7 +1846,9 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"KM",269,"00",,,,,,,,[[,"(\\d)(\\d{3})(\\d{3})","$1 $2 $3",,"",""]]]
+,"KM",269,"00",,,,,,,,[[,"(\\d)(\\d{3})(\\d{3})","$1 $2 $3",,"",""]
+]
+]
 ,
   "KN": [,[,,"[89]\\d{9}","\\d{7,10}"]
 ,[,,"869(?:2(?:29|36)|4(?:6[5-9]|70))\\d{4}","\\d{7,10}",,,"8692361234"]
@@ -1550,18 +1878,28 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"50\\d{8}","\\d{10}",,,"5012345678"]
 ,[,,"70\\d{8}","\\d{10}",,,"7012345678"]
-,"KR",82,"00(?:[124-68]|[37]\\d{2})","0",,,"0(?:8[1-46-8]|85\\d{2})?",,,,[[,"(\\d{2})(\\d{4})(\\d{4})","$1-$2-$3","1(?:0|1[19]|[69]9|5(?:44|59|8))|[57]0","0$1",""],
-[,"(\\d{2})(\\d{3})(\\d{4})","$1-$2-$3","1(?:[169][2-8]|[78]|5(?:[1-3]|4[56]))|[68]0|[3-9][1-9][2-9]","0$1",""],
-[,"(\\d{3})(\\d)(\\d{4})","$1-$2-$3","1312","0$1",""],
-[,"(\\d{3})(\\d{2})(\\d{4})","$1-$2-$3","131[13-9]","0$1",""],
-[,"(\\d{3})(\\d{3})(\\d{4})","$1-$2-$3","13[2-9]","0$1",""],
-[,"(\\d{2})(\\d{2})(\\d{3})(\\d{4})","$1-$2-$3-$4","30","0$1",""],
-[,"(\\d)(\\d{4})(\\d{4})","$1-$2-$3","2(?:[26]|3(?:01|1[45]|2[17-9]|39|4|6[67]|7[078]))","0$1",""],
-[,"(\\d)(\\d{3})(\\d{4})","$1-$2-$3","2(?:3(?:0[02-9]|1[0-36-9]|2[02-6]|3[0-8]|6[0-589]|7[1-69]|[589])|[457-9])","0$1",""],
-[,"(\\d)(\\d{3})","$1-$2","21(?:[0-247-9]|3[124]|6[1269])","0$1",""],
-[,"(\\d)(\\d{4})","$1-$2","21(?:3[035-9]|6[03-578])","0$1",""],
-[,"(\\d{2})(\\d{3})","$1-$2","[3-9][1-9]1(?:[0-247-9]|3[124]|6[1269])","0$1",""],
-[,"(\\d{2})(\\d{4})","$1-$2","[3-9][1-9]1(?:3[035-9]|6[03-578])","0$1",""]]]
+,"KR",82,"00(?:[124-68]|[37]\\d{2})","0",,,"0(?:8[1-46-8]|85\\d{2})?",,,,[[,"(\\d{2})(\\d{4})(\\d{4})","$1-$2-$3",["1(?:0|1[19]|[69]9|5[458])|[57]0","1(?:0|1[19]|[69]9|5(?:44|59|8))|[57]0"]
+,"0$1",""]
+,[,"(\\d{2})(\\d{3})(\\d{4})","$1-$2-$3",["1(?:[169][2-8]|[78]|5[1-4])|[68]0|[3-9][1-9][2-9]","1(?:[169][2-8]|[78]|5(?:[1-3]|4[56]))|[68]0|[3-9][1-9][2-9]"]
+,"0$1",""]
+,[,"(\\d{3})(\\d)(\\d{4})","$1-$2-$3",["131","1312"]
+,"0$1",""]
+,[,"(\\d{3})(\\d{2})(\\d{4})","$1-$2-$3",["131","131[13-9]"]
+,"0$1",""]
+,[,"(\\d{3})(\\d{3})(\\d{4})","$1-$2-$3",["13[2-9]"]
+,"0$1",""]
+,[,"(\\d{2})(\\d{2})(\\d{3})(\\d{4})","$1-$2-$3-$4",["30"]
+,"0$1",""]
+,[,"(\\d)(\\d{4})(\\d{4})","$1-$2-$3",["2(?:[26]|3[0-467])","2(?:[26]|3(?:01|1[45]|2[17-9]|39|4|6[67]|7[078]))"]
+,"0$1",""]
+,[,"(\\d)(\\d{3})(\\d{4})","$1-$2-$3",["2(?:3[0-35-9]|[457-9])","2(?:3(?:0[02-9]|1[0-36-9]|2[02-6]|3[0-8]|6[0-589]|7[1-69]|[589])|[457-9])"]
+,"0$1",""]
+,[,"(\\d)(\\d{3,4})","$1-$2",["21[0-46-9]"]
+,"0$1",""]
+,[,"(\\d{2})(\\d{3,4})","$1-$2",["[3-9][1-9]1","[3-9][1-9]1(?:[0-46-9])"]
+,"0$1",""]
+]
+]
 ,
   "KW": [,[,,"[12569]\\d{6,7}","\\d{7,8}"]
 ,[,,"(?:18|2[2-5]\\d)\\d{5}","\\d{7,8}",,,"22345678"]
@@ -1571,10 +1909,12 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"KW",965,"00","0",,,"0",,,,[[,"(18\\d{2})(\\d{3})","$1 $2","1","0$1",""],
-[,"(2[2-5]\\d{2})(\\d{4})","$1 $2","2","0$1",""],
-[,"([69]\\d{3})(\\d{4})","$1 $2","[69]","0$1",""],
-[,"(5[05]\\d)(\\d{5})","$1 $2","5","0$1",""]]]
+,"KW",965,"00","0",,,"0",,,,[[,"(\\d{4})(\\d{3,4})","$1 $2",["[1269]"]
+,"0$1",""]
+,[,"(5[05]\\d)(\\d{5})","$1 $2",["5"]
+,"0$1",""]
+]
+]
 ,
   "KY": [,[,,"[389]\\d{9}","\\d{7,10}"]
 ,[,,"345(?:2(?:22|44)|444|6(?:23|38|40)|7(?:6[6-9]|77)|8(?:00|1[45]|25|4[89]|88)|9(?:14|4[035-9]))\\d{4}","\\d{7,10}",,,"3452221234"]
@@ -1596,16 +1936,22 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,"KZ",7,"8~10","8",,,"8"]
 ,
-  "LA": [,[,,"[2-57]\\d{7,8}","\\d{6,9}"]
+  "LA": [,[,,"[2-57]\\d{7,9}","\\d{6,10}"]
 ,[,,"(?:[2-57]1|54)\\d{6}","\\d{6,8}",,,"21212862"]
-,[,,"20[2357-9]\\d{6}","\\d{9}",,,"202345678"]
+,[,,"20(?:[23]|5[4-6]|77|9[89])\\d{6}","\\d{9,10}",,,"202345678"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"LA",856,"00","0",,,"0",,,,[[,"(20)([2357-9])(\\d{3})(\\d{3})","$1 $2 $3 $4","20","0$1",""],
-[,"([2-57]\\d)(\\d{3})(\\d{3})","$1 $2 $3","21|[3-57]","0$1",""]]]
+,"LA",856,"00","0",,,"0",,,,[[,"(20)([23])(\\d{3})(\\d{3})","$1 $2 $3 $4",["20[23]"]
+,"0$1",""]
+,[,"(20)([579]\\d)(\\d{3})(\\d{3})","$1 $2 $3 $4",["20[579]"]
+,"0$1",""]
+,[,"([2-57]\\d)(\\d{3})(\\d{3})","$1 $2 $3",["21|[3-57]"]
+,"0$1",""]
+]
+]
 ,
   "LB": [,[,,"[13-9]\\d{6,7}","\\d{7,8}"]
 ,[,,"(?:[14-6]\\d|[7-9][2-9])\\d{5}","\\d{7}",,,"1123456"]
@@ -1615,9 +1961,14 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"9[01]\\d{6}","\\d{8}",,,"90123456"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"LB",961,"00","0",,,"0",,,,[[,"([13-6])(\\d{3})(\\d{3})","$1 $2 $3","[13-6]","0$1",""],
-[,"([7-9][01])(\\d{3})(\\d{3})","$1 $2 $3","[7-9][01]","0$1",""],
-[,"([7-9][2-9])(\\d{2})(\\d{3})","$1 $2 $3","[7-9][2-9]","0$1",""]]]
+,"LB",961,"00","0",,,"0",,,,[[,"([13-6])(\\d{3})(\\d{3})","$1 $2 $3",["[13-6]"]
+,"0$1",""]
+,[,"([7-9][01])(\\d{3})(\\d{3})","$1 $2 $3",["[7-9][01]"]
+,"0$1",""]
+,[,"([7-9][2-9])(\\d{2})(\\d{3})","$1 $2 $3",["[7-9][2-9]"]
+,"0$1",""]
+]
+]
 ,
   "LC": [,[,,"[789]\\d{9}","\\d{7,10}"]
 ,[,,"758(?:234|4(?:5[0-9]|6[2-9]|8[0-2])|638|758)\\d{4}","\\d{7,10}",,,"7582345678"]
@@ -1637,10 +1988,16 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"90(?:0(?:2[278]|79|\\d{4})|1(?:23|\\d{4})|6(?:66|\\d{4}))\\d{2}","\\d{7,9}",,,"9002222"]
 ,[,,"701\\d{4}","\\d{7}",,,"7011234"]
 ,[,,"NA","NA"]
-,"LI",423,"00",,,,,,,,[[,"(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3","[23]|7[4-9]|87","",""],
-[,"(6\\d)(\\d{3})(\\d{3})","$1 $2 $3","6","",""],
-[,"([7-9]0\\d)(\\d{2})(\\d{2})","$1 $2 $3","[7-9]0","",""],
-[,"([89]0\\d)(\\d{2})(\\d{2})(\\d{2})","0$1 $2 $3 $4","[89]0","",""]]]
+,"LI",423,"00",,,,,,,,[[,"(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3",["[23]|7[4-9]|87"]
+,"",""]
+,[,"(6\\d)(\\d{3})(\\d{3})","$1 $2 $3",["6"]
+,"",""]
+,[,"([7-9]0\\d)(\\d{2})(\\d{2})","$1 $2 $3",["[7-9]0"]
+,"",""]
+,[,"([89]0\\d)(\\d{2})(\\d{2})(\\d{2})","0$1 $2 $3 $4",["[89]0"]
+,"",""]
+]
+]
 ,
   "LK": [,[]
 ,[]
@@ -1660,8 +2017,12 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"LR",231,"00","0",,,"0",,,,[[,"([27]\\d)(\\d{3})(\\d{3})","$1 $2 $3","[27]","0$1",""],
-[,"([4-6])(\\d{3})(\\d{3})","$1 $2 $3","[4-6]","0$1",""]]]
+,"LR",231,"00","0",,,"0",,,,[[,"([27]\\d)(\\d{3})(\\d{3})","$1 $2 $3",["[27]"]
+,"0$1",""]
+,[,"([4-6])(\\d{3})(\\d{3})","$1 $2 $3",["[4-6]"]
+,"0$1",""]
+]
+]
 ,
   "LS": [,[,,"[2568]\\d{7}","\\d{8}"]
 ,[,,"2\\d{7}","\\d{8}",,,"22123456"]
@@ -1671,7 +2032,9 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"LS",266,"00",,,,,,,,[[,"(\\d{4})(\\d{4})","$1 $2",,"",""]]]
+,"LS",266,"00",,,,,,,,[[,"(\\d{4})(\\d{4})","$1 $2",,"",""]
+]
+]
 ,
   "LT": [,[,,"[3-9]\\d{7}","\\d{8}"]
 ,[,,"(?:3[1478]|4[124-6]|52)\\d{6}","\\d{8}",,,"31234567"]
@@ -1681,9 +2044,14 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"LT",370,"00","8",,,"8",,,,[[,"([34]\\d)(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4","37|4(?:1|5[45]|6[2-4])","8 $1",""],
-[,"([3-689]\\d{2})(\\d{2})(\\d{3})","$1 $2 $3","3[148]|4(?:[24]|6[09])|5(?:[0189]|28)|[689]","8 $1",""],
-[,"(5)(2[0-79]\\d)(\\d{4})","$1 $2 $3","52[0-79]","8 $1",""]]]
+,"LT",370,"00","8",,,"8",,,,[[,"([34]\\d)(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["37|4(?:1|5[45]|6[2-4])"]
+,"8 $1",""]
+,[,"([3-689]\\d{2})(\\d{2})(\\d{3})","$1 $2 $3",["3[148]|4(?:[24]|6[09])|5(?:[0189]|28)|[689]"]
+,"8 $1",""]
+,[,"(5)(2[0-79]\\d)(\\d{4})","$1 $2 $3",["52[0-79]"]
+,"8 $1",""]
+]
+]
 ,
   "LU": [,[]
 ,[]
@@ -1703,7 +2071,9 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"LV",371,"00",,,,,,,,[[,"([2689]\\d)(\\d{3})(\\d{3})","$1 $2 $3",,"",""]]]
+,"LV",371,"00",,,,,,,,[[,"([2689]\\d)(\\d{3})(\\d{3})","$1 $2 $3",,"",""]
+]
+]
 ,
   "LY": [,[]
 ,[]
@@ -1723,10 +2093,16 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"MA",212,"00","0",,,"0",,,,[[,"([56]\\d{2})(\\d{6})","$1-$2","5(?:2[015-7]|3[0-4])|6","0$1",""],
-[,"([58]\\d{3})(\\d{5})","$1-$2","5(?:2(?:[2-48]|90)|3(?:[5-79]|80))|892","0$1",""],
-[,"(5\\d{4})(\\d{4})","$1-$2","5(?:29[89]|38[89])","0$1",""],
-[,"(8[09])(\\d{7})","$1-$2","8(?:0|9[013-9])","0$1",""]]]
+,"MA",212,"00","0",,,"0",,,,[[,"([56]\\d{2})(\\d{6})","$1-$2",["5(?:2[015-7]|3[0-4])|6"]
+,"0$1",""]
+,[,"([58]\\d{3})(\\d{5})","$1-$2",["5(?:2[2-489]|3[5-9])|892","5(?:2(?:[2-48]|90)|3(?:[5-79]|80))|892"]
+,"0$1",""]
+,[,"(5\\d{4})(\\d{4})","$1-$2",["5(?:29|38)","5(?:29|38)[89]"]
+,"0$1",""]
+,[,"(8[09])(\\d{7})","$1-$2",["8(?:0|9[013-9])"]
+,"0$1",""]
+]
+]
 ,
   "MC": [,[]
 ,[]
@@ -1746,9 +2122,14 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"MD",373,"00","0",,,"0",,,,[[,"(22)(\\d{3})(\\d{3})","$1 $2 $3","22","0$1",""],
-[,"([25-7]\\d{2})(\\d{2})(\\d{3})","$1 $2 $3","2[13-79]|[5-7]","0$1",""],
-[,"([89]00)(\\d{5})","$1 $2","[89]","0$1",""]]]
+,"MD",373,"00","0",,,"0",,,,[[,"(22)(\\d{3})(\\d{3})","$1 $2 $3",["22"]
+,"0$1",""]
+,[,"([25-7]\\d{2})(\\d{2})(\\d{3})","$1 $2 $3",["2[13-79]|[5-7]"]
+,"0$1",""]
+,[,"([89]00)(\\d{5})","$1 $2",["[89]"]
+,"0$1",""]
+]
+]
 ,
   "ME": [,[]
 ,[]
@@ -1768,7 +2149,9 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"MG",261,"00","0",,,"0",,,,[[,"([23]\\d)(\\d{2})(\\d{3})(\\d{2})","$1 $2 $3 $4",,"0$1",""]]]
+,"MG",261,"00","0",,,"0",,,,[[,"([23]\\d)(\\d{2})(\\d{3})(\\d{2})","$1 $2 $3 $4",,"0$1",""]
+]
+]
 ,
   "MF": [,[,,"[56]\\d{8}","\\d{9}"]
 ,[,,"590(?:10|2[79]|5[128]|[78]7)\\d{4}","\\d{9}",,,"590271234"]
@@ -1798,9 +2181,14 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"8(?:0[1-9]|[1-9]\\d)\\d{5}","\\d{8}",,,"80123456"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"MK",389,"00","0",,,"0",,,,[[,"(2)(\\d{3})(\\d{4})","$1 $2 $3","2","0$1",""],
-[,"([347]\\d)(\\d{3})(\\d{3})","$1 $2 $3","[347]","0$1",""],
-[,"([58]\\d{2})(\\d)(\\d{2})(\\d{2})","$1 $2 $3 $4","[58]","0$1",""]]]
+,"MK",389,"00","0",,,"0",,,,[[,"(2)(\\d{3})(\\d{4})","$1 $2 $3",["2"]
+,"0$1",""]
+,[,"([347]\\d)(\\d{3})(\\d{3})","$1 $2 $3",["[347]"]
+,"0$1",""]
+,[,"([58]\\d{2})(\\d)(\\d{2})(\\d{2})","$1 $2 $3 $4",["[58]"]
+,"0$1",""]
+]
+]
 ,
   "ML": [,[,,"[246-8]\\d{7}","\\d{8}"]
 ,[,,"(?:2(?:0(?:2[0-589]|7[027-9])|1(?:2[5-7]|[3-689]\\d))|442\\d)\\d{4}","\\d{8}",,,"20212345"]
@@ -1810,7 +2198,9 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"ML",223,"00","0",,,"0",,,,[[,"([246-8]\\d)(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",,"",""]]]
+,"ML",223,"00","0",,,"0",,,,[[,"([246-8]\\d)(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",,"",""]
+]
+]
 ,
   "MM": [,[,,"[124-8]\\d{5,7}|9\\d{7,8}","\\d{5,9}"]
 ,[,,"(?:1\\d|2|4[2-6]|5[2-9]|6\\d|7[0-5]|8[1-6])\\d{5}|1333\\d{4}","\\d{5,8}",,,"1234567"]
@@ -1820,12 +2210,20 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"MM",95,"00",,,,,,,,[[,"(1)(\\d{3})(\\d{3})","$1 $2 $3","1","",""],
-[,"(1)(3)(33\\d)(\\d{3})","$1 $2 $3 $4","13","",""],
-[,"(2)(\\d{2})(\\d{3})","$1 $2 $3","2","",""],
-[,"(\\d{2})(\\d{2})(\\d{3})","$1 $2 $3","[4-8]","",""],
-[,"(9444)(\\d{5})","$1 $2","94","",""],
-[,"(9)([25689]\\d{2})(\\d{4})","$1 $2 $3","9[25689]","",""]]]
+,"MM",95,"00",,,,,,,,[[,"(1)(\\d{3})(\\d{3})","$1 $2 $3",["1"]
+,"",""]
+,[,"(1)(3)(33\\d)(\\d{3})","$1 $2 $3 $4",["133","1333"]
+,"",""]
+,[,"(2)(\\d{2})(\\d{3})","$1 $2 $3",["2"]
+,"",""]
+,[,"(\\d{2})(\\d{2})(\\d{3})","$1 $2 $3",["[4-8]"]
+,"",""]
+,[,"(9444)(\\d{5})","$1 $2",["94"]
+,"",""]
+,[,"(9)([25689]\\d{2})(\\d{4})","$1 $2 $3",["9[25689]"]
+,"",""]
+]
+]
 ,
   "MN": [,[,,"[127-9]\\d{7}","\\d{8}"]
 ,[,,"(?:[12](?:1\\d|2[1-37]|3[2-8]|4[2-68]|5[1-4689])|70)\\d{6}","\\d{8}",,,"70123456"]
@@ -1835,10 +2233,16 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"MN",976,"001","0",,,"0",,,,[[,"([127-9]\\d)(\\d{2})(\\d{4})","$1 $2 $3","[12]1|[7-9]","0$1",""],
-[,"([12]2\\d)(\\d{5})","$1 $2","[12]2[1-3]","0$1",""],
-[,"([12]\\d{3})(\\d{4})","$1 $2","[12](?:27|[3-5]\\d)2","0$1",""],
-[,"([12]\\d{4})(\\d{3})","$1 $2","[12](?:27|[3-5]\\d)[4-9]","0$1",""]]]
+,"MN",976,"001","0",,,"0",,,,[[,"([127-9]\\d)(\\d{2})(\\d{4})","$1 $2 $3",["[12]1|[7-9]"]
+,"0$1",""]
+,[,"([12]2\\d)(\\d{5})","$1 $2",["[12]2[1-3]"]
+,"0$1",""]
+,[,"([12]\\d{3})(\\d{4})","$1 $2",["[12](?:27|[3-5])","[12](?:27|[3-5]\\d)2"]
+,"0$1",""]
+,[,"([12]\\d{4})(\\d{3})","$1 $2",["[12](?:27|[3-5])","[12](?:27|[3-5]\\d)[4-9]"]
+,"0$1",""]
+]
+]
 ,
   "MO": [,[,,"[268]\\d{7}","\\d{8}"]
 ,[,,"(?:28[2-57-9]|8[2-57-9]\\d)\\d{5}","\\d{8}",,,"28212345"]
@@ -1848,7 +2252,9 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"MO",853,"00",,,,,,,,[[,"([268]\\d{3})(\\d{4})","$1 $2",,"",""]]]
+,"MO",853,"00",,,,,,,,[[,"([268]\\d{3})(\\d{4})","$1 $2",,"",""]
+]
+]
 ,
   "MP": [,[,,"[689]\\d{9}","\\d{7,10}"]
 ,[,,"670(?:2(?:3[3-5]|88|56)|32[23]|4[38]3|532|6(?:64|70|8\\d))\\d{4}","\\d{7,10}",,,"6702345678"]
@@ -1878,7 +2284,9 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"MR",222,"00",,,,,,,,[[,"([2-7]\\d{2})(\\d{2})(\\d{2})","$1 $2 $3",,"",""]]]
+,"MR",222,"00",,,,,,,,[[,"([2-7]\\d{2})(\\d{2})(\\d{2})","$1 $2 $3",,"",""]
+]
+]
 ,
   "MS": [,[,,"[689]\\d{9}","\\d{7,10}"]
 ,[,,"664491\\d{4}","\\d{7,10}",,,"6644912345"]
@@ -1908,7 +2316,9 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"MU",230,"020",,,,,,,,[[,"([2-9]\\d{2})(\\d{4})","$1 $2",,"",""]]]
+,"MU",230,"020",,,,,,,,[[,"([2-9]\\d{2})(\\d{4})","$1 $2",,"",""]
+]
+]
 ,
   "MV": [,[]
 ,[]
@@ -1928,10 +2338,16 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"MW",265,"00","0",,,"0",,,,[[,"(\\d)(\\d{3})(\\d{3})","$1 $2 $3","[13-5]","0$1",""],
-[,"(2\\d{2})(\\d{3})(\\d{3})","$1 $2 $3","2","0$1",""],
-[,"(\\d)(\\d{4})(\\d{4})","$1 $2 $3","7","0$1",""],
-[,"(\\d)(\\d{3,4})(\\d{3,4})","$1 $2 $3","[89]","0$1",""]]]
+,"MW",265,"00","0",,,"0",,,,[[,"(\\d)(\\d{3})(\\d{3})","$1 $2 $3",["[13-5]"]
+,"0$1",""]
+,[,"(2\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["2"]
+,"0$1",""]
+,[,"(\\d)(\\d{4})(\\d{4})","$1 $2 $3",["7"]
+,"0$1",""]
+,[,"(\\d)(\\d{3,4})(\\d{3,4})","$1 $2 $3",["[89]"]
+,"0$1",""]
+]
+]
 ,
   "MX": [,[,,"[1-9]\\d{9,10}","\\d{7,11}"]
 ,[,,"(?:33|55|81)\\d{8}|(?:2(?:2[2-9]|3[1-35-8]|4[13-9]|7[1-689]|8[1-58]|9[467])|3(?:1[1-79]|[2458][1-9]|7[1-8]|9[1-5])|4(?:1[1-57-9]|[24-6][1-9]|[37][1-8]|8[1-35-9]|9[2-689])|5(?:88|9[1-79])|6(?:1[2-68]|[234][1-9]|5[1-3689]|6[12457-9]|7[1-7]|8[67]|9[4-8])|7(?:[13467][1-9]|2[1-8]|5[13-9]|8[1-69]|9[17])|8(?:2[13-689]|3[1-6]|4[124-6]|6[1246-9]|7[1-378]|9[12479])|9(?:1[346-9]|2[1-4]|3[2-46-8]|5[1348]|[69][1-9]|7[12]|8[1-8]))\\d{7}","\\d{7,10}",,,"2221234567"]
@@ -1941,16 +2357,25 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"MX",52,"0[09]","01",,,"0[12]|04[45](\\d{10})","1$1",,,[[,"([358]\\d)(\\d{4})(\\d{4})","$1 $2 $3","33|55|81","01 $1",""],
-[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3","[2467]|3[12457-9]|5[89]|8[2-9]|9[1-35-9]","01 $1",""],
-[,"1([358]\\d)(\\d{4})(\\d{4})","045 $1 $2 $3","1(?:33|55|81)","$1",""],
-[,"1(\\d{3})(\\d{3})(\\d{4})","045 $1 $2 $3","1(?:[2467]|3[12457-9]|5[89]|8[2-9]|9[1-35-9])","$1",""],
-[,"([89]00)(\\d{3})(\\d{4})","$1 $2 $3","[89]0","01 $1",""]]
-,[[,"([358]\\d)(\\d{4})(\\d{4})","$1 $2 $3","33|55|81",,""],
-[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3","[2467]|3[12457-9]|5[89]|8[2-9]|9[1-35-9]",,""],
-[,"(1)([358]\\d)(\\d{4})(\\d{4})","$1 $2 $3 $4","1(?:33|55|81)",,""],
-[,"(1)(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3 $4","1(?:[2467]|3[12457-9]|5[89]|8[2-9]|9[1-35-9])",,""],
-[,"([89]00)(\\d{3})(\\d{4})","$1 $2 $3","[89]0",,""]]]
+,"MX",52,"0[09]","01",,,"0[12]|04[45](\\d{10})","1$1",,,[[,"([358]\\d)(\\d{4})(\\d{4})","$1 $2 $3",["33|55|81"]
+,"01 $1",""]
+,[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["[2467]|3[12457-9]|5[89]|8[02-9]|9[0-35-9]"]
+,"01 $1",""]
+,[,"1([358]\\d)(\\d{4})(\\d{4})","045 $1 $2 $3",["1(?:33|55|81)"]
+,"$1",""]
+,[,"1(\\d{3})(\\d{3})(\\d{4})","045 $1 $2 $3",["1(?:[2467]|3[12457-9]|5[89]|8[2-9]|9[1-35-9])"]
+,"$1",""]
+]
+,[[,"([358]\\d)(\\d{4})(\\d{4})","$1 $2 $3",["33|55|81"]
+,,""]
+,[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["[2467]|3[12457-9]|5[89]|8[02-9]|9[0-35-9]"]
+,,""]
+,[,"(1)([358]\\d)(\\d{4})(\\d{4})","$1 $2 $3 $4",["1(?:33|55|81)"]
+,,""]
+,[,"(1)(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3 $4",["1(?:[2467]|3[12457-9]|5[89]|8[2-9]|9[1-35-9])"]
+,,""]
+]
+]
 ,
   "MY": [,[,,"[13-9]\\d{7,9}","\\d{6,10}"]
 ,[,,"(?:3\\d{2}|[4-79]\\d|8[2-9])\\d{6}","\\d{6,9}",,,"312345678"]
@@ -1960,12 +2385,18 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"1700\\d{6}","\\d{10}",,,"1700123456"]
 ,[,,"154\\d{7}","\\d{10}",,,"1541234567"]
-,"MY",60,"00","0",,,"0",,,,[[,"([4-79])(\\d{3})(\\d{4})","$1-$2 $3","[4-79]","0$1",""],
-[,"(3)(\\d{4})(\\d{4})","$1-$2 $3","3","0$1",""],
-[,"(8[2-9])(\\d{3})(\\d{3})","$1-$2 $3","8","0$1",""],
-[,"(1\\d)(\\d{3})(\\d{4})","$1-$2 $3","1[0-46-9][1-9]","0$1",""],
-[,"(1)([36-8]00)(\\d{2})(\\d{4})","$1-$2-$3-$4","1[36-8]0","",""],
-[,"(154)(\\d{3})(\\d{4})","$1-$2 $3","15","0$1",""]]]
+,"MY",60,"00","0",,,"0",,,,[[,"([4-79])(\\d{3})(\\d{4})","$1-$2 $3",["[4-79]"]
+,"0$1",""]
+,[,"(3)(\\d{4})(\\d{4})","$1-$2 $3",["3"]
+,"0$1",""]
+,[,"([18]\\d)(\\d{3})(\\d{3,4})","$1-$2 $3",["1[0-46-9][1-9]|8"]
+,"0$1",""]
+,[,"(1)([36-8]00)(\\d{2})(\\d{4})","$1-$2-$3-$4",["1[36-8]0"]
+,"",""]
+,[,"(154)(\\d{3})(\\d{4})","$1-$2 $3",["15"]
+,"0$1",""]
+]
+]
 ,
   "MZ": [,[,,"[28]\\d{7,8}","\\d{8,9}"]
 ,[,,"2(?:[1346]\\d|5[0-2]|[78][12]|93)\\d{5}","\\d{8}",,,"21123456"]
@@ -1975,9 +2406,12 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"MZ",258,"00",,,,,,,,[[,"(2\\d)(\\d{3})(\\d{3})","$1 $2 $3","2","",""],
-[,"(8[24])(\\d{3})(\\d{4})","$1 $2 $3","8[24]","",""],
-[,"(80\\d)(\\d{3})(\\d{3})","$1 $2 $3","80","",""]]]
+,"MZ",258,"00",,,,,,,,[[,"([28]\\d)(\\d{3})(\\d{3,4})","$1 $2 $3",["2|8[24]"]
+,"",""]
+,[,"(80\\d)(\\d{3})(\\d{3})","$1 $2 $3",["80"]
+,"",""]
+]
+]
 ,
   "NA": [,[,,"[68]\\d{5,9}","\\d{4,10}"]
 ,[,,"6(?:1(?:[136]|2\\d?)\\d|2(?:[25]\\d?|[134678])\\d|3(?:2\\d{0,3}|4\\d{1,2}|[135-8]\\d?)|4(?:[13-8]\\d|2\\d{1,2})|(?:5(?:[16-7]\\d|[3-58]\\d?|2\\d{1,2}))|6\\d{0,4}|7\\d{0,3})\\d{4}","\\d{4,10}",,,"612012345"]
@@ -1987,13 +2421,22 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"88\\d{6}","\\d{8}",,,"88123456"]
-,"NA",264,"00","0",,,"0",,,,[[,"(8\\d)(\\d{3})(\\d{4})","$1 $2 $3","8[15]","0$1",""],
-[,"(632532)(\\d{2,4})","$1 $2","6325","0$1",""],
-[,"(6\\d)(\\d{2,3})(\\d{4})","$1 $2 $3","6(?:1|[245][1-7]|3[125-7]|6[1256]|7[1236])","0$1",""],
-[,"(6\\d)(\\d{4,5})","$1 $2","6(?:3[12567]|5[3-5]|6[1256]|7[1236])","0$1",""],
-[,"(6\\d{2})(\\d{4,6})","$1 $2","6[2356]8","0$1",""],
-[,"(6\\d{3})(\\d{4,5})","$1 $2","6(?:342|6[34]|751)","0$1",""],
-[,"(88)(\\d{3})(\\d{3})","$1 $2 $3","88","0$1",""]]]
+,"NA",264,"00","0",,,"0",,,,[[,"(8\\d)(\\d{3})(\\d{4})","$1 $2 $3",["8[15]"]
+,"0$1",""]
+,[,"(632532)(\\d{2,4})","$1 $2",["632","6325","63253","632532"]
+,"0$1",""]
+,[,"(6\\d)(\\d{2,3})(\\d{4})","$1 $2 $3",["6(?:1|[245][1-7]|3[125-7]|6[1256]|7[1236])"]
+,"0$1",""]
+,[,"(6\\d)(\\d{4,5})","$1 $2",["6(?:3[12567]|5[3-5]|6[1256]|7[1236])"]
+,"0$1",""]
+,[,"(6\\d{2})(\\d{4,6})","$1 $2",["6[2356]8"]
+,"0$1",""]
+,[,"(6\\d{3})(\\d{4,5})","$1 $2",["6(?:34|6[34]|75)","6(?:342|6[34]|751)"]
+,"0$1",""]
+,[,"(88)(\\d{3})(\\d{3})","$1 $2 $3",["88"]
+,"0$1",""]
+]
+]
 ,
   "NC": [,[]
 ,[]
@@ -2013,8 +2456,12 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"NE",227,"00",,,,,,,,[[,"([029]\\d)(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4","[29]|09","",""],
-[,"(08)(\\d{3})(\\d{3})","$1 $2 $3","08","",""]]]
+,"NE",227,"00",,,,,,,,[[,"([029]\\d)(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[29]|09"]
+,"",""]
+,[,"(08)(\\d{3})(\\d{3})","$1 $2 $3",["08"]
+,"",""]
+]
+]
 ,
   "NF": [,[]
 ,[]
@@ -2034,15 +2481,22 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"700\\d{7,11}","\\d{10,14}",,,"7001234567"]
 ,[,,"NA","NA"]
-,"NG",234,"009","0",,,"0",,,,[[,"([12])(\\d{3})(\\d{3,4})","$1 $2 $3","[12]","0$1",""],
-[,"(9)(\\d{3})(\\d{4})","$1 $2 $3","9","0$1",""],
-[,"([3-8]\\d)(\\d{3})(\\d{2,3})","$1 $2 $3","[3-6]|7(?:[1-79]|0[1-9])|8[2-9]","0$1",""],
-[,"([78]\\d{2})(\\d{3})(\\d{4})","$1 $2 $3","70[3-9]|8(?:0[1-9]|1[23])","0$1",""],
-[,"([78]\\d{3})(\\d{3})(\\d{3})","$1 $2 $3","702|819","0$1",""],
-[,"([78]00)(\\d{3})(\\d{3,4})","$1 $2 $3","[78]00","0$1",""],
-[,"([78]00)(\\d{4})(\\d{4,5})","$1 $2 $3","[78]00","0$1",""],
-[,"([78]00)(\\d{5})(\\d{5,6})","$1 $2 $3","[78]00","0$1",""],
-[,"(78)(\\d{2})(\\d{3})","$1 $2 $3","78","0$1",""]]]
+,"NG",234,"009","0",,,"0",,,,[[,"([129])(\\d{3})(\\d{3,4})","$1 $2 $3",["[129]"]
+,"0$1",""]
+,[,"([3-8]\\d)(\\d{3})(\\d{2,3})","$1 $2 $3",["[3-6]|7(?:[1-79]|0[1-9])|8[2-9]"]
+,"0$1",""]
+,[,"([78]\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["70[03-9]|8(?:0|1[23])"]
+,"0$1",""]
+,[,"([78]\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["702|819"]
+,"0$1",""]
+,[,"([78]00)(\\d{4})(\\d{4,5})","$1 $2 $3",["[78]00"]
+,"0$1",""]
+,[,"([78]00)(\\d{5})(\\d{5,6})","$1 $2 $3",["[78]00"]
+,"0$1",""]
+,[,"(78)(\\d{2})(\\d{3})","$1 $2 $3",["78"]
+,"0$1",""]
+]
+]
 ,
   "NI": [,[]
 ,[]
@@ -2062,10 +2516,16 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"85\\d{7}","\\d{9}"]
-,"NL",31,"00","0",,,"0",,,,[[,"([1-578]\\d)(\\d{3})(\\d{4})","$1 $2 $3","1[035]|2[0346]|3[03568]|4[0356]|5[0358]|7|8[458]","0$1",""],
-[,"([1-5]\\d{2})(\\d{3})(\\d{3})","$1 $2 $3","1[16-8]|2[259]|3[124]|4[17-9]|5[124679]","0$1",""],
-[,"(6)(\\d{8})","$1 $2","6","0$1",""],
-[,"([89]0\\d)(\\d{4,7})","$1 $2","80|9","0$1",""]]]
+,"NL",31,"00","0",,,"0",,,,[[,"([1-578]\\d)(\\d{3})(\\d{4})","$1 $2 $3",["1[035]|2[0346]|3[03568]|4[0356]|5[0358]|7|8[458]"]
+,"0$1",""]
+,[,"([1-5]\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["1[16-8]|2[259]|3[124]|4[17-9]|5[124679]"]
+,"0$1",""]
+,[,"(6)(\\d{8})","$1 $2",["6"]
+,"0$1",""]
+,[,"([89]0\\d)(\\d{4,7})","$1 $2",["80|9"]
+,"0$1",""]
+]
+]
 ,
   "NO": [,[,,"0\\d{4}|[2-9]\\d{7}","\\d{5}(?:\\d{3})?"]
 ,[,,"0\\d{4}|(?:2[1-4]|3[1-3578]|5[1-35-7]|6[1-4679]|7\\d)\\d{6}|81(?:0(?:0[7-9]|1\\d)|5\\d{2})\\d{3}","\\d{5}(?:\\d{3})?",,,"21234567"]
@@ -2075,8 +2535,12 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"810(?:0[0-6]|[2-8]\\d)\\d{3}","\\d{8}",,,"81021234"]
 ,[,,"880\\d{5}","\\d{8}",,,"88012345"]
 ,[,,"NA","NA"]
-,"NO",47,"00",,,,,,,,[[,"([489]\\d{2})(\\d{2})(\\d{3})","$1 $2 $3","[489]","",""],
-[,"([235-7]\\d)(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4","[235-7]","",""]]]
+,"NO",47,"00",,,,,,,,[[,"([489]\\d{2})(\\d{2})(\\d{3})","$1 $2 $3",["[489]"]
+,"",""]
+,[,"([235-7]\\d)(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[235-7]"]
+,"",""]
+]
+]
 ,
   "NP": [,[,,"[1-8]\\d{5,7}|98[45]\\d{7}","\\d{6,10}"]
 ,[,,"(?:1[014-6]|2[13-79]|3[135-8]|4[146-9]|5[135-7]|6[13-9]|7[15-9]|8[1-4679]|9[1-79])\\d{6}","\\d{6,8}",,,"14567890"]
@@ -2086,9 +2550,14 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"NP",977,"00","0",,,"0",,,,[[,"(1)([4-6]\\d{3})(\\d{3})","$1 $2 $3","1[4-6]","0$1",""],
-[,"(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3","1[01]|[2-8]|9[1-79]","0$1",""],
-[,"(98[45])(\\d{3})(\\d{4})","$1 $2 $3","98","0$1",""]]]
+,"NP",977,"00","0",,,"0",,,,[[,"(1)([4-6]\\d{3})(\\d{3})","$1 $2 $3",["1[4-6]"]
+,"0$1",""]
+,[,"(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["1[01]|[2-8]|9[1-79]"]
+,"0$1",""]
+,[,"(98[45])(\\d{3})(\\d{4})","$1 $2 $3",["98"]
+,"0$1",""]
+]
+]
 ,
   "NR": [,[]
 ,[]
@@ -2118,11 +2587,18 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"NZ",64,"00","0",,,"0",,,,[[,"([34679])(\\d{3})(\\d{4})","$1-$2 $3","[3467]|9[1-9]","0$1",""],
-[,"(21)(\\d{4})(\\d{3,4})","$1 $2 $3","21","0$1",""],
-[,"([2589]\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3","2[0247-9]|5|[89]00","0$1",""],
-[,"(2[019])(\\d{3})(\\d{3})","$1 $2 $3","2[019]","0$1",""],
-[,"(24099)(\\d{3})","$1 $2","24099","0$1",""]]]
+,"NZ",64,"00","0",,,"0",,,,[[,"([34679])(\\d{3})(\\d{4})","$1-$2 $3",["[3467]|9[1-9]"]
+,"0$1",""]
+,[,"(21)(\\d{4})(\\d{3,4})","$1 $2 $3",["21"]
+,"0$1",""]
+,[,"([2589]\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["2[0247-9]|5|[89]00"]
+,"0$1",""]
+,[,"(2[019])(\\d{3})(\\d{3})","$1 $2 $3",["2[019]"]
+,"0$1",""]
+,[,"(24099)(\\d{3})","$1 $2",["240","2409","24099"]
+,"0$1",""]
+]
+]
 ,
   "OM": [,[,,"(?:2[3-6]|5|9[2-9])\\d{6}|800\\d{5,6}","\\d{7,9}"]
 ,[,,"2[3-6]\\d{6}","\\d{8}",,,"23123456"]
@@ -2132,10 +2608,14 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"OM",968,"00",,,,,,,,[[,"(2\\d)(\\d{6})","$1 $2","2","",""],
-[,"(9\\d{3})(\\d{4})","$1 $2","9","",""],
-[,"(800)(7\\d{4,5})","$1 $2","8","",""],
-[,"(500)(\\d{4})","$1 $2","5","",""]]]
+,"OM",968,"00",,,,,,,,[[,"(2\\d)(\\d{6})","$1 $2",["2"]
+,"",""]
+,[,"(9\\d{3})(\\d{4})","$1 $2",["9"]
+,"",""]
+,[,"([58]00)(\\d{4,6})","$1 $2",["[58]"]
+,"",""]
+]
+]
 ,
   "PA": [,[]
 ,[]
@@ -2155,10 +2635,16 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"PE",51,"00","0"," Anexo ",,"0",,,,[[,"(1)(9\\d{2})(\\d{6})","$1 $2 $3","19","($1)",""],
-[,"(1)(\\d{8})","$1 $2","1[0-8]","($1)",""],
-[,"([4-8]\\d)(\\d{6})","$1 $2","[4-8]\\d[0-8]","($1)",""],
-[,"([4-8]\\d)(9\\d{2})(\\d{6})","$1 $2 $3","[4-8]\\d9","($1)",""]]]
+,"PE",51,"00","0"," Anexo ",,"0",,,,[[,"(1)(9\\d{2})(\\d{6})","$1 $2 $3",["19"]
+,"($1)",""]
+,[,"(1)(\\d{8})","$1 $2",["1[0-8]"]
+,"($1)",""]
+,[,"([4-8]\\d)(\\d{6})","$1 $2",["[4-8]\\d[0-8]"]
+,"($1)",""]
+,[,"([4-8]\\d)(9\\d{2})(\\d{6})","$1 $2 $3",["[4-8]\\d9"]
+,"($1)",""]
+]
+]
 ,
   "PF": [,[]
 ,[]
@@ -2171,15 +2657,19 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,"PF",689,"00",,,,,,,1]
 ,
   "PG": [,[,,"[1-9]\\d{6,7}","\\d{7,8}"]
-,[,,"(?:3\\d{2}|4[257]\\d|5[34]\\d|6[24]9|85[02-46-9]|9[78]\\d)\\d{4}","\\d{7}",,,"3123456"]
+,[,,"(?:3\\d{2}|4[257]\\d|5[34]\\d|6(?:29|4[1-9])|85[02-46-9]|9[78]\\d)\\d{4}","\\d{7}",,,"3123456"]
 ,[,,"(?:68|7(?:[126]\\d|3[34689]))\\d{5}","\\d{7,8}",,,"6812345"]
 ,[,,"180\\d{4}","\\d{7}",,,"1801234"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"275\\d{4}","\\d{7}",,,"2751234"]
-,"PG",675,"00",,,,,,,,[[,"(\\d{3})(\\d{4})","$1 $2","[1-689]","",""],
-[,"(7[1-36]\\d)(\\d{2})(\\d{3})","$1 $2 $3","7[1-36]","",""]]]
+,"PG",675,"00",,,,,,,,[[,"(\\d{3})(\\d{4})","$1 $2",["[1-689]"]
+,"",""]
+,[,"(7[1-36]\\d)(\\d{2})(\\d{3})","$1 $2 $3",["7[1-36]"]
+,"",""]
+]
+]
 ,
   "PH": [,[,,"[2-9]\\d{7,9}|1800\\d{7,9}","\\d{7,13}"]
 ,[,,"(?:2|3[2-68]|4[2-9]|5[2-6]|6[2-58]|7[24578]|8[2-8])\\d{7}","\\d{7,9}",,,"21234567"]
@@ -2189,26 +2679,49 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"PH",63,"00","0",,,"0",,,,[[,"(2)(\\d{3})(\\d{4})","$1 $2 $3","2","(0$1)",""],
-[,"(\\d{4})(\\d{5})","$1 $2","3(?:230|397|461)|4(?:2(?:35|[46]4|51)|396|4(?:22|63)|59[347]|76[15])|5(?:221|446)|642[23]|8(?:622|8(?:[24]2|5[13]))","(0$1)",""],
-[,"(\\d{5})(\\d{4})","$1 $2","3469|4(?:279|9(?:30|56))|8834","(0$1)",""],
-[,"([3-8]\\d)(\\d{3})(\\d{4})","$1 $2 $3","[3-8]","(0$1)",""],
-[,"(9\\d{2})(\\d{3})(\\d{4})","$1 $2 $3","9","0$1",""],
-[,"(1800)(\\d{3})(\\d{4})","$1 $2 $3","1","",""],
-[,"(1800)(\\d{1,2})(\\d{3})(\\d{4})","$1 $2 $3 $4","1","",""]]]
-,
-  "PK": [,[,,"[2-9]\\d{7,9}","\\d{7,10}"]
-,[,,"(?:21|42)\\d{8}|(?:2(?:[25]|3[2358]|4[2-4]|9[78])|4(?:[0146-9]|5[3479])|5(?:[1-35-8]|4[2-467])|6(?:[1-8]|0[468])|7(?:[14]|2[236])|8(?:[16]|2[2-689]|3[23578]|4[3478]|5[2356])|9(?:1|2[2-8]|3[27-9]|4[2-6]|6[3569]|9[25-8]))\\d{7}","\\d{7,10}",,,"2112345678"]
-,[,,"3[0-6]\\d{8}","\\d{10}",,,"3012345678"]
+,"PH",63,"00","0",,,"0",,,,[[,"(2)(\\d{3})(\\d{4})","$1 $2 $3",["2"]
+,"(0$1)",""]
+,[,"(\\d{4})(\\d{5})","$1 $2",["3(?:23|39|46)|4(?:2[3-6]|[35]9|4[26]|76)|5(?:22|44)|642|8(?:62|8[245])","3(?:230|397|461)|4(?:2(?:35|[46]4|51)|396|4(?:22|63)|59[347]|76[15])|5(?:221|446)|642[23]|8(?:622|8(?:[24]2|5[13]))"]
+,"(0$1)",""]
+,[,"(\\d{5})(\\d{4})","$1 $2",["346|4(?:27|9[35])|883","3469|4(?:279|9(?:30|56))|8834"]
+,"(0$1)",""]
+,[,"([3-8]\\d)(\\d{3})(\\d{4})","$1 $2 $3",["[3-8]"]
+,"(0$1)",""]
+,[,"(9\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["9"]
+,"0$1",""]
+,[,"(1800)(\\d{3})(\\d{4})","$1 $2 $3",["1"]
+,"",""]
+,[,"(1800)(\\d{1,2})(\\d{3})(\\d{4})","$1 $2 $3 $4",["1"]
+,"",""]
+]
+]
+,
+  "PK": [,[,,"1\\d{8}|[2-8]\\d{5,11}|9(?:[013-9]\\d{4,9}|2\\d(?:111\\d{6}|\\d{3,7}))","\\d{6,12}"]
+,[,,"(?:21|42)[2-9]\\d{7}|(?:2[25]|4[0146-9]|5[1-35-7]|6[1-8]|7[14]|8[16]|91)[2-9]\\d{6}|(?:2(?:3[2358]|4[2-4]|9[2-8])|45[3479]|54[2-467]|60[468]|72[236]|8(?:2[2-689]|3[23578]|4[3478]|5[2356])|9(?:1|2[2-8]|3[27-9]|4[2-6]|6[3569]|9[25-8]))[2-9]\\d{5,6}|58[126]\\d{7}","\\d{6,10}",,,"2123456789"]
+,[,,"3(?:0\\d|1[2-5]|2[1-3]|3[1-6]|4[2-6]|64)\\d{7}","\\d{10}",,,"3012345678"]
 ,[,,"800\\d{5}","\\d{8}",,,"80012345"]
 ,[,,"900\\d{5}","\\d{8}",,,"90012345"]
-,[,,"NA","NA"]
-,[,,"NA","NA"]
-,[,,"NA","NA"]
-,"PK",92,"00","0",,,"0",,,,[[,"([24]\\d)(\\d{4})(\\d{4})","$1 $2 $3","21|42","0$1",""],
-[,"(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3","2[25]|4[0146-9]|5[1-35-8]|6[1-8]|7[14]|8[16]|91","0$1",""],
-[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3","2[349]|3|45|54|60|72|8[2-5]|9[2-9]","0$1",""],
-[,"([89]00)(\\d{3})(\\d{2})","$1 $2 $3","89","0$1",""]]]
+,[,,"(?:2(?:[125]|3[2358]|4[2-4]|9[2-8])|4(?:[0-246-9]|5[3479])|5(?:[1-35-7]|4[2-467]|8[126])|6(?:[1-8]|0[468])|7(?:[14]|2[236])|8(?:[16]|2[2-689]|3[23578]|4[3478]|5[2356])|9(?:1|22|3[27-9]|4[2-6]|6[3569]|9[2-7]))111\\d{6}","\\d{11,12}",,,"21111825888"]
+,[,,"122\\d{6}","\\d{9}",,,"122044444"]
+,[,,"NA","NA"]
+,"PK",92,"00","0",,,"0",,,,[[,"(\\d{2})(111)(\\d{3})(\\d{3})","$1 $2 $3 $4",["(?:2[125]|4[0-246-9]|5[1-35-7]|6[1-8]|7[14]|8[16]|91)1","(?:2[125]|4[0-246-9]|5[1-35-7]|6[1-8]|7[14]|8[16]|91)11","(?:2[125]|4[0-246-9]|5[1-35-7]|6[1-8]|7[14]|8[16]|91)111"]
+,"(0$1)",""]
+,[,"(\\d{3})(111)(\\d{3})(\\d{3})","$1 $2 $3 $4",["(?:2[349]|45|54|60|72|8[2-5]|9[2-9])","(?:2[349]|45|54|60|72|8[2-5]|9[2-9])\\d1","(?:2[349]|45|54|60|72|8[2-5]|9[2-9])\\d11","(?:2[349]|45|54|60|72|8[2-5]|9[2-9])\\d111"]
+,"(0$1)",""]
+,[,"(\\d{2})(\\d{7,8})","$1 $2",["(?:2[125]|4[0-246-9]|5[1-35-7]|6[1-8]|7[14]|8[16]|91)[2-9]"]
+,"(0$1)",""]
+,[,"(\\d{3})(\\d{6,7})","$1 $2",["2[349]|45|54|60|72|8[2-5]|9[2-9]","(?:2[349]|45|54|60|72|8[2-5]|9[2-9])\\d[2-9]"]
+,"(0$1)",""]
+,[,"(3\\d{2})(\\d{7})","$1 $2",["3"]
+,"0$1",""]
+,[,"([15]\\d{3})(\\d{5,6})","$1 $2",["58[12]|1"]
+,"(0$1)",""]
+,[,"(586\\d{2})(\\d{5})","$1 $2",["586"]
+,"(0$1)",""]
+,[,"([89]00)(\\d{3})(\\d{2})","$1 $2 $3",["[89]00"]
+,"0$1",""]
+]
+]
 ,
   "PL": [,[,,"[1-9]\\d{8}","\\d{9}"]
 ,[,,"(?:1[2-8]|2[2-59]|3[2-4]|4[1-468]|5[24-689]|6[1-3578]|7[14-7]|8[1-79]|9[145])\\d{7}","\\d{9}",,,"123456789"]
@@ -2218,8 +2731,12 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"801\\d{6}","\\d{9}",,,"801234567"]
 ,[,,"NA","NA"]
 ,[,,"39\\d{7}","\\d{9}",,,"391234567"]
-,"PL",48,"00",,,,,,,,[[,"(\\d{2})(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4","[124]|3[2-4]|5[24-689]|6[1-3578]|7[014-7]|8[1-79]|9[145]","",""],
-[,"(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3","39|5[013]|6[069]|7[289]|8[08]","",""]]]
+,"PL",48,"00",,,,,,,,[[,"(\\d{2})(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[124]|3[2-4]|5[24-689]|6[1-3578]|7[14-7]|8[1-79]|9[145]"]
+,"",""]
+,[,"(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["39|5[013]|6[069]|7[0289]|8[08]"]
+,"",""]
+]
+]
 ,
   "PM": [,[]
 ,[]
@@ -2259,7 +2776,9 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"30\\d{7}","\\d{9}",,,"301234567"]
-,"PT",351,"00",,,,,,,,[[,"([2-46-9]\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",,"",""]]]
+,"PT",351,"00",,,,,,,,[[,"([2-46-9]\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",,"",""]
+]
+]
 ,
   "PW": [,[]
 ,[]
@@ -2281,15 +2800,20 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,"PY",595,"002","0",,,"0",,,1]
 ,
-  "QA": [,[,,"[3-8]\\d{6}","\\d{7}"]
-,[,,"4\\d{6}","\\d{7}",,,"4123456"]
-,[,,"[35-7]\\d{6}","\\d{7}",,,"3123456"]
-,[,,"80\\d{5}","\\d{7}",,,"8012345"]
+  "QA": [,[,,"[3-8]\\d{6,7}","\\d{7,8}"]
+,[,,"44\\d{6}","\\d{7,8}",,,"44123456"]
+,[,,"(?:33|55|66|77)\\d{6}","\\d{7,8}",,,"33123456"]
+,[,,"800\\d{4}","\\d{7,8}",,,"8001234"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"QA",974,"00",,,,,,,,[[,"([3-8]\\d{2})(\\d{4})","$1 $2",,"",""]]]
+,"QA",974,"00",,,,,,,,[[,"(8\\d{2})(\\d{4})","$1 $2",["8"]
+,"",""]
+,[,"([3-7]\\d{3})(\\d{4})","$1 $2",["[3-7]"]
+,"",""]
+]
+]
 ,
   "RE": [,[,,"[268]\\d{8}","\\d{9}"]
 ,[,,"262\\d{6}","\\d{9}",,,"262161234"]
@@ -2299,7 +2823,8 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"RE",262,"00","0",,,"0",,,,[[,"([268]\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",,"0$1",""]]
+,"RE",262,"00","0",,,"0",,,,[[,"([268]\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",,"0$1",""]
+]
 ,,,1,"262|6[49]|8"]
 ,
   "RO": [,[,,"[237-9]\\d{8}","\\d{9}"]
@@ -2310,8 +2835,12 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"801\\d{6}","\\d{9}",,,"801123456"]
 ,[,,"802\\d{6}","\\d{9}",,,"802123456"]
 ,[,,"NA","NA"]
-,"RO",40,"00","0"," int ",,"0",,,,[[,"([237]\\d)(\\d{3})(\\d{4})","$1 $2 $3","[23]1|7","0$1",""],
-[,"(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3","[23][02-9]|[89]","0$1",""]]]
+,"RO",40,"00","0"," int ",,"0",,,,[[,"([237]\\d)(\\d{3})(\\d{4})","$1 $2 $3",["[23]1|7"]
+,"0$1",""]
+,[,"(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["[23][02-9]|[89]"]
+,"0$1",""]
+]
+]
 ,
   "RS": [,[,,"[1-46-9]\\d{4,11}","\\d{5,12}"]
 ,[,,"[1-3]\\d{6,9}","\\d{5,10}",,,"1012345"]
@@ -2321,11 +2850,16 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"RS",381,"00","0",,,"0",,,,[[,"([23]\\d{2})(\\d{4,7})","$1 $2","(?:2[389]|39)0","0$1",""],
-[,"([1-3]\\d)(\\d{5,8})","$1 $2","1|2(?:[0-24-7]|[389][1-9])|3(?:[0-8]|9[1-9])","0$1",""],
-[,"(6[0-689])(\\d{3,10})","$1 $2","6","0$1",""],
-[,"(42)(\\d{4,7})","$1 $2","42","0$1",""],
-[,"([89]0\\d)(\\d{3,6})","$1 $2","[89]","0$1",""]]]
+,"RS",381,"00","0",,,"0",,,,[[,"([23]\\d{2})(\\d{4,7})","$1 $2",["(?:2[389]|39)0"]
+,"0$1",""]
+,[,"([1-4]\\d)(\\d{4,8})","$1 $2",["1|2(?:[0-24-7]|[389][1-9])|3(?:[0-8]|9[1-9])|42"]
+,"0$1",""]
+,[,"(6[0-689])(\\d{3,10})","$1 $2",["6"]
+,"0$1",""]
+,[,"([89]0\\d)(\\d{3,6})","$1 $2",["[89]"]
+,"0$1",""]
+]
+]
 ,
   "RU": [,[,,"[3489]\\d{9}","\\d{10}"]
 ,[,,"(?:3(?:0[12]|4[1-35-79]|5[1-3]|8[1-58]|9[0145])|4(?:01|1[1356]|2[13467]|7[1-5]|8[1-7]|9[1-689])|8(?:1[1-8]|2[01]|3[13-6]|4[0-8]|5[15]|6[1-35-7]|7[1-37-9]))\\d{7}","\\d{10}",,,"3011234567"]
@@ -2335,8 +2869,11 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"RU",7,"8~10","8",,,"8",,,,[[,"([34689]\\d{2})(\\d{3})(\\d{2})(\\d{2})","$1 $2-$3-$4","[34689]","8 ($1)",""],
-[,"([7]\\d{2})(\\d{3})(\\d{4})","$1 $2 $3","7","8 ($1)",""]]
+,"RU",7,"8~10","8",,,"8",,,,[[,"([34689]\\d{2})(\\d{3})(\\d{2})(\\d{2})","$1 $2-$3-$4",["[34689]"]
+,"8 ($1)",""]
+,[,"([7]\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["7"]
+,"8 ($1)",""]
+]
 ,,,1]
 ,
   "RW": [,[,,"[27-9]\\d{8}","\\d{9}"]
@@ -2347,8 +2884,12 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"RW",250,"000","0",,,"0",,,,[[,"(25\\d)(\\d{3})(\\d{3})","$1 $2 $3","2","$1",""],
-[,"([7-9]\\d{2})(\\d{3})(\\d{3})","$1 $2 $3","[7-9]","0$1",""]]]
+,"RW",250,"000","0",,,"0",,,,[[,"(25\\d)(\\d{3})(\\d{3})","$1 $2 $3",["2"]
+,"$1",""]
+,[,"([7-9]\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["[7-9]"]
+,"0$1",""]
+]
+]
 ,
   "SA": [,[,,"[1-9]\\d{7,10}","\\d{7,11}"]
 ,[,,"(?:1[24-7]|2[24-8]|3[35-8]|4[34-68]|6[2-5]|7[235-7])\\d{6}","\\d{7,8}",,,"12345678"]
@@ -2358,11 +2899,18 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"SA",966,"00","0",,,"0",,,,[[,"([1-467])(\\d{3})(\\d{4})","$1 $2 $3","[1-467]","0$1",""],
-[,"(9200)(\\d{3})(\\d{4})","$1 $2 $3","9","0$1",""],
-[,"(5\\d)(\\d{3})(\\d{4})","$1 $2 $3","5","0$1",""],
-[,"(800)(\\d{3})(\\d{4})","$1 $2 $3","80","0$1",""],
-[,"(8111)(\\d{3})(\\d{3})","$1 $2 $3","81","0$1",""]]]
+,"SA",966,"00","0",,,"0",,,,[[,"([1-467])(\\d{3})(\\d{4})","$1 $2 $3",["[1-467]"]
+,"0$1",""]
+,[,"(9200)(\\d{3})(\\d{4})","$1 $2 $3",["9"]
+,"0$1",""]
+,[,"(5\\d)(\\d{3})(\\d{4})","$1 $2 $3",["5"]
+,"0$1",""]
+,[,"(800)(\\d{3})(\\d{4})","$1 $2 $3",["80"]
+,"0$1",""]
+,[,"(8111)(\\d{3})(\\d{3})","$1 $2 $3",["81"]
+,"0$1",""]
+]
+]
 ,
   "SB": [,[]
 ,[]
@@ -2382,7 +2930,9 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"4[1-37]\\d{4}","\\d{6}",,,"410123"]
-,"SC",248,"0[0-2]",,,,,,"00",,[[,"(\\d{3})(\\d{3})","$1 $2",,"",""]]]
+,"SC",248,"0[0-2]",,,,,,"00",,[[,"(\\d{3})(\\d{3})","$1 $2",,"",""]
+]
+]
 ,
   "SD": [,[]
 ,[]
@@ -2402,15 +2952,24 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"SE",46,"00","0",,,"0",,,,[[,"(8)(\\d{2,3})(\\d{2,3})(\\d{2})","$1 $2 $3 $4","8","0$1",""],
-[,"([1-69]\\d)(\\d{2,3})(\\d{2})(\\d{2})","$1 $2 $3 $4","1[013689]|2[136]|3[1356]|4[0246]|54|6[03]|90","0$1",""],
-[,"([1-69]\\d)(\\d{3})(\\d{2})","$1 $2 $3","1[13689]|2[136]|3[1356]|4[0246]|54|6[03]|90","0$1",""],
-[,"(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4","1[2457]|2[2457-9]|3[0247-9]|4[1357-9]|5[0-35-9]|6[124-9]|9(?:[125-8]|3[0-5]|4[0-3])","0$1",""],
-[,"(\\d{3})(\\d{2,3})(\\d{2})","$1 $2 $3","1[2457]|2[2457-9]|3[0247-9]|4[1357-9]|5[0-35-9]|6[124-9]|9(?:[125-8]|3[0-5]|4[0-3])","0$1",""],
-[,"(7[02-46])(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4","7[02-46]","0$1",""],
-[,"(20)(\\d{2,3})(\\d{2})(\\d{2})","$1 $2 $3 $4","20","0$1",""],
-[,"(20)(\\d{2,3})(\\d{2})","$1 $2 $3","20","0$1",""],
-[,"(9[034]\\d)(\\d{2})(\\d{2})(\\d{3})","$1 $2 $3 $4","9[034]","0$1",""]]]
+,"SE",46,"00","0",,,"0",,,,[[,"(8)(\\d{2,3})(\\d{2,3})(\\d{2})","$1 $2 $3 $4",["8"]
+,"0$1",""]
+,[,"([1-69]\\d)(\\d{2,3})(\\d{2})(\\d{2})","$1 $2 $3 $4",["1[013689]|2[0136]|3[1356]|4[0246]|54|6[03]|90"]
+,"0$1",""]
+,[,"([1-69]\\d)(\\d{3})(\\d{2})","$1 $2 $3",["1[13689]|2[136]|3[1356]|4[0246]|54|6[03]|90"]
+,"0$1",""]
+,[,"(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["1[2457]|2[2457-9]|3[0247-9]|4[1357-9]|5[0-35-9]|6[124-9]|9(?:[125-8]|3[0-5]|4[0-3])"]
+,"0$1",""]
+,[,"(\\d{3})(\\d{2,3})(\\d{2})","$1 $2 $3",["1[2457]|2[2457-9]|3[0247-9]|4[1357-9]|5[0-35-9]|6[124-9]|9(?:[125-8]|3[0-5]|4[0-3])"]
+,"0$1",""]
+,[,"(7[02-46])(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",["7[02-46]"]
+,"0$1",""]
+,[,"(20)(\\d{2,3})(\\d{2})","$1 $2 $3",["20"]
+,"0$1",""]
+,[,"(9[034]\\d)(\\d{2})(\\d{2})(\\d{3})","$1 $2 $3 $4",["9[034]"]
+,"0$1",""]
+]
+]
 ,
   "SG": [,[,,"[13689]\\d{7,10}","\\d{8,11}"]
 ,[,,"[36]\\d{7}","\\d{8}",,,"31234567"]
@@ -2420,9 +2979,14 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"SG",65,"0[0-3][0-9]",,,,,,,,[[,"([3689]\\d{3})(\\d{4})","$1 $2","[369]|8[1-9]","",""],
-[,"(1[89]00)(\\d{3})(\\d{4})","$1 $2 $3","1[89]","",""],
-[,"(800)(\\d{3})(\\d{4})","$1 $2 $3","80","",""]]]
+,"SG",65,"0[0-3][0-9]",,,,,,,,[[,"([3689]\\d{3})(\\d{4})","$1 $2",["[369]|8[1-9]"]
+,"",""]
+,[,"(1[89]00)(\\d{3})(\\d{4})","$1 $2 $3",["1[89]"]
+,"",""]
+,[,"(800)(\\d{3})(\\d{4})","$1 $2 $3",["80"]
+,"",""]
+]
+]
 ,
   "SH": [,[]
 ,[]
@@ -2434,17 +2998,24 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,"SH",290,"00",,,,,,,1]
 ,
-  "SI": [,[,,"[1-9]\\d{5,7}","\\d{6,8}"]
-,[,,"[1-57]\\d{6}","\\d{7,8}",,,"1123456"]
+  "SI": [,[,,"[1-7]\\d{6,7}|[89]\\d{4,7}","\\d{5,8}"]
+,[,,"(?:1\\d|2[2-8]|3[4-8]|4[24-8]|[57][3-8])\\d{6}","\\d{7,8}",,,"11234567"]
 ,[,,"(?:[37][01]|4[019]|51|64)\\d{6}","\\d{8}",,,"31234567"]
 ,[,,"80\\d{4,6}","\\d{6,8}",,,"80123456"]
-,[,,"90\\d{4,6}","\\d{6,8}",,,"90123456"]
-,[,,"NA","NA"]
+,[,,"90\\d{4,6}|89[1-3]\\d{2,5}","\\d{5,8}",,,"90123456"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"SI",386,"00","0",,,"0",,,,[[,"(\\d)(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4","[12]|3[4-8]|4[24-8]|5[4-8]|7[3-8]","0$1",""],
-[,"([3-7]\\d)(\\d{3})(\\d{3})","$1 $2 $3","[37][01]|4[019]|51|64","0$1",""],
-[,"([89]0)(\\d{4,6})","$1 $2","[89]","0$1",""]]]
+,[,,"(?:59|8[1-3])\\d{6}","\\d{8}",,,"59012345"]
+,"SI",386,"00","0",,,"0",,,,[[,"(\\d)(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[12]|3[4-8]|4[24-8]|5[3-8]|7[3-8]"]
+,"(0$1)",""]
+,[,"([3-7]\\d)(\\d{3})(\\d{3})","$1 $2 $3",["[37][01]|4[019]|51|64"]
+,"0$1",""]
+,[,"([89][09])(\\d{3,6})","$1 $2",["[89][09]"]
+,"0$1",""]
+,[,"([58]\\d{2})(\\d{5})","$1 $2",["59|8[1-3]"]
+,"0$1",""]
+]
+]
 ,
   "SK": [,[,,"[2-689]\\d{8}","\\d{9}"]
 ,[,,"[2-5]\\d{8}","\\d{9}",,,"212345678"]
@@ -2454,9 +3025,14 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"8[5-9]\\d{7}","\\d{9}",,,"850123456"]
 ,[,,"NA","NA"]
 ,[,,"6(?:5[0-4]|9[0-6])\\d{6}","\\d{9}",,,"690123456"]
-,"SK",421,"00","0",,,"0",,,,[[,"(2)(\\d{3})(\\d{3})(\\d{2})","$1/$2 $3 $4","2","0$1",""],
-[,"([3-5]\\d)(\\d{3})(\\d{2})(\\d{2})","$1/$2 $3 $4","[3-5]","0$1",""],
-[,"([689]\\d{2})(\\d{3})(\\d{3})","$1 $2 $3","[689]","0$1",""]]]
+,"SK",421,"00","0",,,"0",,,,[[,"(2)(\\d{3})(\\d{3})(\\d{2})","$1/$2 $3 $4",["2"]
+,"0$1",""]
+,[,"([3-5]\\d)(\\d{3})(\\d{2})(\\d{2})","$1/$2 $3 $4",["[3-5]"]
+,"0$1",""]
+,[,"([689]\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["[689]"]
+,"0$1",""]
+]
+]
 ,
   "SL": [,[,,"[2-578]\\d{7}","\\d{6,8}"]
 ,[,,"[235]2[2-4][2-9]\\d{4}","\\d{6,8}",,,"22221234"]
@@ -2466,7 +3042,9 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"SL",232,"00","0",,,"0",,,,[[,"(\\d{2})(\\d{6})","$1 $2",,"(0$1)",""]]]
+,"SL",232,"00","0",,,"0",,,,[[,"(\\d{2})(\\d{6})","$1 $2",,"(0$1)",""]
+]
+]
 ,
   "SM": [,[]
 ,[]
@@ -2486,7 +3064,9 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"33301\\d{4}","\\d{9}",,,"333011234"]
-,"SN",221,"00",,,,,,,,[[,"(\\d{2})(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",,"",""]]]
+,"SN",221,"00",,,,,,,,[[,"(\\d{2})(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",,"",""]
+]
+]
 ,
   "SO": [,[,,"[13-59]\\d{6,7}","\\d{7,8}"]
 ,[,,"(?:5[57-9]|[134]\\d)\\d{5}","\\d{7}",,,"5522010"]
@@ -2496,8 +3076,12 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"SO",252,"00",,,,,,,,[[,"([13-5])(\\d{6})","$1 $2","[13-5]","",""],
-[,"([19]\\d)(\\d{6})","$1 $2","[19]","",""]]]
+,"SO",252,"00",,,,,,,,[[,"([13-5])(\\d{6})","$1 $2",["[13-5]"]
+,"",""]
+,[,"([19]\\d)(\\d{6})","$1 $2",["[19]"]
+,"",""]
+]
+]
 ,
   "SR": [,[]
 ,[]
@@ -2517,7 +3101,9 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"ST",239,"00",,,,,,,,[[,"(\\d{3})(\\d{4})","$1 $2",,"",""]]]
+,"ST",239,"00",,,,,,,,[[,"(\\d{3})(\\d{4})","$1 $2",,"",""]
+]
+]
 ,
   "SV": [,[]
 ,[]
@@ -2537,20 +3123,27 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"SY",963,"00","0",,,"0",,,,[[,"([13]\\d)(\\d{3})(\\d{3,4})","$1 $2 $3","[13]","0$1",""],
-[,"([245]\\d)(\\d{3})(\\d{3})","$1 $2 $3","[245]","0$1",""],
-[,"(9[3-689])(\\d{4})(\\d{3})","$1 $2 $3","9","0$1",""]]]
+,"SY",963,"00","0",,,"0",,,,[[,"(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["[1-5]"]
+,"0$1",""]
+,[,"(9[3-689])(\\d{4})(\\d{3})","$1 $2 $3",["9"]
+,"0$1",""]
+]
+]
 ,
   "SZ": [,[,,"[2-7]\\d{6,7}","\\d{7,8}"]
 ,[,,"2?(?:2(?:0[07]|[13]7|2[57])|3(?:0[34]|[1278]3|3[23]|[46][34])|(?:40[4-69]|16|2[12]|3[57]|[4578]2|67)|5(?:0[5-7]|1[6-9]|[23][78]|48|5[01]))\\d{4}","\\d{7,8}",,,"2171234"]
-,[,,"(?:6|7[67])\\d{6}","\\d{7,8}",,,"6012345"]
+,[,,"(?:6|7[67])\\d{6}","\\d{7,8}",,,"76123456"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"SZ",268,"00",,,,,,,,[[,"(\\d{3})(\\d{4})","$1 $2","[2-6]","",""],
-[,"(\\d{4})(\\d{4})","$1 $2","7","",""]]]
+,"SZ",268,"00",,,,,,,,[[,"(\\d{3})(\\d{4})","$1 $2",["[2-6]"]
+,"",""]
+,[,"(\\d{4})(\\d{4})","$1 $2",["7"]
+,"",""]
+]
+]
 ,
   "TC": [,[,,"[689]\\d{9}","\\d{7,10}"]
 ,[,,"649(?:712|9(?:4\\d|50))\\d{4}","\\d{7,10}",,,"6497121234"]
@@ -2570,7 +3163,9 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"TD",235,"00|16",,,,,,"00",,[[,"(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",,"",""]]]
+,"TD",235,"00|16",,,,,,"00",,[[,"(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",,"",""]
+]
+]
 ,
   "TF": [,[]
 ,[]
@@ -2590,9 +3185,11 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"TG",228,"00",,,,,,,,[[,"(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3",,"",""]]]
+,"TG",228,"00",,,,,,,,[[,"(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3",,"",""]
+]
+]
 ,
-  "TH": [,[,,"[1-8]\\d{7,9}","\\d{8,10}"]
+  "TH": [,[,,"[2-8]\\d{7,8}|1\\d{9}","\\d{8,10}"]
 ,[,,"(?:2[1-9]|3[24-9]|4[2-5]|5[3-6]|7[3-7])\\d{6}","\\d{8}",,,"21234567"]
 ,[,,"8\\d{8}","\\d{9}",,,"812345678"]
 ,[,,"1800\\d{6}","\\d{10}",,,"1800123456"]
@@ -2600,11 +3197,16 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"60\\d{7}","\\d{9}",,,"601234567"]
-,"TH",66,"00","0",,,"0",,,,[[,"(2)(\\d{3})(\\d{4})","$1 $2 $3","2","0$1",""],
-[,"(60)(\\d{3})(\\d{4})","$1 $2 $3","6","0$1",""],
-[,"([3-57]\\d)(\\d{3})(\\d{3})","$1 $2 $3","[3-57]","0$1",""],
-[,"(8)(\\d{4})(\\d{4})","$1 $2 $3","8","0$1",""],
-[,"(1[89]00)(\\d{3})(\\d{3})","$1 $2 $3","1","$1",""]]]
+,"TH",66,"00","0",,,"0",,,,[[,"(2)(\\d{3})(\\d{4})","$1 $2 $3",["2"]
+,"0$1",""]
+,[,"([3-7]\\d)(\\d{3})(\\d{3,4})","$1 $2 $3",["[3-7]"]
+,"0$1",""]
+,[,"(8)(\\d{4})(\\d{4})","$1 $2 $3",["8"]
+,"0$1",""]
+,[,"(1[89]00)(\\d{3})(\\d{3})","$1 $2 $3",["1"]
+,"$1",""]
+]
+]
 ,
   "TJ": [,[,,"[349]\\d{8}","\\d{3,9}"]
 ,[,,"(?:3(?:1[3-5]|2[245]|31|4[24-7]|5[25]|72)|4(?:46|74|87))\\d{6}","\\d{3,9}",,,"372123456"]
@@ -2614,11 +3216,16 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"TJ",992,"8~10","8",,,"8",,,,[[,"([349]\\d{2})(\\d{2})(\\d{4})","$1 $2 $3","[34]7|91[78]","8$1",""],
-[,"(4[48])(\\d{3})(\\d{4})","$1 $2 $3","4[48]","8$1",""],
-[,"(331700)(\\d)(\\d{2})","$1 $2 $3","3317","8$1",""],
-[,"(\\d{4})(\\d)(\\d{4})","$1 $2 $3","3(?:[1245]|3(?:[02-9]|1[0-589]))","8$1",""],
-[,"(9\\d)(\\d{3})(\\d{4})","$1 $2 $3","9(?:19|[0235-9])","8$1",""]]]
+,"TJ",992,"8~10","8",,,"8",,,,[[,"([349]\\d{2})(\\d{2})(\\d{4})","$1 $2 $3",["[34]7|91[78]"]
+,"8$1",""]
+,[,"([49]\\d)(\\d{3})(\\d{4})","$1 $2 $3",["4[48]|9(?:19|[0235-9])"]
+,"8$1",""]
+,[,"(331700)(\\d)(\\d{2})","$1 $2 $3",["331","3317","33170","331700"]
+,"8$1",""]
+,[,"(\\d{4})(\\d)(\\d{4})","$1 $2 $3",["3[1-5]","3(?:[1245]|3(?:[02-9]|1[0-589]))"]
+,"8$1",""]
+]
+]
 ,
   "TK": [,[]
 ,[]
@@ -2630,15 +3237,17 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,"TK",690,"00",,,,,,,1]
 ,
-  "TL": [,[]
-,[]
-,[]
-,[,,"NA","NA"]
-,[,,"NA","NA"]
-,[,,"NA","NA"]
+  "TL": [,[,,"[2-47-9]\\d{6}","\\d{7}"]
+,[,,"(?:2[1-5]|3[1-9]|4[1-4])\\d{5}","\\d{7}",,,"2112345"]
+,[,,"7[2-4]\\d{5}","\\d{7}",,,"7212345"]
+,[,,"80\\d{5}","\\d{7}",,,"8012345"]
+,[,,"90\\d{5}","\\d{7}",,,"9012345"]
 ,[,,"NA","NA"]
+,[,,"70\\d{5}","\\d{7}",,,"7012345"]
 ,[,,"NA","NA"]
-,"TL",670,"00",,,,,,,1]
+,"TL",670,"00",,,,,,,,[[,"(\\d{3})(\\d{4})","$1 $2",,"",""]
+]
+]
 ,
   "TM": [,[,,"[1-6]\\d{7}","\\d{8}"]
 ,[,,"(?:12\\d|243|[3-5]22)\\d{5}","\\d{8}",,,"12345678"]
@@ -2648,7 +3257,9 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"TM",993,"8~10","8",,,"8",,,,[[,"([1-6]\\d)(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",,"8 $1",""]]]
+,"TM",993,"8~10","8",,,"8",,,,[[,"([1-6]\\d)(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",,"8 $1",""]
+]
+]
 ,
   "TN": [,[,,"[247-9]\\d{7}","\\d{8}"]
 ,[,,"7\\d{7}","\\d{8}",,,"71234567"]
@@ -2658,7 +3269,9 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"TN",216,"00",,,,,,,,[[,"([247-9]\\d)(\\d{3})(\\d{3})","$1 $2 $3",,"",""]]]
+,"TN",216,"00",,,,,,,,[[,"([247-9]\\d)(\\d{3})(\\d{3})","$1 $2 $3",,"",""]
+]
+]
 ,
   "TO": [,[]
 ,[]
@@ -2678,7 +3291,9 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"TR",90,"00","0",,,"0",,,,[[,"([2-589]\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",,"0$1",""]]]
+,"TR",90,"00","0",,,"0",,,,[[,"([2-589]\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",,"0$1",""]
+]
+]
 ,
   "TT": [,[,,"[89]\\d{9}","\\d{7,10}"]
 ,[,,"868(?:22[1-4]|6(?:1[4-6]|[2-6]\\d|7[0-79]|9[0-8])|82[12])\\d{4}","\\d{7,10}",,,"8682211234"]
@@ -2708,8 +3323,12 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"TW",886,"0(?:0[25679]|19)","0","#",,"0",,,,[[,"([2-8])(\\d{3,4})(\\d{4})","$1 $2 $3","[2-7]|8[1-9]","0$1",""],
-[,"([89]\\d{2})(\\d{3})(\\d{3})","$1 $2 $3","80|9","0$1",""]]]
+,"TW",886,"0(?:0[25679]|19)","0","#",,"0",,,,[[,"([2-8])(\\d{3,4})(\\d{4})","$1 $2 $3",["[2-7]|8[1-9]"]
+,"0$1",""]
+,[,"([89]\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["80|9"]
+,"0$1",""]
+]
+]
 ,
   "TZ": [,[,,"\\d{9}","\\d{7,9}"]
 ,[,,"2[2-8]\\d{7}","\\d{7,9}",,,"222345678"]
@@ -2719,9 +3338,14 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"8(?:40|6[01])\\d{6}","\\d{9}",,,"840123456"]
 ,[,,"NA","NA"]
 ,[,,"41\\d{7}","\\d{9}",,,"412345678"]
-,"TZ",255,"00[056]","0",,,"0",,,,[[,"([24]\\d)(\\d{3})(\\d{4})","$1 $2 $3","[24]","0$1",""],
-[,"([67]\\d{2})(\\d{3})(\\d{3})","$1 $2 $3","[67]","0$1",""],
-[,"([89]\\d{2})(\\d{2})(\\d{4})","$1 $2 $3","[89]","0$1",""]]]
+,"TZ",255,"00[056]","0",,,"0",,,,[[,"([24]\\d)(\\d{3})(\\d{4})","$1 $2 $3",["[24]"]
+,"0$1",""]
+,[,"([67]\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["[67]"]
+,"0$1",""]
+,[,"([89]\\d{2})(\\d{2})(\\d{4})","$1 $2 $3",["[89]"]
+,"0$1",""]
+]
+]
 ,
   "UA": [,[,,"[3-689]\\d{8}","\\d{5,9}"]
 ,[,,"(?:3[1-8]|4[13-8]|5[1-7]|6[12459])\\d{7}","\\d{5,9}",,,"311234567"]
@@ -2731,9 +3355,14 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"UA",380,"0~0","0",,,"0",,,,[[,"([3-69]\\d)(\\d{3})(\\d{4})","$1 $2 $3","39|4(?:[45][0-5]|87)|5(?:0|67|7[37])|6[36-8]|9[1-9]","0$1",""],
-[,"([3-689]\\d{2})(\\d{3})(\\d{3})","$1 $2 $3","3(?:[1-46-8]2[013-9]|52)|4[1378]2|5(?:[124-7]2|64)|6(?:[49]2|[12][29]|5[24])|8|90","0$1",""],
-[,"([3-6]\\d{3})(\\d{5})","$1 $2","3(?:5[013-9]|[1-46-8](?:22|[013-9]))|4(?:[137][013-9]|6|[45][6-9]|8[4-6])|5(?:[1245][013-9]|6[0135-9]|3|7[4-6])|6(?:[49][013-9]|5[0135-9]|[12][13-8])","0$1",""]]]
+,"UA",380,"0~0","0",,,"0",,,,[[,"([3-69]\\d)(\\d{3})(\\d{4})","$1 $2 $3",["39|4(?:[45][0-5]|87)|5(?:0|6[37]|7[37])|6[36-8]|9[1-9]","39|4(?:[45][0-5]|87)|5(?:0|6(?:3[14-7]|7)|7[37])|6[36-8]|9[1-9]"]
+,"0$1",""]
+,[,"([3-689]\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["3[1-8]2|4[1378]2|5(?:[12457]2|6[24])|6(?:[49]2|[12][29]|5[24])|8|90","3(?:[1-46-8]2[013-9]|52)|4[1378]2|5(?:[12457]2|6[24])|6(?:[49]2|[12][29]|5[24])|8|90"]
+,"0$1",""]
+,[,"([3-6]\\d{3})(\\d{5})","$1 $2",["3(?:5[013-9]|[1-46-8])|4(?:[137][013-9]|6|[45][6-9]|8[4-6])|5(?:[1245][013-9]|6[0135-9]|3|7[4-6])|6(?:[49][013-9]|5[0135-9]|[12][13-8])","3(?:5[013-9]|[1-46-8](?:22|[013-9]))|4(?:[137][013-9]|6|[45][6-9]|8[4-6])|5(?:[1245][013-9]|6(?:3[02389]|[015689])|3|7[4-6])|6(?:[49][013-9]|5[0135-9]|[12][13-8])"]
+,"0$1",""]
+]
+]
 ,
   "UG": [,[,,"\\d{9}","\\d{5,9}"]
 ,[,,"3\\d{8}|4(?:[1-6]\\d|7[136]|8[1356]|96)\\d{6}|20(?:0\\d|24)\\d{5}","\\d{5,9}",,,"312345678"]
@@ -2743,9 +3372,14 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"UG",256,"00[057]","0",,,"0",,,,[[,"([247-9]\\d{2})(\\d{6})","$1 $2","[7-9]|200|4(?:6[45]|[7-9])","0$1",""],
-[,"([34]\\d)(\\d{7})","$1 $2","3|4(?:[1-5]|6[0-36-9])","0$1",""],
-[,"(2024)(\\d{5})","$1 $2","202","0$1",""]]]
+,"UG",256,"00[057]","0",,,"0",,,,[[,"([247-9]\\d{2})(\\d{6})","$1 $2",["[7-9]|200|4(?:6[45]|[7-9])"]
+,"0$1",""]
+,[,"([34]\\d)(\\d{7})","$1 $2",["3|4(?:[1-5]|6[0-36-9])"]
+,"0$1",""]
+,[,"(2024)(\\d{5})","$1 $2",["202"]
+,"0$1",""]
+]
+]
 ,
   "US": [,[,,"[2-9]\\d{9}","\\d{7,10}"]
 ,[,,"(?:2(?:0[1-35-9]|1[02-9]|2[4589]|3[149]|4[08]|5[1-46]|6[0279]|7[06]|8[13])|3(?:0[1-57-9]|1[02-9]|2[0135]|3[014679]|47|5[12]|6[01]|8[056])|4(?:0[124-9]|1[02-579]|2[3-5]|3[0245]|4[0235]|69|7[089]|8[04])|5(?:0[1-57-9]|1[0235-8]|[23]0|4[01]|5[19]|6[1-37]|7[013-5]|8[056])|6(?:0[1-35-9]|1[024-9]|2[036]|3[016]|4[16]|5[017]|6[0-29]|78|8[12])|7(?:0[1-46-8]|1[2-9]|2[047]|3[124]|4[07]|5[47]|6[02359]|7[02-59]|8[156])|8(?:0[1-68]|1[02-8]|28|3[0-25]|4[3578]|5[06-9]|6[02-5]|7[028])|9(?:0[1346-9]|1[02-9]|2[058]|3[167]|4[0179]|5[1246]|7[0-3589]|8[059]))[2-9]\\d{6}","\\d{7,10}",,,"2012345678"]
@@ -2755,10 +3389,11 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"US",1,"011",,,,,,,1,[[,"(\\d{3})(\\d{3})(\\d{4})","($1) $2-$3",,"",""],
-[,"(\\d{3})(\\d{4})","$1-$2",,"",""]]
-,[[,"(\\d{3})(\\d{3})(\\d{4})","$1-$2-$3",,,""],
-[,"(\\d{3})(\\d{4})","$1-$2",,,""]]
+,"US",1,"011","1",,,"1",,,1,[[,"(\\d{3})(\\d{3})(\\d{4})","($1) $2-$3",,"",""]
+,[,"(\\d{3})(\\d{4})","$1-$2",,"",""]
+]
+,[[,"(\\d{3})(\\d{3})(\\d{4})","$1-$2-$3",,,""]
+]
 ,,1]
 ,
   "UY": [,[]
@@ -2779,7 +3414,9 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"UZ",998,"8~10","8",,,"8",,,,[[,"([679]\\d)(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",,"8$1",""]]]
+,"UZ",998,"8~10","8",,,"8",,,,[[,"([679]\\d)(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",,"8$1",""]
+]
+]
 ,
   "VA": [,[,,"06\\d{8}","\\d{10}"]
 ,[,,"06698\\d{5}","\\d{10}",,,"0669812345"]
@@ -2789,7 +3426,9 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"VA",379,"00",,,,,,,,[[,"(06)(\\d{4})(\\d{4})","$1 $2 $3",,"",""]]]
+,"VA",379,"00",,,,,,,,[[,"(06)(\\d{4})(\\d{4})","$1 $2 $3",,"",""]
+]
+]
 ,
   "VC": [,[,,"(?:784|8(?:00|66|77|88)|900)[2-9]\\d{6}","\\d{7,10}"]
 ,[,,"784(?:266|3(?:6[6-9]|7\\d|8[0-24-6])|4(?:38|5[0-36-8]|8\\d|9[01])|555|638|784)\\d{4}","\\d{7,10}",,,"7842661234"]
@@ -2809,7 +3448,9 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"VE",58,"00","0",,,"1\\d{2}|0",,,,[[,"(\\d{3})(\\d{7})","$1-$2",,"0$1",""]]]
+,"VE",58,"00","0",,,"1\\d{2}|0",,,,[[,"(\\d{3})(\\d{7})","$1-$2",,"0$1",""]
+]
+]
 ,
   "VG": [,[,,"(?:284|8(?:00|66|77|88)|900)[2-9]\\d{6}","\\d{7,10}"]
 ,[,,"284(?:(?:229|4(?:46|9[45])|8(?:52|6[459]))\\d{4}|496[0-5]\\d{3})","\\d{7,10}",,,"2842291234"]
@@ -2832,21 +3473,31 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,"VI",1,"011",,,,,,,1,,,,,"340"]
 ,
   "VN": [,[,,"8\\d{5,8}|[1-79]\\d{7,9}","\\d{7,10}"]
-,[,,"(?:2(?:[025-79]|1[0189]|[348][01])|3(?:[0136-9]|[25][01])|[48]\\d|5(?:[01][01]|[2-9])|6(?:[0-46-8]|5[01])|7(?:[02-79]|[18][01]))\\d{7}|(?:80|69[3-5])\\d{5}","\\d{7,10}",,,"2101234567"]
-,[,,"(?:9[0-8]|1(?:2\\d|6[3-9]|99))\\d{7}","\\d{9,10}",,,"912345678"]
+,[,,"(?:2(?:[025-79]|1[0189]|[348][01])|3(?:[0136-9]|[25][01])|[48]\\d|5(?:[01][01]|[2-9])|6(?:[0-46-8]|5[01])|7(?:[02-79]|[18][01]))\\d{7}|69\\d{5,6}|80\\d{5}","\\d{7,10}",,,"2101234567"]
+,[,,"(?:9\\d|1(?:2[1-35-9]|6[3-9]|99))\\d{7}","\\d{9,10}",,,"912345678"]
 ,[,,"1800\\d{4,6}","\\d{8,10}",,,"1800123456"]
 ,[,,"1900\\d{4,6}","\\d{8,10}",,,"1900123456"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"VN",84,"00","0",,,"0",,,,[[,"([48])(\\d{4})(\\d{4})","$1 $2 $3","[48]","0$1",""],
-[,"([235-7]\\d)(\\d{4})(\\d{3})","$1 $2 $3","2[025-79]|3[0136-9]|5[2-9]|6[0-46-9]|7[02-79]","0$1",""],
-[,"(80)(\\d{5})","$1 $2","80","0$1",""],
-[,"(69[3-5])(\\d{5})","$1 $2","693","0$1",""],
-[,"([235-7]\\d{2})(\\d{4})(\\d{3})","$1 $2 $3","2[1348]|3[25]|5[01]|65|7[18]","0$1",""],
-[,"(9[0-8])(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4","9","0$1",""],
-[,"(1[269]\\d)(\\d{3})(\\d{4})","$1 $2 $3","1(?:[26]|99)","0$1",""],
-[,"(1[89]00)(\\d{4,6})","$1 $2","1(?:8|90)","$1",""]]]
+,"VN",84,"00","0",,,"0",,,,[[,"([48])(\\d{4})(\\d{4})","$1 $2 $3",["[48]"]
+,"0$1",""]
+,[,"([235-7]\\d)(\\d{4})(\\d{3})","$1 $2 $3",["2[025-79]|3[0136-9]|5[2-9]|6[0-46-9]|7[02-79]"]
+,"0$1",""]
+,[,"(80)(\\d{5})","$1 $2",["80"]
+,"0$1",""]
+,[,"(69\\d)(\\d{4,5})","$1 $2",["69"]
+,"0$1",""]
+,[,"([235-7]\\d{2})(\\d{4})(\\d{3})","$1 $2 $3",["2[1348]|3[25]|5[01]|65|7[18]"]
+,"0$1",""]
+,[,"(9\\d)(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",["9"]
+,"0$1",""]
+,[,"(1[269]\\d)(\\d{3})(\\d{4})","$1 $2 $3",["1(?:[26]|99)"]
+,"0$1",""]
+,[,"(1[89]00)(\\d{4,6})","$1 $2",["1(?:8|90)"]
+,"$1",""]
+]
+]
 ,
   "VU": [,[]
 ,[]
@@ -2876,9 +3527,12 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"WS",685,"0","0",,,"0",,,,[[,"(840)(\\d{4})","$1 $2","840","0$1",""],
-[,"(7[25-7])(\\d{5})","$1 $2","7[25-7]","0$1",""],
-[,"(800)(\\d{3})","$1 $2","800","0$1",""]]]
+,"WS",685,"0","0",,,"0",,,,[[,"(8[04]0)(\\d{3,4})","$1 $2",["8[04]0"]
+,"0$1",""]
+,[,"(7[25-7])(\\d{5})","$1 $2",["7[25-7]"]
+,"0$1",""]
+]
+]
 ,
   "YE": [,[,,"[1-7]\\d{6,8}","\\d{6,9}"]
 ,[,,"(?:1(?:7\\d|[2-68])|2[2-68]|3[2358]|4[2-58]|5[2-6]|6[3-58]|7[24-68])\\d{5}","\\d{6,8}",,,"1234567"]
@@ -2888,9 +3542,12 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"YE",967,"00","0",,,"0",,,,[[,"([1-7])(\\d{3})(\\d{3})","$1 $2 $3","1[2-68]|[2-6]|7[24-68]","0$1",""],
-[,"(1)(\\d{3})(\\d{4})","$1 $2 $3","17","0$1",""],
-[,"(7[137]\\d)(\\d{3})(\\d{3})","$1 $2 $3","7[137]","0$1",""]]]
+,"YE",967,"00","0",,,"0",,,,[[,"([1-7])(\\d{3})(\\d{3,4})","$1 $2 $3",["[1-6]|7[24-68]"]
+,"0$1",""]
+,[,"(7[137]\\d)(\\d{3})(\\d{3})","$1 $2 $3",["7[137]"]
+,"0$1",""]
+]
+]
 ,
   "YT": [,[,,"[268]\\d{8}","\\d{9}"]
 ,[,,"2696[0-4]\\d{4}","\\d{9}",,,"269601234"]
@@ -2910,7 +3567,9 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"87\\d{7}","\\d{9}",,,"871234567"]
-,"ZA",27,"00","0",,,"0",,,,[[,"([1-578]\\d)(\\d{3})(\\d{4})","$1 $2 $3",,"0$1",""]]]
+,"ZA",27,"00","0",,,"0",,,,[[,"([1-578]\\d)(\\d{3})(\\d{4})","$1 $2 $3",,"0$1",""]
+]
+]
 ,
   "ZM": [,[,,"[289]\\d{8}","\\d{9}"]
 ,[,,"21[1-8]\\d{6}","\\d{9}",,,"211234567"]
@@ -2920,8 +3579,12 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"ZM",260,"00","0",,,"0",,,,[[,"([29]\\d)(\\d{7})","$1 $2","[29]","0$1",""],
-[,"(800)(\\d{3})(\\d{3})","$1 $2 $3","8","0$1",""]]]
+,"ZM",260,"00","0",,,"0",,,,[[,"([29]\\d)(\\d{7})","$1 $2",["[29]"]
+,"0$1",""]
+,[,"(800)(\\d{3})(\\d{3})","$1 $2 $3",["8"]
+,"0$1",""]
+]
+]
 ,
   "ZW": [,[,,"(?:[19]1|23)\\d{3,8}|[1-69]\\d{4,8}","\\d{3,10}"]
 ,[,,"(?:1[346-8]|2(?:0[45]|2[28]|48|58[23]|[69]|7[2-46-8]|8[13-9])|3(?:08?|17?|3[78]|[45]|7[1569]|8[379])|5(?:18|483|[57-9])|6(?:37?|[459]|88)|848)\\d{3,6}|(?:2(?:27|5|7[159]|82)|39|5[346]|6[16-8])\\d{4,6}|2(?:0|70)\\d{5,6}|(?:9[2-8]|4\\d)\\d{4,7}","\\d{3,10}",,,"1312345"]
@@ -2931,12 +3594,22 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"ZW",263,"00","0",,,"0",,,,[[,"([49])(\\d{3})(\\d{2,5})","$1 $2 $3","4|9[2-9]","0$1",""],
-[,"([179]\\d)(\\d{3})(\\d{3,5})","$1 $2 $3","[19]1|7","0$1",""],
-[,"([1-356]\\d)(\\d{3,5})","$1 $2","1[3-9]|2(?:[1-469]|0[0-35-9]|[45][0-79])|3(?:0[0-79]|1[0-689]|[24-69]|3[0-69])|5(?:[02-46-9]|[15][0-69])|6(?:[0145]|[29][0-79]|3[0-689]|[68][0-69])","0$1",""],
-[,"([1-356]\\d)(\\d{3})(\\d{3})","$1 $2 $3","1[3-9]|2(?:[1-469]|0[0-35-9]|[45][0-79])|3(?:0[0-79]|1[0-689]|[24-69]|3[0-69])|5(?:[02-46-9]|[15][0-69])|6(?:[0145]|[29][0-79]|3[0-689]|[68][0-69])","0$1",""],
-[,"([2356]\\d{2})(\\d{3,5})","$1 $2","2(?:[278]|0[45]|48)|3(?:08|17|3[78]|[78])|5[15][78]|6(?:[29]8|37|[68][78])","0$1",""],
-[,"([2356]\\d{2})(\\d{3})(\\d{3})","$1 $2 $3","2(?:[278]|0[45]|48)|3(?:08|17|3[78]|[78])|5[15][78]|6(?:[29]8|37|[68][78])","0$1",""],
-[,"([25]\\d{3})(\\d{3,5})","$1 $2","258[23]|5483","0$1",""],
-[,"([25]\\d{3})(\\d{3})(\\d{3})","$1 $2 $3","258[23]|5483","0$1",""]]]
+,"ZW",263,"00","0",,,"0",,,,[[,"([49])(\\d{3})(\\d{2,5})","$1 $2 $3",["4|9[2-9]"]
+,"0$1",""]
+,[,"([179]\\d)(\\d{3})(\\d{3,5})","$1 $2 $3",["[19]1|7"]
+,"0$1",""]
+,[,"([1-356]\\d)(\\d{3,5})","$1 $2",["1[3-9]|2(?:[1-469]|0[0-35-9]|[45][0-79])|3(?:0[0-79]|1[0-689]|[24-69]|3[0-69])|5(?:[02-46-9]|[15][0-69])|6(?:[0145]|[29][0-79]|3[0-689]|[68][0-69])"]
+,"0$1",""]
+,[,"([1-356]\\d)(\\d{3})(\\d{3})","$1 $2 $3",["1[3-9]|2(?:[1-469]|0[0-35-9]|[45][0-79])|3(?:0[0-79]|1[0-689]|[24-69]|3[0-69])|5(?:[02-46-9]|[15][0-69])|6(?:[0145]|[29][0-79]|3[0-689]|[68][0-69])"]
+,"0$1",""]
+,[,"([2356]\\d{2})(\\d{3,5})","$1 $2",["2(?:[278]|0[45]|48)|3(?:08|17|3[78]|[78])|5[15][78]|6(?:[29]8|37|[68][78])"]
+,"0$1",""]
+,[,"([2356]\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["2(?:[278]|0[45]|48)|3(?:08|17|3[78]|[78])|5[15][78]|6(?:[29]8|37|[68][78])"]
+,"0$1",""]
+,[,"([25]\\d{3})(\\d{3,5})","$1 $2",["(?:25|54)8","258[23]|5483"]
+,"0$1",""]
+,[,"([25]\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["(?:25|54)8","258[23]|5483"]
+,"0$1",""]
+]
+]
 };
index 08cc9f5..e7bad07 100644 (file)
@@ -14,7 +14,7 @@
 
 /**
  * @fileoverview Generated metadata for file
- * PhoneNumberMetaDataForTesting.xml
+ * java/resources/com/google/i18n/phonenumbers/test/PhoneNumberMetaDataForTesting.xml
  * @author Nikolaos Trogkanis
  */
 
@@ -38,7 +38,9 @@ i18n.phonenumbers.metadata.countryCodeToRegionCodeMap = {
   61: ['AU'],
   64: ['NZ'],
   65: ['SG'],
+  81: ['JP'],
   82: ['KR'],
+  244: ['AO'],
   262: ['RE','YT'],
   376: ['AD']
 };
@@ -58,6 +60,18 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,"AD",376,"00",,,,,,,1]
 ,
+  "AO": [,[,,"[29]\\d{8}","\\d{9}"]
+,[,,"2\\d(?:[26-9]\\d|\\d[26-9])\\d{5}","\\d{9}",,,"222123456"]
+,[,,"9[1-3]\\d{7}","\\d{9}",,,"923123456"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"AO",244,"00",,,,,,,,[[,"(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",,"",""]
+]
+]
+,
   "AR": [,[,,"[1-3689]\\d{9,10}","\\d{6,11}"]
 ,[,,"[1-3]\\d{9}","\\d{6,10}"]
 ,[,,"9\\d{10}|[1-3]\\d{9}","\\d{10,11}"]
@@ -66,16 +80,29 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"AR",54,"00","0",,,"0(?:(11|343|3715)15)?","9$1",,,[[,"(\\d{2})(\\d{4})(\\d{4})","$1 $2-$3","11","0$1",""],
-[,"(\\d{4})(\\d{2})(\\d{4})","$1 $2-$3","1[02-9]|[23]","0$1",""],
-[,"9(11)(\\d{4})(\\d{4})","$1 15 $2-$3","911","0$1",""],
-[,"9(\\d{4})(\\d{2})(\\d{4})","$1 $2-$3","9(?:1[02-9]|[23])","0$1","$1 $CC"],
-[,"(\\d{3})(\\d{3})(\\d{4})","$1-$2-$3","[68]","0$1",""]]
-,[[,"(\\d{2})(\\d{4})(\\d{4})","$1 $2-$3","11",,""],
-[,"(\\d{4})(\\d{2})(\\d{4})","$1 $2-$3","1[02-9]|[23]",,""],
-[,"(9)(11)(\\d{4})(\\d{4})","$1 $2 $3 $4","911",,""],
-[,"(9)(\\d{4})(\\d{2})(\\d{4})","$1 $2 $3 $4","9(?:1[02-9]|[23])",,""],
-[,"(\\d{3})(\\d{3})(\\d{4})","$1-$2-$3","[68]",,""]]]
+,"AR",54,"00","0",,,"0(?:(11|343|3715)15)?","9$1",,,[[,"(\\d{2})(\\d{4})(\\d{4})","$1 $2-$3",["11"]
+,"0$1",""]
+,[,"(\\d{4})(\\d{2})(\\d{4})","$1 $2-$3",["1[02-9]|[23]"]
+,"0$1",""]
+,[,"9(11)(\\d{4})(\\d{4})","$1 15 $2-$3",["911"]
+,"0$1",""]
+,[,"9(\\d{4})(\\d{2})(\\d{4})","$1 $2-$3",["9(?:1[02-9]|[23])"]
+,"0$1","$1 $CC"]
+,[,"(\\d{3})(\\d{3})(\\d{4})","$1-$2-$3",["[68]"]
+,"0$1",""]
+]
+,[[,"(\\d{2})(\\d{4})(\\d{4})","$1 $2-$3",["11"]
+,,""]
+,[,"(\\d{4})(\\d{2})(\\d{4})","$1 $2-$3",["1[02-9]|[23]"]
+,,""]
+,[,"(9)(11)(\\d{4})(\\d{4})","$1 $2 $3 $4",["911"]
+,,""]
+,[,"(9)(\\d{4})(\\d{2})(\\d{4})","$1 $2 $3 $4",["9(?:1[02-9]|[23])"]
+,,""]
+,[,"(\\d{3})(\\d{3})(\\d{4})","$1-$2-$3",["[68]"]
+,,""]
+]
+]
 ,
   "AU": [,[,,"[1-578]\\d{4,14}","\\d{5,15}"]
 ,[,,"[2378]\\d{8}","\\d{9}"]
@@ -85,8 +112,12 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"AU",61,"001[12]","0",,,"0",,"0011",,[[,"(\\d{4})(\\d{3})(\\d{3})","$1 $2 $3","1","$1",""],
-[,"(\\d{1})(\\d{4})(\\d{4})","$1 $2 $3","[2-478]","0$1",""]]]
+,"AU",61,"001[12]","0",,,"0",,"0011",,[[,"(\\d{4})(\\d{3})(\\d{3})","$1 $2 $3",["1"]
+,"$1",""]
+,[,"(\\d{1})(\\d{4})(\\d{4})","$1 $2 $3",["[2-478]"]
+,"0$1",""]
+]
+]
 ,
   "BS": [,[,,"(242|8(00|66|77|88)|900)\\d{7}","\\d{7,10}"]
 ,[,,"242(?:3(?:02|[236][1-9]|4[0-24-9]|5[0-68]|7[3-57]|9[2-5])|4(?:2[237]|51|64|77)|502|636|702)\\d{4}","\\d{7,10}"]
@@ -96,7 +127,7 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"BS",1,"011",,,,,,,,[[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",,"",""]]]
+,"BS",1,"011"]
 ,
   "DE": [,[,,"\\d{4,14}","\\d{2,14}"]
 ,[,,"(?:[24-6]\\d{2}|3[03-9]\\d|[789](?:[1-9]\\d|0[2-9]))\\d{3,8}","\\d{2,14}",,,"30123456"]
@@ -106,12 +137,18 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"DE",49,"00","0",,,"0",,,,[[,"(\\d{3})(\\d{3,8})","$1 $2","2|3[3-9]|906|[4-9][1-9]1","0$1",""],
-[,"(\\d{2})(\\d{4,9})","$1 $2","[34]0|[68]9","0$1",""],
-[,"([4-9]\\d{3})(\\d{2,7})","$1 $2","[4-9]","0$1",""],
-[,"(\\d{3})(\\d{1})(\\d{6})","$1 $2 $3","800","0$1",""],
-[,"(\\d{3})(\\d{3})(d{4})","$1 $2 $3","900[135]","0$1",""],
-[,"(\\d{3})(\\d{4})(\\d{4})","$1 $2 $3","9009","0$1",""]]]
+,"DE",49,"00","0",,,"0",,,,[[,"(\\d{3})(\\d{3,8})","$1 $2",["2|3[3-9]|906|[4-9][1-9]1"]
+,"0$1",""]
+,[,"(\\d{2})(\\d{4,9})","$1 $2",["[34]0|[68]9"]
+,"0$1",""]
+,[,"([4-9]\\d{3})(\\d{2,7})","$1 $2",["[4-9]","[4-6]|[7-9](?:\\d[1-9]|[1-9]\\d)"]
+,"0$1",""]
+,[,"(\\d{3})(\\d{1})(\\d{6})","$1 $2 $3",["800"]
+,"0$1",""]
+,[,"(\\d{3})(\\d{3,4})(\\d{4})","$1 $2 $3",["900"]
+,"0$1",""]
+]
+]
 ,
   "GB": [,[,,"\\d{10}","\\d{6,10}"]
 ,[,,"[1-6]\\d{9}","\\d{6,10}"]
@@ -121,10 +158,16 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"8(?:4[3-5]|7[0-2])\\d{7}","\\d{10}"]
 ,[,,"70\\d{8}","\\d{10}"]
 ,[,,"56\\d{8}","\\d{10}"]
-,"GB",44,"00","0",,,"0",,,,[[,"(\\d{2})(\\d{4})(\\d{4})","$1 $2 $3","[1-59]|[78]0","(0$1)",""],
-[,"(\\d)(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3 $4","6","(0$1)",""],
-[,"(\\d{4})(\\d{3})(\\d{3})","$1 $2 $3","7[1-57-9]","(0$1)",""],
-[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3","8[47]","(0$1)",""]]]
+,"GB",44,"00","0",,,"0",,,,[[,"(\\d{2})(\\d{4})(\\d{4})","$1 $2 $3",["[1-59]|[78]0"]
+,"(0$1)",""]
+,[,"(\\d)(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3 $4",["6"]
+,"(0$1)",""]
+,[,"(\\d{4})(\\d{3})(\\d{3})","$1 $2 $3",["7[1-57-9]"]
+,"(0$1)",""]
+,[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["8[47]"]
+,"(0$1)",""]
+]
+]
 ,
   "IT": [,[,,"[0389]\\d{5,10}","\\d{6,11}"]
 ,[,,"0\\d{9,10}","\\d{10,11}"]
@@ -134,31 +177,70 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"IT",39,"00",,,,,,,,[[,"(\\d{2})(\\d{4})(\\d{4})","$1 $2 $3","0[26]","",""],
-[,"(\\d{3})(\\d{4})(\\d{3,4})","$1 $2 $3","0[13-57-9]","",""],
-[,"(\\d{3})(\\d{3})(\\d{3,4})","$1 $2 $3","3","",""],
-[,"(\\d{3})(\\d{3,6})","$1 $2","8","",""]]]
+,"IT",39,"00",,,,,,,,[[,"(\\d{2})(\\d{4})(\\d{4})","$1 $2 $3",["0[26]"]
+,"",""]
+,[,"(\\d{3})(\\d{4})(\\d{3,4})","$1 $2 $3",["0[13-57-9]"]
+,"",""]
+,[,"(\\d{3})(\\d{3})(\\d{3,4})","$1 $2 $3",["3"]
+,"",""]
+,[,"(\\d{3})(\\d{3,6})","$1 $2",["8"]
+,"",""]
+]
+]
 ,
-  "KR": [,[,,"[1-79]\\d{3,9}|8\\d{8}","\\d{4,10}"]
-,[,,"[1-79]\\d{3,9}|8\\d{8}","\\d{4,10}"]
-,[,,"[1-79]\\d{3,9}|8\\d{8}","\\d{4,10}"]
+  "JP": [,[]
+,[]
+,[]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"KR",82,"00(?:[124-68]|[37]\\d{2})","0",,,"0(?:8[1-46-8]|85\\d{2})?",,,1,[[,"(\\d{2})(\\d{4})(\\d{4})","$1-$2-$3","1(?:0|1[19]|[69]9|5(?:44|59|8))|[57]0","0$1",""],
-[,"(\\d{2})(\\d{3})(\\d{4})","$1-$2-$3","1(?:[169][2-8]|[78]|5(?:[1-3]|4[56]))|[68]0|[3-9][1-9][2-9]","0$1",""],
-[,"(\\d{3})(\\d)(\\d{4})","$1-$2-$3","1312","0$1",""],
-[,"(\\d{3})(\\d{2})(\\d{4})","$1-$2-$3","131[13-9]","0$1",""],
-[,"(\\d{3})(\\d{3})(\\d{4})","$1-$2-$3","13[2-9]","0$1",""],
-[,"(\\d{2})(\\d{2})(\\d{3})(\\d{4})","$1-$2-$3-$4","30","0$1",""],
-[,"(\\d)(\\d{4})(\\d{4})","$1-$2-$3","2(?:[26]|3(?:01|1[45]|2[17-9]|39|4|6[67]|7[078]))","0$1",""],
-[,"(\\d)(\\d{3})(\\d{4})","$1-$2-$3","2(?:3(?:0[02-9]|1[0-36-9]|2[02-6]|3[0-8]|6[0-589]|7[1-69]|[589])|[457-9])","0$1",""],
-[,"(\\d)(\\d{3})","$1-$2","21(?:[0-247-9]|3[124]|6[1269])","0$1",""],
-[,"(\\d)(\\d{4})","$1-$2","21(?:3[035-9]|6[03-578])","0$1",""],
-[,"(\\d{2})(\\d{3})","$1-$2","[3-9][1-9]1(?:[0-247-9]|3[124]|6[1269])","0$1",""],
-[,"(\\d{2})(\\d{4})","$1-$2","[3-9][1-9]1(?:3[035-9]|6[03-578])","0$1",""]]]
+,"JP",81,"010","0",,,"0",,,1,[[,"(\\d{2})(\\d{4})(\\d{4})","$1 $2 $3",["[57-9]0"]
+,"0$1",""]
+,[,"(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["222|333","(?:222|333)1","(?:222|333)11"]
+,"0$1",""]
+,[,"(\\d{4})(\\d)(\\d{4})","$1 $2 $3",["222|333","2221|3332","22212|3332","222120|3332"]
+,"0$1",""]
+,[,"(\\d{3})(\\d{2})(\\d{4})","$1 $2 $3",["[23]"]
+,"0$1",""]
+]
+]
+,
+  "KR": [,[,,"[1-79]\\d{3,9}|8\\d{8}","\\d{4,10}"]
+,[,,"(?:2|[34][1-3]|5[1-5]|6[1-4])(?:1\\d{2,3}|[2-9]\\d{6,7})","\\d{4,10}",,,"22123456"]
+,[,,"1[0-25-9]\\d{7,8}","\\d{9,10}",,,"1023456789"]
+,[,,"80\\d{7}","\\d{9}",,,"801234567"]
+,[,,"60[2-9]\\d{6}","\\d{9}",,,"602345678"]
+,[,,"NA","NA"]
+,[,,"50\\d{8}","\\d{10}",,,"5012345678"]
+,[,,"70\\d{8}","\\d{10}",,,"7012345678"]
+,"KR",82,"00(?:[124-68]|[37]\\d{2})","0",,,"0(?:8[1-46-8]|85\\d{2})?",,,,[[,"(\\d{2})(\\d{4})(\\d{4})","$1-$2-$3",["1(?:0|1[19]|[69]9|5[458])|[57]0","1(?:0|1[19]|[69]9|5(?:44|59|8))|[57]0"]
+,"0$1",""]
+,[,"(\\d{2})(\\d{3})(\\d{4})","$1-$2-$3",["1(?:[169][2-8]|[78]|5[1-4])|[68]0|[3-9][1-9][2-9]","1(?:[169][2-8]|[78]|5(?:[1-3]|4[56]))|[68]0|[3-9][1-9][2-9]"]
+,"0$1",""]
+,[,"(\\d{3})(\\d)(\\d{4})","$1-$2-$3",["131","1312"]
+,"0$1",""]
+,[,"(\\d{3})(\\d{2})(\\d{4})","$1-$2-$3",["131","131[13-9]"]
+,"0$1",""]
+,[,"(\\d{3})(\\d{3})(\\d{4})","$1-$2-$3",["13[2-9]"]
+,"0$1",""]
+,[,"(\\d{2})(\\d{2})(\\d{3})(\\d{4})","$1-$2-$3-$4",["30"]
+,"0$1",""]
+,[,"(\\d)(\\d{4})(\\d{4})","$1-$2-$3",["2(?:[26]|3[0-467])","2(?:[26]|3(?:01|1[45]|2[17-9]|39|4|6[67]|7[078]))"]
+,"0$1",""]
+,[,"(\\d)(\\d{3})(\\d{4})","$1-$2-$3",["2(?:3[0-35-9]|[457-9])","2(?:3(?:0[02-9]|1[0-36-9]|2[02-6]|3[0-8]|6[0-589]|7[1-69]|[589])|[457-9])"]
+,"0$1",""]
+,[,"(\\d)(\\d{3})","$1-$2",["21[0-46-9]","21(?:[0-247-9]|3[124]|6[1269])"]
+,"0$1",""]
+,[,"(\\d)(\\d{4})","$1-$2",["21[36]","21(?:3[035-9]|6[03-578])"]
+,"0$1",""]
+,[,"(\\d{2})(\\d{3})","$1-$2",["[3-9][1-9]1","[3-9][1-9]1(?:[0-46-9])","[3-9][1-9]1(?:[0-247-9]|3[124]|6[1269])"]
+,"0$1",""]
+,[,"(\\d{2})(\\d{4})","$1-$2",["[3-9][1-9]1","[3-9][1-9]1[36]","[3-9][1-9]1(?:3[035-9]|6[03-578])"]
+,"0$1",""]
+]
+]
 ,
   "MX": [,[,,"[1-9]\\d{9,10}","\\d{7,11}"]
 ,[,,"[2-9]\\d{9}","\\d{7,10}"]
@@ -168,16 +250,29 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"MX",52,"00","01",,,"01|04[45](\\d{10})","1$1",,,[[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3","[89]00","",""],
-[,"(\\d{2})(\\d{4})(\\d{4})","$1 $2 $3","33|55|81","",""],
-[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3","[2467]|3[0-24-9]|5[0-46-9]|8[2-9]|9[1-9]","",""],
-[,"1(\\d{2})(\\d{4})(\\d{4})","045 $1 $2 $3","1(?:33|55|81)","",""],
-[,"1(\\d{3})(\\d{3})(\\d{4})","045 $1 $2 $3","1(?:[124579]|3[0-24-9]|5[0-46-9]|8[02-9])","",""]]
-,[[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3","[89]00",,""],
-[,"(\\d{2})(\\d{4})(\\d{4})","$1 $2 $3","33|55|81",,""],
-[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3","[2467]|3[0-24-9]|5[0-46-9]|8[2-9]|9[1-9]",,""],
-[,"(1)(\\d{2})(\\d{4})(\\d{4})","$1 $2 $3 $4","1(?:33|55|81)",,""],
-[,"(1)(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3 $4","1(?:[124579]|3[0-24-9]|5[0-46-9]|8[02-9])",,""]]]
+,"MX",52,"00","01",,,"01|04[45](\\d{10})","1$1",,,[[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["[89]00"]
+,"",""]
+,[,"(\\d{2})(\\d{4})(\\d{4})","$1 $2 $3",["33|55|81"]
+,"",""]
+,[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["[2467]|3[0-24-9]|5[0-46-9]|8[2-9]|9[1-9]"]
+,"",""]
+,[,"1(\\d{2})(\\d{4})(\\d{4})","045 $1 $2 $3",["1(?:33|55|81)"]
+,"",""]
+,[,"1(\\d{3})(\\d{3})(\\d{4})","045 $1 $2 $3",["1(?:[124579]|3[0-24-9]|5[0-46-9]|8[02-9])"]
+,"",""]
+]
+,[[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["[89]00"]
+,,""]
+,[,"(\\d{2})(\\d{4})(\\d{4})","$1 $2 $3",["33|55|81"]
+,,""]
+,[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["[2467]|3[0-24-9]|5[0-46-9]|8[2-9]|9[1-9]"]
+,,""]
+,[,"(1)(\\d{2})(\\d{4})(\\d{4})","$1 $2 $3 $4",["1(?:33|55|81)"]
+,,""]
+,[,"(1)(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3 $4",["1(?:[124579]|3[0-24-9]|5[0-46-9]|8[02-9])"]
+,,""]
+]
+]
 ,
   "NZ": [,[,,"[2-9]\\d{7,9}","\\d{7,10}"]
 ,[,,"24099\\d{3}|(?:3[2-79]|[479][2-689]|6[235-9])\\d{6}","\\d{7,8}"]
@@ -187,9 +282,14 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"NZ",64,"00","0",,,"0",,,,[[,"(\\d)(\\d{3})(\\d{4})","$1-$2 $3","24|[34679]","0$1",""],
-[,"(\\d)(\\d{3})(\\d{3,5})","$1-$2 $3","2[179]","0$1",""],
-[,"(\\d{3})(\\d{3})(\\d{3,4})","$1 $2 $3","[89]","0$1",""]]]
+,"NZ",64,"00","0",,,"0",,,,[[,"(\\d)(\\d{3})(\\d{4})","$1-$2 $3",["24|[34679]"]
+,"0$1",""]
+,[,"(\\d)(\\d{3})(\\d{3,5})","$1-$2 $3",["2[179]"]
+,"0$1",""]
+,[,"(\\d{3})(\\d{3})(\\d{3,4})","$1 $2 $3",["[89]"]
+,"0$1",""]
+]
+]
 ,
   "PL": [,[,,"[1-9]\\d{8}","\\d{9}"]
 ,[,,"[1-9]\\d{8}","\\d{9}"]
@@ -199,7 +299,9 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"PL",48,"0~0","0",,,"0",,,,[[,"(\\d{2})(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",,"0$1",""]]]
+,"PL",48,"0~0","0",,,"0",,,,[[,"(\\d{2})(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",,"0$1",""]
+]
+]
 ,
   "RE": [,[,,"[268]\\d{8}","\\d{9}"]
 ,[,,"262\\d{6}","\\d{9}",,,"262161234"]
@@ -209,7 +311,8 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"RE",262,"00","0",,,"0",,,,[[,"([268]\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",,"0$1",""]]
+,"RE",262,"00","0",,,"0",,,,[[,"([268]\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",,"0$1",""]
+]
 ,,,,"262|6(?:9[23]|47)|8"]
 ,
   "SG": [,[,,"[13689]\\d{7,10}","\\d{8,11}"]
@@ -220,9 +323,14 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"SG",65,"0[0-3][0-9]",,,,,,,,[[,"(\\d{4})(\\d{4})","$1 $2","[369]|8[1-9]","",""],
-[,"(\\d{4})(\\d{3})(\\d{4})","$1 $2 $3","1[89]","",""],
-[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3","800","",""]]]
+,"SG",65,"0[0-3][0-9]",,,,,,,,[[,"(\\d{4})(\\d{4})","$1 $2",["[369]|8[1-9]"]
+,"",""]
+,[,"(\\d{4})(\\d{3})(\\d{4})","$1 $2 $3",["1[89]"]
+,"",""]
+,[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["800"]
+,"",""]
+]
+]
 ,
   "US": [,[,,"[13-9]\\d{9}|2[0-35-9]\\d{8}","\\d{7,10}",,,"1234567890"]
 ,[,,"[13-9]\\d{9}|2[0-35-9]\\d{8}","\\d{7,10}",,,"1234567890"]
@@ -232,9 +340,12 @@ i18n.phonenumbers.metadata.countryToMetadata = {
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
 ,[,,"NA","NA"]
-,"US",1,"011",," extn. ",,,,,1,[[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",,"",""],
-[,"(\\d{3})(\\d{4})","$1 $2",,"",""]]
-,,,1]
+,"US",1,"011","1"," extn. ",,"1",,,1,[[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",,"",""]
+,[,"(\\d{3})(\\d{4})","$1 $2",,"",""]
+]
+,[[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",,,""]
+]
+,,1]
 ,
   "YT": [,[,,"[268]\\d{8}","\\d{9}"]
 ,[,,"2696[0-4]\\d{4}","\\d{9}",,,"269601234"]
diff --git a/javascript/i18n/phonenumbers/metadatalite.js b/javascript/i18n/phonenumbers/metadatalite.js
new file mode 100644 (file)
index 0000000..c5234de
--- /dev/null
@@ -0,0 +1,3615 @@
+// Copyright (C) 2010 Google Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS-IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+/**
+ * @fileoverview Generated metadata for file
+ * java/resources/com/google/i18n/phonenumbers/src/PhoneNumberMetaData.xml
+ * @author Nikolaos Trogkanis
+ */
+
+goog.provide('i18n.phonenumbers.metadata');
+
+/**
+ * A mapping from a country code to the region codes which denote the
+ * country/region represented by that country code. In the case of multiple
+ * countries sharing a calling code, such as the NANPA countries, the one
+ * indicated with 'isMainCountryForCode' in the metadata should be first.
+ * @type {Object.<number, Array.<string>>}
+ */
+i18n.phonenumbers.metadata.countryCodeToRegionCodeMap = {
+  1: ['US','AG','AI','AS','BB','BM','BS','CA','DM','DO','GD','GU','JM','KN','KY','LC','MP','MS','PR','TC','TT','VC','VG','VI'],
+  7: ['RU','KZ'],
+  20: ['EG'],
+  27: ['ZA'],
+  30: ['GR'],
+  31: ['NL'],
+  32: ['BE'],
+  33: ['FR'],
+  34: ['ES'],
+  36: ['HU'],
+  39: ['IT'],
+  40: ['RO'],
+  41: ['CH'],
+  43: ['AT'],
+  44: ['GB','GG','IM','JE'],
+  45: ['DK'],
+  46: ['SE'],
+  47: ['NO'],
+  48: ['PL'],
+  49: ['DE'],
+  51: ['PE'],
+  52: ['MX'],
+  53: ['CU'],
+  54: ['AR'],
+  55: ['BR'],
+  56: ['CL'],
+  57: ['CO'],
+  58: ['VE'],
+  60: ['MY'],
+  61: ['AU'],
+  62: ['ID'],
+  63: ['PH'],
+  64: ['NZ'],
+  65: ['SG'],
+  66: ['TH'],
+  81: ['JP'],
+  82: ['KR'],
+  84: ['VN'],
+  86: ['CN'],
+  90: ['TR'],
+  91: ['IN'],
+  92: ['PK'],
+  93: ['AF'],
+  94: ['LK'],
+  95: ['MM'],
+  98: ['IR'],
+  212: ['MA'],
+  213: ['DZ'],
+  216: ['TN'],
+  218: ['LY'],
+  220: ['GM'],
+  221: ['SN'],
+  222: ['MR'],
+  223: ['ML'],
+  224: ['GN'],
+  225: ['CI'],
+  226: ['BF'],
+  227: ['NE'],
+  228: ['TG'],
+  229: ['BJ'],
+  230: ['MU'],
+  231: ['LR'],
+  232: ['SL'],
+  233: ['GH'],
+  234: ['NG'],
+  235: ['TD'],
+  236: ['CF'],
+  237: ['CM'],
+  238: ['CV'],
+  239: ['ST'],
+  240: ['GQ'],
+  241: ['GA'],
+  242: ['CG'],
+  243: ['CD'],
+  244: ['AO'],
+  245: ['GW'],
+  246: ['IO'],
+  248: ['SC'],
+  249: ['SD'],
+  250: ['RW'],
+  251: ['ET'],
+  252: ['SO'],
+  253: ['DJ'],
+  254: ['KE'],
+  255: ['TZ'],
+  256: ['UG'],
+  257: ['BI'],
+  258: ['MZ'],
+  260: ['ZM'],
+  261: ['MG'],
+  262: ['RE','TF','YT'],
+  263: ['ZW'],
+  264: ['NA'],
+  265: ['MW'],
+  266: ['LS'],
+  267: ['BW'],
+  268: ['SZ'],
+  269: ['KM'],
+  290: ['SH'],
+  291: ['ER'],
+  297: ['AW'],
+  298: ['FO'],
+  299: ['GL'],
+  350: ['GI'],
+  351: ['PT'],
+  352: ['LU'],
+  353: ['IE'],
+  354: ['IS'],
+  355: ['AL'],
+  356: ['MT'],
+  357: ['CY'],
+  358: ['FI'],
+  359: ['BG'],
+  370: ['LT'],
+  371: ['LV'],
+  372: ['EE'],
+  373: ['MD'],
+  374: ['AM'],
+  375: ['BY'],
+  376: ['AD'],
+  377: ['MC'],
+  378: ['SM'],
+  379: ['VA'],
+  380: ['UA'],
+  381: ['RS'],
+  382: ['ME'],
+  385: ['HR'],
+  386: ['SI'],
+  387: ['BA'],
+  389: ['MK'],
+  420: ['CZ'],
+  421: ['SK'],
+  423: ['LI'],
+  500: ['FK'],
+  501: ['BZ'],
+  502: ['GT'],
+  503: ['SV'],
+  504: ['HN'],
+  505: ['NI'],
+  506: ['CR'],
+  507: ['PA'],
+  508: ['PM'],
+  509: ['HT'],
+  590: ['GP','BL','MF'],
+  591: ['BO'],
+  592: ['GY'],
+  593: ['EC'],
+  594: ['GF'],
+  595: ['PY'],
+  596: ['MQ'],
+  597: ['SR'],
+  598: ['UY'],
+  599: ['AN'],
+  670: ['TL'],
+  672: ['NF'],
+  673: ['BN'],
+  674: ['NR'],
+  675: ['PG'],
+  676: ['TO'],
+  677: ['SB'],
+  678: ['VU'],
+  679: ['FJ'],
+  680: ['PW'],
+  681: ['WF'],
+  682: ['CK'],
+  683: ['NU'],
+  685: ['WS'],
+  686: ['KI'],
+  687: ['NC'],
+  688: ['TV'],
+  689: ['PF'],
+  690: ['TK'],
+  691: ['FM'],
+  692: ['MH'],
+  850: ['KP'],
+  852: ['HK'],
+  853: ['MO'],
+  855: ['KH'],
+  856: ['LA'],
+  880: ['BD'],
+  886: ['TW'],
+  960: ['MV'],
+  961: ['LB'],
+  962: ['JO'],
+  963: ['SY'],
+  964: ['IQ'],
+  965: ['KW'],
+  966: ['SA'],
+  967: ['YE'],
+  968: ['OM'],
+  970: ['PS'],
+  971: ['AE'],
+  972: ['IL'],
+  973: ['BH'],
+  974: ['QA'],
+  975: ['BT'],
+  976: ['MN'],
+  977: ['NP'],
+  992: ['TJ'],
+  993: ['TM'],
+  994: ['AZ'],
+  995: ['GE'],
+  996: ['KG'],
+  998: ['UZ']
+};
+
+/**
+ * A mapping from a region code to the PhoneMetadata for that region.
+ * @type {Object.<string, Array>}
+ */
+i18n.phonenumbers.metadata.countryToMetadata = {
+  "AD": [,[,,"(?:[346-9]|180)\\d{5}","\\d{6,8}"]
+,[,,"[78]\\d{5}","\\d{6}"]
+,[,,"[346]\\d{5}","\\d{6}"]
+,[,,"180[02]\\d{4}","\\d{8}"]
+,[,,"9\\d{5}","\\d{6}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"AD",376,"00",,,,,,,,[[,"(\\d{3})(\\d{3})","$1 $2",["[346-9]"]
+,"",""]
+,[,"(180[02])(\\d{4})","$1 $2",["1"]
+,"",""]
+]
+]
+,
+  "AE": [,[,,"[2-79]\\d{7,8}|800\\d{2,9}","\\d{5,12}"]
+,[,,"(?:[2-4679][2-8]\\d|600[25])\\d{5}","\\d{7,9}"]
+,[,,"5[056]\\d{7}","\\d{9}"]
+,[,,"400\\d{6}|800\\d{2,9}","\\d{5,12}"]
+,[,,"900[02]\\d{5}","\\d{9}"]
+,[,,"700[05]\\d{5}","\\d{9}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"AE",971,"00","0",,,"0",,,,[[,"([2-4679])(\\d{3})(\\d{4})","$1 $2 $3",["[2-4679][2-8]"]
+,"0$1",""]
+,[,"(5[056])(\\d{3})(\\d{4})","$1 $2 $3",["5"]
+,"0$1",""]
+,[,"([4679]00)(\\d)(\\d{5})","$1 $2 $3",["[4679]0"]
+,"0$1",""]
+,[,"(800)(\\d{2})(\\d{0,7})","$1 $2 $3",["8"]
+,"0$1",""]
+]
+]
+,
+  "AF": [,[,,"[2-7]\\d{8}","\\d{9}"]
+,[,,"(?:[25][0-8]|[34][0-4]|6[0-5])[2-9]\\d{6}","\\d{9}"]
+,[,,"7[057-9]\\d{7}","\\d{9}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"AF",93,"00","0",,,"0",,,,[[,"([2-7]\\d)(\\d{3})(\\d{4})","$1 $2 $3",,"0$1",""]
+]
+]
+,
+  "AG": [,[,,"[289]\\d{9}","\\d{7,10}"]
+,[,,"268(?:4(?:6[0-3]|84)|56[0-2])\\d{4}","\\d{7,10}"]
+,[,,"268(?:464|7(?:2[0-9]|64|7[0-5]|8[358]))\\d{4}","\\d{10}"]
+,[,,"8(?:00|66|77|88)[2-9]\\d{6}","\\d{10}"]
+,[,,"900[2-9]\\d{6}","\\d{10}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"26848[01]\\d{4}","\\d{10}"]
+,"AG",1,"011",,,,,,,,,,,,"268"]
+,
+  "AI": [,[,,"[289]\\d{9}","\\d{7,10}"]
+,[,,"2644(?:6[12]|9[78])\\d{4}","\\d{7,10}"]
+,[,,"264(?:235|476|5(?:3[6-9]|8[1-4])|7(?:29|72))\\d{4}","\\d{10}"]
+,[,,"8(?:00|66|77|88)[2-9]\\d{6}","\\d{10}"]
+,[,,"900[2-9]\\d{6}","\\d{10}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"AI",1,"011",,,,,,,,,,,,"264"]
+,
+  "AL": [,[,,"[2-57]\\d{7}|6\\d{8}|8\\d{5,7}|9\\d{5}","\\d{5,9}"]
+,[,,"(?:2(?:[168][1-9]|[247]\\d|9[1-7])|3(?:1[1-3]|[2-6]\\d|[79][1-8]|8[1-9])|4\\d{2}|5(?:1[1-4]|[2-578]\\d|6[1-5]|9[1-7])|8(?:[19][1-5]|[2-6]\\d|[78][1-7]))\\d{5}","\\d{5,8}"]
+,[,,"6[6-9]\\d{7}","\\d{9}"]
+,[,,"800\\d{4}","\\d{7}"]
+,[,,"900\\d{3}","\\d{6}"]
+,[,,"808\\d{3}","\\d{6}"]
+,[,,"700\\d{5}","\\d{8}"]
+,[,,"NA","NA"]
+,"AL",355,"00","0",,,"0",,,,[[,"(4)(\\d{3})(\\d{4})","$1 $2 $3",["4[0-6]"]
+,"0$1",""]
+,[,"(6[6-9])(\\d{3})(\\d{4})","$1 $2 $3",["6"]
+,"0$1",""]
+,[,"(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["[2358][2-5]|4[7-9]"]
+,"0$1",""]
+,[,"(\\d{3})(\\d{3,5})","$1 $2",["[235][16-9]|8[016-9]|[79]"]
+,"0$1",""]
+]
+]
+,
+  "AM": [,[]
+,[]
+,[]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"AM",374,"00","8",,,"8",,,1]
+,
+  "AN": [,[]
+,[]
+,[]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"AN",599,"00",,,,,,,1]
+,
+  "AO": [,[,,"[29]\\d{8}","\\d{9}"]
+,[,,"2\\d(?:[26-9]\\d|\\d[26-9])\\d{5}","\\d{9}"]
+,[,,"9[1-3]\\d{7}","\\d{9}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"AO",244,"00",,,,,,,,[[,"(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",,"",""]
+]
+]
+,
+  "AR": [,[,,"[1-9]\\d{9,11}","\\d{6,12}"]
+,[,,"[1-9]\\d{9}","\\d{6,10}"]
+,[,,"9(?:11[2-9]\\d{7}|(?:2(?:2[013]|37|6[14]|9[179])|3(?:4[1235]|5[138]|8[1578]))[2-9]\\d{6}|\\d{4}[2-9]\\d{5})","\\d{6,12}"]
+,[,,"80\\d{8}","\\d{10}"]
+,[,,"6(?:0\\d|10)\\d{7}","\\d{10}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"AR",54,"00","0",,,"0(?:(11|2(?:2(?:02?|[13]|2[13-79]|4[1-6]|5[2457]|6[124-8]|7[1-4]|8[13-6]|9[1-367])|3(?:[06]2|1[467]|2[02-6]|3[13-8]|[49][2-6]|5[2-8]|7)|47[3-578]|6(?:1|2[2-7]|4[6-8]?|5[125-8])|9(?:0[1-3]|[19]|2\\d|3[1-6]|4[0-24-68]|5[2-4]|6[2-6]|72?|8[23]?))|3(?:3(?:2[79]|8[2578])|4(?:0[124-9]|[12]|3[5-8]?|4[24-7]|5[4-68]?|6\\d|7[126]|8[237-9]|9[1-36-8])|5(?:1|2[1245]|3[2-4]?|4[1-46-9]|6[2-4]|7[1-6]|8[2-5]?)|7(?:1[15-8]|2[125]|3[1245]|4[13]|5[124-8]|7[2-57]|8[1-36])|8(?:1|2[125-7]|3[23578]|4[13-6]|5[4-8]?|6[1-357-9]|7[5-8]?|8[4-7]?|9[124])))15)?","9$1",,,[[,"([68]\\d{2})(\\d{3})(\\d{4})","$1-$2-$3",["[68]"]
+,"0$1",""]
+,[,"9(11)(\\d{4})(\\d{4})","$1 15-$2-$3",["91"]
+,"0$1",""]
+,[,"9(\\d{3})(\\d{3})(\\d{4})","$1 15-$2-$3",["9(?:2[2369]|3[458])","9(?:2(?:2[013]|37|6[14]|9[179])|3(?:4[1235]|5[138]|8[1578]))"]
+,"0$1",""]
+,[,"9(\\d{4})(\\d{2})(\\d{4})","$1 15-$2-$3",["9(?:2[2-469]|3[3-578])","9(?:2(?:2[24-9]|3[0-69]|47|6[25]|9[02-68])|3(?:3[28]|4[046-9]|5[2467]|7[1-578]|8[23469]))"]
+,"0$1",""]
+,[,"(11)(\\d{4})(\\d{4})","$1 $2-$3",["1"]
+,"0$1",""]
+,[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2-$3",["2(?:2[013]|37|6[14]|9[179])|3(?:4[1235]|5[138]|8[1578])"]
+,"0$1",""]
+,[,"(\\d{4})(\\d{2})(\\d{4})","$1 $2-$3",["[23]"]
+,"0$1",""]
+]
+,[[,"([68]\\d{2})(\\d{3})(\\d{4})","$1-$2-$3",["[68]"]
+,,""]
+,[,"9(11)(\\d{4})(\\d{4})","9 $1 $2-$3",["91"]
+,,""]
+,[,"9(\\d{3})(\\d{3})(\\d{4})","9 $1 $2-$3",["9(?:2[2369]|3[458])","9(?:2(?:2[013]|37|6[14]|9[179])|3(?:4[1235]|5[138]|8[1578]))"]
+,,""]
+,[,"9(\\d{4})(\\d{2})(\\d{4})","9 $1 $2-$3",["9(?:2[2-469]|3[3-578])","9(?:2(?:2[24-9]|3[0-69]|47|6[25]|9[02-68])|3(?:3[28]|4[046-9]|5[2467]|7[1-578]|8[23469]))"]
+,,""]
+,[,"(11)(\\d{4})(\\d{4})","$1 $2-$3",["1"]
+,,""]
+,[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2-$3",["2(?:2[013]|37|6[14]|9[179])|3(?:4[1235]|5[138]|8[1578])"]
+,,""]
+,[,"(\\d{4})(\\d{2})(\\d{4})","$1 $2-$3",["[23]"]
+,,""]
+]
+]
+,
+  "AS": [,[,,"[689]\\d{9}","\\d{7,10}"]
+,[,,"6846(?:22|33|44|55|77|88|9[19])\\d{4}","\\d{7,10}"]
+,[,,"684(?:733|258)\\d{4}","\\d{10}"]
+,[,,"8(?:00|66|77|88)[2-9]\\d{6}","\\d{10}"]
+,[,,"900[2-9]\\d{6}","\\d{10}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"AS",1,"011",,,,,,,,,,,,"684"]
+,
+  "AT": [,[,,"\\d{4,13}","\\d{3,13}"]
+,[,,"1\\d{3,12}|(?:2(?:1[467]|2[134-8]|5[2357]|6[1-46-8]|7[1-8]|8[124-7]|8[1458])|3(?:1[1-8]|3[23568]|4[5-7]|5[1378]|6[1-38]|8[3-68])|4(?:2[1-8]|35|63|7[1368]|8[2457])|5(?:1[27]|2[1-8]|3[357]|4[147]|5[12578]|6[37])|6(?:13|2[1-47]|4[1-35-8]|5[468]|62)|7(?:2[1-8]|3[25]|4[13478]|5[68]|6[16-8]|7[1-6]|9[45]))\\d{3,10}|5(?:0[1-9]|[79]\\d)\\d{2,10}|720\\d{6,10}","\\d{3,13}"]
+,[,,"6(?:44|5[0-3579]|6[013-9]|[7-9]\\d)\\d{4,10}","\\d{7,13}"]
+,[,,"80[02]\\d{6,10}","\\d{9,13}"]
+,[,,"(?:711|9(?:0[01]|3[019]))\\d{6,10}","\\d{9,13}"]
+,[,,"8(?:10|2[018])\\d{6,10}","\\d{9,13}"]
+,[,,"NA","NA"]
+,[,,"780\\d{6,10}","\\d{9,13}"]
+,"AT",43,"00","0",,,"0",,,,[[,"([15])(\\d{3,12})","$1 $2",["1|5[079]"]
+,"0$1",""]
+,[,"(\\d{3})(\\d{3,10})","$1 $2",["316|46|51|732|6(?:44|5[0-3579]|[6-9])|7(?:1|[28]0)|[89]"]
+,"0$1",""]
+,[,"(\\d{4})(\\d{3,9})","$1 $2",["2|3(?:1[1-578]|[3-8])|4[2378]|5[2-6]|6(?:[12]|4[1-35-9]|5[468])|7(?:2[1-8]|35|4[1-8]|[57-9])"]
+,"0$1",""]
+]
+]
+,
+  "AU": [,[,,"[1-578]\\d{5,9}","\\d{6,10}"]
+,[,,"[2378]\\d{8}","\\d{8,9}"]
+,[,,"4[0-68]\\d{7}","\\d{9}"]
+,[,,"1(?:80(?:0\\d{2})?|3(?:00\\d{2})?)\\d{4}","\\d{6,10}"]
+,[,,"190[0126]\\d{6}","\\d{10}"]
+,[,,"NA","NA"]
+,[,,"500\\d{6}","\\d{9}"]
+,[,,"550\\d{6}","\\d{9}"]
+,"AU",61,"(?:14(?:1[14]|34|4[17]|[56]6|7[47]|88))?001[14-689]","0",,,"0",,"0011",,[[,"([2378])(\\d{4})(\\d{4})","$1 $2 $3",["[2378]"]
+,"(0$1)",""]
+,[,"(4\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["4"]
+,"0$1",""]
+,[,"(5[05]0)(\\d{3})(\\d{3})","$1 $2 $3",["5"]
+,"0$1",""]
+,[,"(1[389]\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["1(?:[38]0|9)","1(?:[38]00|9)"]
+,"$1",""]
+,[,"(180)(\\d{4})","$1 $2",["180","180[1-9]"]
+,"$1",""]
+,[,"(13)(\\d{2})(\\d{2})","$1 $2 $3",["13[1-9]"]
+,"$1",""]
+]
+]
+,
+  "AW": [,[,,"[5-9]\\d{6}","\\d{7}"]
+,[,,"5(?:2\\d{2}|8(?:[2-7]\\d|8[0-79]|9[48]))\\d{3}","\\d{7}"]
+,[,,"(?:5[69]\\d|660|9(?:6\\d|9[02-9])|7[34]\\d)\\d{4}","\\d{7}"]
+,[,,"800\\d{4}","\\d{7}"]
+,[,,"900\\d{4}","\\d{7}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"AW",297,"00",,,,,,,,[[,"([5-9]\\d{2})(\\d{4})","$1 $2",,"",""]
+]
+]
+,
+  "AZ": [,[,,"[1-8]\\d{7,8}","\\d{8,9}"]
+,[,,"(?:1(?:(?:[28]\\d|9)\\d|02|1[0-589]|3[358]|4[013-79]|5[0-479]|6[0236-9]|7[0-24-8])|2(?:16|2\\d|3[0-24]|4[1468]|55|6[56]|79)|365?\\d)\\d{5}","\\d{8,9}"]
+,[,,"(?:4[04]|5[015]|60|7[07])\\d{7}","\\d{9}"]
+,[,,"88\\d{7}","\\d{9}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"AZ",994,"00",,,,,,,,[[,"(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["1[28]|22|[3-8]"]
+,"",""]
+,[,"([12]\\d{2})(\\d{5})","$1 $2",["1[013-79]|2[013-9]"]
+,"",""]
+]
+]
+,
+  "BA": [,[,,"[3-689]\\d{7}","\\d{6,8}"]
+,[,,"(?:[35]\\d|49|81)\\d{6}","\\d{6,8}"]
+,[,,"6[1-356]\\d{6}","\\d{8}"]
+,[,,"8[08]\\d{6}","\\d{8}"]
+,[,,"9[0246]\\d{6}","\\d{8}"]
+,[,,"82\\d{6}","\\d{8}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"BA",387,"00","0",,,"0",,,,[[,"([3-689]\\d)(\\d{3})(\\d{3})","$1 $2-$3",,"0$1",""]
+]
+]
+,
+  "BB": [,[,,"[289]\\d{9}","\\d{7,10}"]
+,[,,"246[2-9]\\d{6}","\\d{7,10}"]
+,[,,"246(?:(?:2[346]|45|82)\\d|25[0-4])\\d{4}","\\d{10}"]
+,[,,"8(?:00|66|77|88)[2-9]\\d{6}","\\d{10}"]
+,[,,"900[2-9]\\d{6}","\\d{10}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"BB",1,"011",,,,,,,,,,,,"246"]
+,
+  "BD": [,[,,"[2-79]\\d{5,9}|1\\d{9}|8[0-7]\\d{4,8}","\\d{6,10}"]
+,[,,"2(?:7\\d1|8(?:[026]1|[1379][1-5]|8[1-8])|9(?:0[0-2]|1[1-4]|3[3-5]|5[56]|6[67]|71|8[078]))\\d{4}|3(?:[6-8]1|(?:0[23]|[25][12]|82|416)\\d|(?:31|12?[5-7])\\d{2})\\d{3}|4(?:(?:02|[49]6|[68]1)|(?:0[13]|21\\d?|[23]2|[457][12]|6[28])\\d|(?:23|[39]1)\\d{2}|1\\d{3})\\d{3}|5(?:(?:[457-9]1|62)|(?:1\\d?|2[12]|3[1-3]|52)\\d|61{2})|6(?:[45]1|(?:11|2[15]|[39]1)\\d|(?:[06-8]1|62)\\d{2})|7(?:(?:32|91)|(?:02|31|[67][12])\\d|[458]1\\d{2}|21\\d{3})\\d{3}|8(?:(?:4[12]|[5-7]2|1\\d?)|(?:0|3[12]|[5-7]1|217)\\d)\\d{4}|9(?:[35]1|(?:[024]2|81)\\d|(?:1|[24]1)\\d{2})\\d{3}","\\d{6,9}"]
+,[,,"(?:1[13-9]\\d|(?:3[78]|44)[02-9]|6(?:44|6[02-9]))\\d{7}","\\d{10}"]
+,[,,"80[03]\\d{7}","\\d{10}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"BD",880,"00[12]?","0",,,"0",,"00",,[[,"(2)(\\d{7})","$1 $2",["2"]
+,"0$1",""]
+,[,"(\\d{2})(\\d{4,6})","$1 $2",["[3-79]1"]
+,"0$1",""]
+,[,"(\\d{3})(\\d{3,7})","$1 $2",["[3-79][2-9]|8"]
+,"0$1",""]
+,[,"(\\d{4})(\\d{6})","$1 $2",["1"]
+,"0$1",""]
+]
+]
+,
+  "BE": [,[,,"[1-9]\\d{7,8}","\\d{8,9}"]
+,[,,"(?:1[0-69]|[23][2-8]|[49][23]|5\\d|6[013-57-9]|7[18])\\d{6}|8(?:0[1-9]|[1-79]\\d)\\d{5}","\\d{8}"]
+,[,,"4(?:7\\d|8[4-9]|9[1-9])\\d{6}","\\d{9}"]
+,[,,"800\\d{5}","\\d{8}"]
+,[,,"(?:90|7[07])\\d{6}","\\d{8}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"BE",32,"00","0",,,"0",,,,[[,"(4[7-9]\\d)(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["4[7-9]"]
+,"0$1",""]
+,[,"([2-49])(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[23]|[49][23]"]
+,"0$1",""]
+,[,"([15-8]\\d)(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[156]|7[0178]|8(?:0[1-9]|[1-79])"]
+,"0$1",""]
+,[,"([89]\\d{2})(\\d{2})(\\d{3})","$1 $2 $3",["(?:80|9)0"]
+,"0$1",""]
+]
+]
+,
+  "BF": [,[,,"[2457]\\d{7}","\\d{8}"]
+,[,,"(?:20(?:49|5[23]|9[016-9])|40(?:4[569]|55|7[0179])|50[34]\\d)\\d{4}","\\d{8}"]
+,[,,"7(?:[04-6]\\d|1[0-489]|2[0-8]|8[013-9]|90)\\d{5}","\\d{8}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"BF",226,"00",,,,,,,,[[,"(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",,"",""]
+]
+]
+,
+  "BG": [,[,,"[1-9]\\d{6,8}","\\d{7,9}"]
+,[,,"2\\d{6,7}|(?:[367]\\d|4[124-7]|5[1-9]|8[1-6]|9[1-7])\\d{5,6}|43[1-6]\\d{4,5}","\\d{7,8}"]
+,[,,"(?:8[7-9]|98)\\d{7}|43[0789]\\d{5}|48\\d{6}","\\d{8,9}"]
+,[,,"800\\d{5}","\\d{8}"]
+,[,,"90\\d{6}","\\d{8}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"BG",359,"00","0",,,"0",,,,[[,"(2)(\\d{3})(\\d{3,4})","$1 $2 $3",["2"]
+,"0$1",""]
+,[,"(\\d{3})(\\d{4,5})","$1 $2",["43|800"]
+,"0$1",""]
+,[,"(\\d{2})(\\d{2,3})(\\d{3})","$1 $2 $3",["[35-7]|4[124-7]|8[1-6]|9[1-7]"]
+,"0$1",""]
+,[,"(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["48|8[7-9]|9[08]"]
+,"0$1",""]
+]
+]
+,
+  "BH": [,[]
+,[]
+,[]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"BH",973,"00",,,,,,,1]
+,
+  "BI": [,[,,"[27]\\d{7}","\\d{8}"]
+,[,,"22(?:2[0-7]|[3-5]0)\\d{4}","\\d{8}"]
+,[,,"(?:29\\d|7(?:1[1-3]|[4-9]\\d))\\d{5}","\\d{8}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"BI",257,"00",,,,,,,,[[,"([27]\\d)(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",,"",""]
+]
+]
+,
+  "BJ": [,[,,"[2689]\\d{7}|7\\d{3}","\\d{4,8}"]
+,[,,"2(?:02|1[037]|2[45]|3[68])\\d{5}","\\d{8}"]
+,[,,"66\\d{6}|9(?:0[069]|[35][0-2457-9]|[6-8]\\d)\\d{5}","\\d{8}"]
+,[,,"7[3-5]\\d{2}","\\d{4}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"857[58]\\d{4}","\\d{8}"]
+,"BJ",229,"00",,,,,,,,[[,"(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",,"",""]
+]
+]
+,
+  "BL": [,[,,"[56]\\d{8}","\\d{9}"]
+,[,,"590(?:2[7-9]|5[12]|87)\\d{4}","\\d{9}"]
+,[,,"690(?:10|2[27]|66|77|8[78])\\d{4}","\\d{9}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"BL",590,"00","0",,,"0"]
+,
+  "BM": [,[,,"[489]\\d{9}","\\d{7,10}"]
+,[,,"441(?:2(?:02|23|61|[3479]\\d)|[46]\\d{2}|5(?:4\\d|60|89)|824)\\d{4}","\\d{7,10}"]
+,[,,"441(?:[37]\\d|5[0-39])\\d{5}","\\d{10}"]
+,[,,"8(?:00|66|77|88)[2-9]\\d{6}","\\d{10}"]
+,[,,"900[2-9]\\d{6}","\\d{10}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"BM",1,"011",,,,,,,,,,,,"441"]
+,
+  "BN": [,[,,"[2-578]\\d{6}","\\d{7}"]
+,[,,"[2-5]\\d{6}","\\d{7}"]
+,[,,"[78]\\d{6}","\\d{7}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"BN",673,"00","0",,,"0",,,,[[,"([2-578]\\d{2})(\\d{4})","$1 $2",,"0$1",""]
+]
+]
+,
+  "BO": [,[]
+,[]
+,[]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"BO",591,"001[0-3]","0",,,"0",,,1]
+,
+  "BR": [,[,,"[1-9]\\d{7,9}","\\d{8,10}"]
+,[,,"(?:[14689][1-9]|2[12478]|3[1-578]|5[13-5]|7[13-579])[2-5]\\d{7}","\\d{8,10}"]
+,[,,"(?:[14689][1-9]|2[12478]|3[1-578]|5[13-5]|7[13-579])[6-9]\\d{7}","\\d{10}"]
+,[,,"800\\d{6,7}","\\d{8,10}"]
+,[,,"[359]00\\d{6,7}","\\d{8,10}"]
+,[,,"(?:400\\d|3003)\\d{4}","\\d{8,10}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"BR",55,"00(?:1[45]|2[135]|[34]1|43)","0",,,"0(?:(?:1[245]|2[135]|[34]1)(\\d{10}))?","$1",,,[[,"(\\d{2})(\\d{4})(\\d{4})","$1 $2-$3",["[1-9][1-9]"]
+,"($1)","0 $CC $1"]
+,[,"([34]00\\d)(\\d{4})","$1-$2",["[34]00","400|3003"]
+,"",""]
+,[,"([3589]00)(\\d{2,3})(\\d{4})","$1 $2 $3",["[3589]00"]
+,"0$1",""]
+]
+]
+,
+  "BS": [,[,,"[289]\\d{9}","\\d{7,10}"]
+,[,,"242(?:3(?:02|[236][1-9]|4[0-24-9]|5[0-68]|7[3467]|8[0-4]|9[2-467])|461|502|6(?:12|7[67]|8[78]|9[89])|702)\\d{4}","\\d{7,10}"]
+,[,,"242(?:3(?:5[79]|[79]5)|4(?:[2-4][1-9]|5[1-8]|6[2-8]|7\\d|81)|5(?:2[34]|3[35]|44|5[1-9]|65|77)|6[34]6|727)\\d{4}","\\d{10}"]
+,[,,"242300\\d{4}|8(?:00|66|77|88)[2-9]\\d{6}","\\d{10}"]
+,[,,"900[2-9]\\d{6}","\\d{10}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"BS",1,"011",,,,,,,,,,,,"242"]
+,
+  "BT": [,[,,"(?:17|[2-8])\\d{6}","\\d{6,8}"]
+,[,,"(?:2[3-6]|[34][5-7]|5[236]|6[2-46]|7[246]|8[2-4])\\d{5}","\\d{6,7}"]
+,[,,"17\\d{6}","\\d{8}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"BT",975,"00",,,,,,,,[[,"(17)(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["1"]
+,"",""]
+,[,"([2-8])(\\d{3})(\\d{3})","$1 $2 $3",["[2-8]"]
+,"",""]
+]
+]
+,
+  "BW": [,[,,"[2-9]\\d{6,7}","\\d{7,8}"]
+,[,,"(?:2(?:4[0-48]|6[0-24]|9[0578])|3(?:1[0235-9]|55|6\\d|7[01]|9[0-57])|4(?:6[03]|7[1267]|9[0-5])|5(?:3[0389]|4[0489]|7[1-47]|88|9[0-49])|6(?:2[1-35]|5[149]|8[067]))\\d{4}","\\d{7}"]
+,[,,"7[1-3]\\d{6}|74[0-7]\\d{5}","\\d{8}"]
+,[,,"8\\d{6}","\\d{7}"]
+,[,,"90\\d{5}","\\d{7}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"BW",267,"00",,,,,,,,[[,"(7[1-4])(\\d{3})(\\d{3})","$1 $2 $3",["7"]
+,"",""]
+,[,"(90)(\\d{5})","$1 $2",["9"]
+,"",""]
+]
+]
+,
+  "BY": [,[,,"[12-4]\\d{8}|[89]\\d{9}","\\d{7,10}"]
+,[,,"(?:1(?:5(?:1[1-5]|2\\d|6[1-4]|9[1-7])|6(?:[235]\\d|4[1-7])|7\\d{2})|2(?:1(?:[246]\\d|3[0-35-9]|5[1-9])|2(?:[235]\\d|4[0-8])|3(?:2\\d|3[02-79]|4[024-7]|5[0-7])))\\d{5}","\\d{7,9}"]
+,[,,"(?:2(?:5[679]|9[1-9])|33\\d|44\\d)\\d{6}","\\d{9}"]
+,[,,"80[13]\\d{7}","\\d{10}"]
+,[,,"902\\d{7}","\\d{10}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"BY",375,"8~10","8",,,"80?",,,,[[,"([1-4]\\d)(\\d{3})(\\d{4})","$1 $2 $3",["[1-4]"]
+,"8 0$1",""]
+,[,"([89]\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["[89]"]
+,"8 $1",""]
+]
+]
+,
+  "BZ": [,[]
+,[]
+,[]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"BZ",501,"00","0",,,"0",,,1]
+,
+  "CA": [,[,,"[2-9]\\d{9}|3\\d{6}","\\d{7,10}"]
+,[,,"(?:2(?:04|26|50|89)|306|4(03|16|18|38|50|56)|5(?:00|06|14|19|81|87)|6(?:00|04|13|47)|7(?:00|05|09|10|78|80)|8(?:07|19|67))[2-9]\\d{6}|310\\d{4}","\\d{7,10}"]
+,[,,"(?:2(?:04|26|50|89)|306|4(03|16|18|38|50|56)|5(?:00|06|14|19|81|87)|6(?:00|04|13|47)|7(?:00|05|09|10|78|80)|8(?:07|19|67)|9(?:02|05))[2-9]\\d{6}","\\d{7,10}"]
+,[,,"8(?:00|66|77|88)[2-9]\\d{6}|310\\d{4}","\\d{7,10}"]
+,[,,"900[2-9]\\d{6}","\\d{10}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"CA",1,"011"]
+,
+  "CD": [,[,,"[89]\\d{8}|[1-6]\\d{6}","\\d{7,9}"]
+,[,,"[1-6]\\d{6}","\\d{7}"]
+,[,,"(?:8[0149]|9[7-9])\\d{7}","\\d{9}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"CD",243,"00","0",,,"0",,,,[[,"([89]\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["[89]"]
+,"0$1",""]
+,[,"([1-6]\\d)(\\d{5})","$1 $2",["[1-6]"]
+,"0$1",""]
+]
+]
+,
+  "CF": [,[,,"[278]\\d{7}","\\d{8}"]
+,[,,"2[12]\\d{6}","\\d{8}"]
+,[,,"7[0257]\\d{6}","\\d{8}"]
+,[,,"NA","NA"]
+,[,,"8776\\d{4}","\\d{8}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"CF",236,"00",,,,,,,,[[,"(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",,"",""]
+]
+]
+,
+  "CG": [,[,,"[24-68]\\d{6}","\\d{7}"]
+,[,,"(?:2[1-589]|8\\d)\\d{5}","\\d{7}"]
+,[,,"[4-6]\\d{6}","\\d{7}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"CG",242,"00",,,,,,,,[[,"(\\d{3})(\\d{4})","$1 $2",,"",""]
+]
+]
+,
+  "CH": [,[,,"[2-9]\\d{8}","\\d{9}"]
+,[,,"(?:2[12467]|3[1-4]|4[134]|5[12568]|6[12]|[7-9]1)\\d{7}","\\d{9}"]
+,[,,"7[46-9]\\d{7}","\\d{9}"]
+,[,,"800\\d{6}","\\d{9}"]
+,[,,"90[016]\\d{6}","\\d{9}"]
+,[,,"84[0248]\\d{6}","\\d{9}"]
+,[,,"878\\d{6}","\\d{9}"]
+,[,,"NA","NA"]
+,"CH",41,"00","0",,,"0",,,,[[,"([2-9]\\d)(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[2-7]|[89]1"]
+,"0$1",""]
+,[,"([89]\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["8[047]|90"]
+,"0$1",""]
+]
+]
+,
+  "CI": [,[,,"[02-5]\\d{7}","\\d{8}"]
+,[,,"(?:2(?:0[023]|1[02357]|[23][045]|4[03-5])|3(?:0[06]|1[069]|[2-4][07]|5[09]|6[08]))\\d{5}","\\d{8}"]
+,[,,"(?:0[1-9]|4[04-9]|50|6[067])\\d{6}","\\d{8}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"CI",225,"00",,,,,,,,[[,"(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",,"",""]
+]
+]
+,
+  "CK": [,[]
+,[]
+,[]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"CK",682,"00","00",,,"00",,,1]
+,
+  "CL": [,[,,"(?:[2-9]|600|123)\\d{7,8}","\\d{6,11}"]
+,[,,"(?:2|32|41)\\d{7}|(?:3[3-5]|4[235]|5[1-3578]|6[13-57]|7[1-35])\\d{6,7}","\\d{6,9}"]
+,[,,"9[6-9]\\d{7}","\\d{8,9}"]
+,[,,"800\\d{6}|1230\\d{7}","\\d{9,11}"]
+,[,,"600\\d{7,8}","\\d{10,11}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"44\\d{7}","\\d{9}"]
+,"CL",56,"(?:0|1(?:1[0-69]|2[0-57]|5[13-58]|69|7[0167]|8[018]))0","0",,,"(?:0|1(?:1[0-69]|2[0-57]|5[13-58]|69|7[0167]|8[018]))",,,,[[,"(2)(\\d{3})(\\d{4})","$1 $2 $3",["2"]
+,"0$1",""]
+,[,"(\\d{2})(\\d{2,3})(\\d{4})","$1 $2 $3",["[357]|4[1-35]|6[13-57]"]
+,"0$1",""]
+,[,"(9)([6-9]\\d{3})(\\d{4})","$1 $2 $3",["9"]
+,"0$1",""]
+,[,"(44)(\\d{3})(\\d{4})","$1 $2 $3",["44"]
+,"0$1",""]
+,[,"([68]00)(\\d{3})(\\d{3,4})","$1 $2 $3",["60|8"]
+,"$1",""]
+,[,"(600)(\\d{3})(\\d{2})(\\d{3})","$1 $2 $3 $4",["60"]
+,"$1",""]
+,[,"(1230)(\\d{3})(\\d{4})","$1 $2 $3",["1"]
+,"$1",""]
+]
+]
+,
+  "CM": [,[,,"[237-9]\\d{7}","\\d{8}"]
+,[,,"(?:22|33)\\d{6}","\\d{8}"]
+,[,,"[79]\\d{7}","\\d{8}"]
+,[,,"800\\d{5}","\\d{8}"]
+,[,,"88\\d{6}","\\d{8}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"CM",237,"00",,,,,,,,[[,"([237-9]\\d)(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[2379]|88"]
+,"",""]
+,[,"(800)(\\d{2})(\\d{3})","$1 $2 $3",["80"]
+,"",""]
+]
+]
+,
+  "CN": [,[,,"[1-79]\\d{7,11}|8[0-357-9]\\d{6,9}","\\d{4,12}"]
+,[,,"21\\d{8,10}|(?:10|2[02-57-9]|3(?:11|7[159])|4[135]1|5(?:1\\d|2[37]|3[12]|7[13-79]|9[15])|7(?:31|5[457]|6[09])|898)\\d{8}|(?:3(?:1[02-9]|35|49|5\\d|7[02-68]|9[1-68])|4(?:1[02-9]|2[179]|[35][2-9]|6[4789]|7[0-46-9]|8[23])|5(?:3[03-9]|4[36]|5\\d|6[1-6]|7[028]|80|9[2-46-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]\\d|2[248]|3[04-9]|4[3-6]|6[2368])|8(?:1[236-8]|2[5-7]|[37]\\d|5[1-9]|8[3678]|9[1-7])|9(?:0[1-3689]|1[1-79]|[379]\\d|4[13]|5[1-5]))\\d{7}|80(?:29|6[03578]|7[018]|81)\\d{4}","\\d{4,12}"]
+,[,,"1(?:3[0-9]|47|5[0135689]|8[05-9])\\d{8}","\\d{11}"]
+,[,,"(?:10)?800\\d{7}","\\d{10,12}"]
+,[,,"16[08]\\d{5}","\\d{8}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"400\\d{7}","\\d{10}"]
+,"CN",86,"00","0",,,"0",,,,[[,"(80\\d{2})(\\d{4})","$1 $2",["80[2678]"]
+,"0$1",""]
+,[,"(\\d{3,4})(\\d{4})","$1 $2",["[2-9]"]
+,"",""]
+,[,"(21)(\\d{4})(\\d{4,6})","$1 $2 $3",["21"]
+,"0$1",""]
+,[,"([12]\\d)(\\d{4})(\\d{4})","$1 $2 $3",["10[1-9]|2[02-9]","10[1-9]|2[02-9]","10(?:[1-79]|8(?:[1-9]|0[1-9]))|2[02-9]"]
+,"0$1",""]
+,[,"(\\d{3})(\\d{4})(\\d{4})","$1 $2 $3",["3(?:11|7[159])|4[135]1|5(?:1|2[37]|3[12]|7[13-79]|9[15])|7(?:31|5[457]|6[09])|898"]
+,"0$1",""]
+,[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["3(?:1[02-9]|35|49|5|7[02-68]|9[1-68])|4(?:1[02-9]|2[179]|[35][2-9]|6[4789]|7[0-46-9]|8[23])|5(?:3[03-9]|4[36]|5|6[1-6]|7[028]|80|9[2-46-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]|2[248]|3[04-9]|4[3-6]|6[2368])|8(?:1[236-8]|2[5-7]|[37]|5[1-9]|8[3678]|9[1-7])|9(?:0[1-3689]|1[1-79]|[379]|4[13]|5[1-5])"]
+,"0$1",""]
+,[,"(1[3-58]\\d)(\\d{4})(\\d{4})","$1 $2 $3",["1[3-58]"]
+,"",""]
+,[,"([48]00)(\\d{3})(\\d{4})","$1 $2 $3",["[48]00"]
+,"",""]
+,[,"(10800)(\\d{3})(\\d{4})","$1 $2 $3",["108","1080","10800"]
+,"",""]
+]
+,[[,"(21)(\\d{4})(\\d{4,6})","$1 $2 $3",["21"]
+,,""]
+,[,"([12]\\d)(\\d{4})(\\d{4})","$1 $2 $3",["10[1-9]|2[02-9]","10[1-9]|2[02-9]","10(?:[1-79]|8(?:[1-9]|0[1-9]))|2[02-9]"]
+,,""]
+,[,"(80\\d{2})(\\d{4})","$1 $2",["80[2678]"]
+,,""]
+,[,"(\\d{3})(\\d{4})(\\d{4})","$1 $2 $3",["3(?:11|7[159])|4[135]1|5(?:1|2[37]|3[12]|7[13-79]|9[15])|7(?:31|5[457]|6[09])|898"]
+,,""]
+,[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["3(?:1[02-9]|35|49|5|7[02-68]|9[1-68])|4(?:1[02-9]|2[179]|[35][2-9]|6[4789]|7[0-46-9]|8[23])|5(?:3[03-9]|4[36]|5|6[1-6]|7[028]|80|9[2-46-9])|6(?:3[1-5]|6[0238]|9[12])|7(?:01|[1579]|2[248]|3[04-9]|4[3-6]|6[2368])|8(?:1[236-8]|2[5-7]|[37]|5[1-9]|8[3678]|9[1-7])|9(?:0[1-3689]|1[1-79]|[379]|4[13]|5[1-5])"]
+,,""]
+,[,"(1[3-58]\\d)(\\d{4})(\\d{4})","$1 $2 $3",["1[3-58]"]
+,,""]
+,[,"([48]00)(\\d{3})(\\d{4})","$1 $2 $3",["[48]00"]
+,,""]
+,[,"(10800)(\\d{3})(\\d{4})","$1 $2 $3",["108","1080","10800"]
+,,""]
+]
+]
+,
+  "CO": [,[]
+,[]
+,[]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"CO",57,"(?:00[579]|#555|#999)","0",,,"0",,,1]
+,
+  "CR": [,[,,"[28]\\d{7}","\\d{8}"]
+,[,,"2[24-7]\\d{6}","\\d{8}"]
+,[,,"8[38]\\d{6}","\\d{8}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"CR",506,"00",,,,,,,,[[,"([28]\\d{3})(\\d{4})","$1 $2",,"",""]
+]
+]
+,
+  "CU": [,[]
+,[]
+,[]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"CU",53,"119","0",,,"0",,,1]
+,
+  "CV": [,[,,"[259]\\d{6}","\\d{7}"]
+,[,,"2(?:2[1-7]|3[0-8]|4[12]|5[1256]|6\\d|7[1-3]|8[1-5])\\d{4}","\\d{7}"]
+,[,,"(?:9\\d|59)\\d{5}","\\d{7}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"CV",238,"0",,,,,,,,[[,"(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3",,"",""]
+]
+]
+,
+  "CY": [,[,,"[27-9]\\d{7}","\\d{8}"]
+,[,,"2[2-6]\\d{6}","\\d{8}"]
+,[,,"7777\\d{4}|9(?:[69]\\d|7[67])\\d{5}","\\d{8}"]
+,[,,"8000\\d{4}","\\d{8}"]
+,[,,"9009\\d{4}","\\d{8}"]
+,[,,"NA","NA"]
+,[,,"700\\d{5}","\\d{8}"]
+,[,,"NA","NA"]
+,"CY",357,"00",,,,,,,,[[,"([27-9]\\d)(\\d{6})","$1 $2",,"",""]
+]
+]
+,
+  "CZ": [,[,,"[2-9]\\d{8}","\\d{9}"]
+,[,,"2\\d{8}|(?:3[1257-9]|4[16-9]|5[13-9])\\d{7}","\\d{9}"]
+,[,,"60[1-8]\\d{6}|7[2379]\\d{7}","\\d{9}"]
+,[,,"800\\d{6}","\\d{9}"]
+,[,,"90[0689]\\d{6}","\\d{9}"]
+,[,,"8[134]\\d{7}","\\d{9}"]
+,[,,"70[01]\\d{6}","\\d{9}"]
+,[,,"NA","NA"]
+,"CZ",420,"00",,,,,,,,[[,"([2-9]\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",,"",""]
+]
+]
+,
+  "DE": [,[,,"(?:4[0-8]|[1-35-9]\\d)\\d{4,12}|49(?:4[1-8]|[0-35-7]\\d)\\d{2,7}","\\d{2,14}"]
+,[,,"(?:[246]\\d{2}|3[02-9]\\d|5(?:0[2-8]|[38][0-8]|[124-6]\\d|[79][0-7])|[789](?:[1-9]\\d|0[2-9]))\\d{3,10}","\\d{2,14}"]
+,[,,"1(?:5\\d{9}|7(?:[0-57-9]|6\\d)\\d{7}|6[02]\\d{7,8}|63\\d{7})","\\d{10,11}"]
+,[,,"800\\d{7,9}","\\d{10,12}"]
+,[,,"900(?:[135]\\d{6}|9\\d{7})","\\d{10,11}"]
+,[,,"180\\d{5,11}","\\d{8,14}"]
+,[,,"700\\d{8}","\\d{11}"]
+,[,,"NA","NA"]
+,"DE",49,"00","0",,,"0",,,,[[,"(\\d{2})(\\d{4,11})","$1/$2",["3[02]|40|[68]9"]
+,"0$1",""]
+,[,"(\\d{3})(\\d{3,10})","$1/$2",["2(?:\\d1|0[2389]|1[24]|28|34)|3(?:[3-9][15]|40)|[4-8][1-9]1|9(?:06|[1-9]1)"]
+,"0$1",""]
+,[,"(\\d{4})(\\d{2,8})","$1/$2",["[24-6]|[7-9](?:\\d[1-9]|[1-9]\\d)|3(?:[3569][02-46-9]|4[2-4679]|7[2-467]|8[2-46-8])","[24-6]|[7-9](?:\\d[1-9]|[1-9]\\d)|3(?:3(?:0[1-467]|2[127-9]|3[124578]|[46][1246]|7[1257-9]|8[1256]|9[145])|4(?:2[135]|3[1357]|4[13578]|6[1246]|7[1356]|9[1346])|5(?:0[14]|2[1-3589]|3[1357]|4[1246]|6[1-4]|7[1346]|8[13568]|9[1246])|6(?:0[356]|2[1-489]|3[124-6]|4[1347]|6[13]|7[12579]|8[1-356]|9[135])|7(?:2[1-7]|3[1357]|4[145]|6[1-5]|7[1-4])|8(?:21|3[1468]|4[1347]|6[0135-9]|7[1467]|8[136])|9(?:0[12479]|2[1358]|3[1357]|4[134679]|6[1-9]|7[136]|8[147]|9[1468]))"]
+,"0$1",""]
+,[,"(\\d{5})(\\d{1,6})","$1/$2",["3"]
+,"0$1",""]
+,[,"([18]\\d{2})(\\d{7,9})","$1 $2",["1[5-7]|800"]
+,"0$1",""]
+,[,"(\\d{3})(\\d)(\\d{4,10})","$1 $2 $3",["(?:18|90)0","180|900[1359]"]
+,"0$1",""]
+,[,"(700)(\\d{4})(\\d{4})","$1 $2 $3",["700"]
+,"0$1",""]
+]
+]
+,
+  "DJ": [,[,,"[2-8]\\d{5}","\\d{6}"]
+,[,,"(?:25|3[0-6]|42)\\d{4}","\\d{6}"]
+,[,,"(?:[5-7]\\d|8[0-7])\\d{4}","\\d{6}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"DJ",253,"00",,,,,,,,[[,"([2-8]\\d)(\\d{2})(\\d{2})","$1 $2 $3",,"",""]
+]
+]
+,
+  "DK": [,[,,"[1-9]\\d{7}","\\d{8}"]
+,[,,"(?:3[2-9]|4[3-9]|5[4-9]|6[2-9]|7[02-9]|8[26-9]|9[6-9])\\d{6}","\\d{8}"]
+,[,,"(?:2[0-9]|3[0-2]|4[0-2]|5[0-3]|6[01]|72|99)\\d{6}","\\d{8}"]
+,[,,"80\\d{6}","\\d{8}"]
+,[,,"90\\d{6}","\\d{8}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"DK",45,"00",,,,,,,,[[,"([1-9]\\d)(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",,"",""]
+]
+]
+,
+  "DM": [,[,,"[7-9]\\d{9}","\\d{7,10}"]
+,[,,"767(?:2(?:55|66)|4(?:2[01]|4[0-25-9])|50[0-4])\\d{4}","\\d{7,10}"]
+,[,,"767(?:2(?:[2346]5|7[5-7])|31[5-7]|61[4-6])\\d{4}","\\d{10}"]
+,[,,"8(?:00|66|77|88)[2-9]\\d{6}","\\d{10}"]
+,[,,"900[2-9]\\d{6}","\\d{10}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"DM",1,"011",,,,,,,,,,,,"767"]
+,
+  "DO": [,[,,"[89]\\d{9}","\\d{7,10}"]
+,[,,"8[024]9[2-9]\\d{6}","\\d{7,10}"]
+,[,,"8[024]9[2-9]\\d{6}","\\d{7,10}"]
+,[,,"8(?:00|66|77|88)[2-9]\\d{6}","\\d{10}"]
+,[,,"900[2-9]\\d{6}","\\d{10}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"DO",1,"011",,,,,,,1,,,,,"8[024]9"]
+,
+  "DZ": [,[,,"(?:[1-4]|[5-9]\\d)\\d{7}","\\d{8,9}"]
+,[,,"(?:1\\d|2[014-79]|3[0-8]|4[0135689])\\d{6}|9619\\d{5}","\\d{8,9}"]
+,[,,"(?:5[56]|6[69]|7[79])\\d{7}","\\d{9}"]
+,[,,"800\\d{6}","\\d{9}"]
+,[,,"80[3-689]1\\d{5}","\\d{9}"]
+,[,,"80[12]1\\d{5}","\\d{9}"]
+,[,,"NA","NA"]
+,[,,"98[23]\\d{6}","\\d{9}"]
+,"DZ",213,"00","0",,,"0",,,,[[,"([1-4]\\d)(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[1-4]"]
+,"0$1",""]
+,[,"([5-8]\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[5-8]"]
+,"0$1",""]
+,[,"(9\\d)(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",["9"]
+,"0$1",""]
+]
+]
+,
+  "EC": [,[]
+,[]
+,[]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"EC",593,"00","0",,,"0",,,1]
+,
+  "EE": [,[,,"[3-9]\\d{6,7}|800\\d{6,7}","\\d{6,10}"]
+,[,,"(?:3[23589]|4[3-8]|6\\d|7[1-9]|88)\\d{5}","\\d{7}"]
+,[,,"(?:5\\d|8[1-5])\\d{6}|5(?:[02]\\d{2}|1(?:[0-8]\\d|95)|5[0-478]\\d|64[0-4]|65[1-589])\\d{3}","\\d{7,8}"]
+,[,,"800(?:0\\d{3}|1\\d|[2-9])\\d{3}","\\d{7,10}"]
+,[,,"900\\d{4}","\\d{7}"]
+,[,,"NA","NA"]
+,[,,"70\\d{5}","\\d{7}"]
+,[,,"NA","NA"]
+,"EE",372,"00",,,,,,,,[[,"([34-79]\\d{2})(\\d{4})","$1 $2",["[34679]|5(?:[0-2]|5[0-478]|6[45])","[34679]|5(?:[02]|1(?:[0-8]|95)|5[0-478]|6(?:4[0-4]|5[1-589]))"]
+,"",""]
+,[,"(8000)(\\d{3})(\\d{3})","$1 $2 $3",["800","8000"]
+,"",""]
+,[,"([58]\\d{3})(\\d{3,4})","$1 $2",["5|8(?:00|[1-5])","5|8(?:00[1-9]|[1-5])"]
+,"",""]
+]
+]
+,
+  "EG": [,[,,"1\\d{4,9}|[2-689]\\d{7,9}","\\d{5,10}"]
+,[,,"(?:1[35][23]|2[23]\\d|3\\d|4(?:0[2-4]|[578][23]|64)|5(?:0[234]|[57][23])|6[24-689]3|8(?:[28][2-4]|42|6[23])|9(?:[25]2|3[24]|6[23]|7[2-4]))\\d{6}|1[69]\\d{3}","\\d{5,9}"]
+,[,,"1[0-246-9]\\d{7}","\\d{9}"]
+,[,,"800\\d{7}","\\d{10}"]
+,[,,"900\\d{7}","\\d{10}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"EG",20,"00","0",,,"0",,,,[[,"(\\d)(\\d{7,8})","$1 $2",["[23]"]
+,"0$1",""]
+,[,"(\\d{2})(\\d{7})","$1 $2",["[14-6]|[89][2-9]"]
+,"0$1",""]
+,[,"([89]00)(\\d{3})(\\d{4})","$1 $2 $3",["[89]00"]
+,"0$1",""]
+]
+]
+,
+  "ER": [,[,,"[178]\\d{6}","\\d{6,7}"]
+,[,,"1(?:1[12568]|20|40|55|6[146])\\d{4}|8\\d{6}","\\d{6,7}"]
+,[,,"17[1-3]\\d{4}|7\\d{6}","\\d{7}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"ER",291,"00","0",,,"0",,,,[[,"(\\d)(\\d{3})(\\d{3})","$1 $2 $3",,"0$1",""]
+]
+]
+,
+  "ES": [,[,,"[5-9]\\d{8}","\\d{9}"]
+,[,,"[89][1-8]\\d{7}","\\d{9}"]
+,[,,"6\\d{8}","\\d{9}"]
+,[,,"[89]00\\d{6}","\\d{9}"]
+,[,,"80[367]\\d{6}","\\d{9}"]
+,[,,"90[12]\\d{6}","\\d{9}"]
+,[,,"70\\d{7}","\\d{9}"]
+,[,,"NA","NA"]
+,"ES",34,"00",,,,,,,,[[,"([5-9]\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",,"",""]
+]
+]
+,
+  "ET": [,[,,"[1-59]\\d{8}","\\d{7,9}"]
+,[,,"(?:11(?:1(?:1[124]|2[2-57]|3[1-5]|5[5-8]|8[6-8])|2(?:13|3[6-8]|5[89]|7[05-9]|8[2-6])|3(?:2[01]|3[0-289]|4[1289]|7[1-4]|87)|4(?:1[69]|3[2-49]|4[0-23]|6[5-8])|5(?:1[57]|44|5[0-4])|6(?:18|2[69]|4[5-7]|5[1-5]|6[0-59]|8[015-8]))|2(?:2(?:11[1-9]|22[0-7]|33\\d|44[1467]|66[1-68])|5(?:11[124-6]|33[2-8]|44[1467]|55[14]|66[1-3679]|77[124-79]|880))|3(?:3(?:11[0-46-8]|22[0-6]|33[0134689]|44[04]|55[0-6]|66[01467])|4(?:44[0-8]|55[0-69]|66[0-3]|77[1-5]))|4(?:6(?:22[0-24-7]|33[1-5]|44[13-69]|55[14-689]|660|88[1-4])|7(?:11[1-9]|22[1-9]|33[13-7]|44[13-6]|55[1-689]))|5(?:7(?:227|55[05]|(?:66|77)[14-8])|8(?:11[149]|22[013-79]|33[0-68]|44[013-8]|550|66[1-5]|77\\d)))\\d{4}","\\d{7,9}"]
+,[,,"91(?:1(?:[146]\\d|2[0-5]|3[4-6]|50|7[2-6]|8[46-9])|31\\d|4(?:3[0-2489]|7[0-3])|5(?:3[23]|7[3-5])|6(?:58|8[23])|7(?:5[57]|8[01])|8(?:3[45]|7[67]))\\d{4}","\\d{9}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"ET",251,"00","0",,,"0",,,,[[,"([1-59]\\d)(\\d{3})(\\d{4})","$1 $2 $3",,"0$1",""]
+]
+]
+,
+  "FI": [,[,,"[1-9]\\d{4,11}","\\d{5,12}"]
+,[,,"1(?:0[1-9]\\d{3,7}|[35689][1-8]\\d{3,9}|[47]\\d{5,10})|2(?:0(?:[16-8]\\d{3,7}|2[14-9]\\d{1,6}|[3-5]\\d{2,7}|9[0-7]\\d{1,6})|[1-8]\\d{3,9}|9\\d{4,8})|3(?:0[1-9]\\d{3,7}|[1-8]\\d{3,9}|9\\d{4,8})|[5689][1-8]\\d{3,9}|7(?:1\\d{7}|3\\d{8}|5[03-9]\\d{2,7})","\\d{5,12}"]
+,[,,"4\\d{5,10}|50\\d{4,8}","\\d{6,11}"]
+,[,,"800\\d{4,7}","\\d{7,10}"]
+,[,,"[67]00\\d{5,6}","\\d{8,9}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"FI",358,"00|99[049]","0",,,"0",,,,[[,"(\\d{2})(\\d{4,10})","$1 $2",["2[09]|[14]|50|7[135]"]
+,"0$1",""]
+,[,"(\\d)(\\d{4,11})","$1 $2",["[25689][1-8]|3"]
+,"0$1",""]
+,[,"([6-8]00)(\\d{4,7})","$1 $2",["[6-8]0"]
+,"0$1",""]
+]
+]
+,
+  "FJ": [,[]
+,[]
+,[]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"FJ",679,"00",,,,,,,1]
+,
+  "FK": [,[]
+,[]
+,[]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"FK",500,"00","0",,,"0",,,1]
+,
+  "FM": [,[]
+,[]
+,[]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"FM",691,"00",,,,,,,1]
+,
+  "FO": [,[]
+,[]
+,[]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"FO",298,"00",,,,,,,1]
+,
+  "FR": [,[,,"[1-9]\\d{8}","\\d{9}"]
+,[,,"[1-5]\\d{8}","\\d{9}"]
+,[,,"6\\d{8}|7[5-9]\\d{7}","\\d{9}"]
+,[,,"80\\d{7}","\\d{9}"]
+,[,,"8(?:1[01]|2[0156]|84|9[0-37-9])\\d{6}","\\d{9}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"9\\d{8}","\\d{9}"]
+,"FR",33,"[04579]0","0",,,"0",,"00",,[[,"([1-79])(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4 $5",["[1-79]"]
+,"0$1",""]
+,[,"(8\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["8"]
+,"0 $1",""]
+]
+]
+,
+  "GA": [,[,,"[4-9]\\d{5}|0\\d{7}","\\d{6,8}"]
+,[,,"(?:4(?:[04-8]\\d|2[04])|(?:5[04-689]|6[024-9]|7\\d|8[236]|9[02368])\\d)\\d{3}","\\d{6}"]
+,[,,"0(?:5(?:0[89]|3[0-4]|8[0-26]|9[238])|6(?:0[3-7]|1[01]|2[0-7]|6[0-589]|71|83|9[57])|7(?:1[2-5]|2[89]|3[35-9]|4[01]|5[0-347-9]|[67]\\d|8[457-9]|9[0146]))\\d{4}","\\d{8}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"GA",241,"00",,,,,,,,[[,"(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3",["[4-9]"]
+,"",""]
+,[,"(0\\d)(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["0"]
+,"",""]
+]
+]
+,
+  "GB": [,[,,"\\d{7,10}","\\d{6,10}"]
+,[,,"1(?:1[3-8]|[2-69]1)\\d{7}|1(?:2(?:0[024-9]|2[3-9]|3[3-79]|4[1-689]|[58][02-9]|6[0-47-9]|7[013-9]|8[02-9]|9[0-9])|3(?:0\\d|[25][02-9]|3[02-579]|4[0-56-9]|[68][0-46-9]|7[1-35-79]|9[24578])|4(?:0[03-9]|2[02-57-9]|[37]\\d|4[02-69]|5[0-8]|[69][0-79]|8[02-9])|5(?:0[1-35-9]|2[024-9]|3[015689]|4[02-9]|[57][03-9]|6\\d|8[0-68]|9[0-57-9])|6(?:0[034689]|2[035689]|3[13-9]|4[1-467]|5[0-69]|6[13-9]|7[0-8]|8[013-9]|9[0-24578])|7(?:0[0246-9]|2\\d|3[0236-8]|4[03-9]|5[0-46-9]|6[13-9]|7[0-35-9]|8[024-9]|9[02-9])|8(?:0[35-9]|2[1-9]|3[02-578]|4[0-578]|5[124-9]|6[2-69]|7\\d|8[2-9]|9[02569])|9(?:0[02-589]|2[02-689]|3[1-57-9]|4[2-9]|5[0-579]|6[2-47-9]|7[0-24578]|8\\d|9[2-57]))\\d{5,6}|(?:2[03489]|3[0347]|55)\\d{8}","\\d{6,10}"]
+,[,,"7(?:4[0-26]\\d|5(?:[013-9]\\d|2[0-35-9])|7(?:0[1-9]|8[02-9]|9[0-689]|[1-7]\\d)|8(?:[014-9]\\d|[23][0-8])|9(?:1[02-9]|2[0135-9]|3[0-689]|[04-9]\\d))\\d{6}","\\d{10}"]
+,[,,"80(?:01111|\\d{7,8})|500\\d{6}","\\d{7,10}"]
+,[,,"(?:9[018]\\d|87[1-3])\\d{7}","\\d{10}"]
+,[,,"8(?:4[3-5]|70)\\d{7}","\\d{10}"]
+,[,,"70\\d{8}","\\d{10}"]
+,[,,"56\\d{8}","\\d{10}"]
+,"GB",44,"00","0"," x",,"0",,,,[[,"(\\d{2})(\\d{4})(\\d{4})","$1 $2 $3",["[23]|5[56]|9[018]"]
+,"0$1",""]
+,[,"(\\d{3})(\\d{3})(\\d{3,4})","$1 $2 $3",["1(?:1|\\d1)|500"]
+,"0$1",""]
+,[,"(\\d{5})(\\d{4,5})","$1 $2",["1(?:38|5[23]|69|76|94)","1(?:387|5(?:24|39)|697|768|946)","1(?:3873|5(?:242|39[4-6])|697[347]|768[347]|9467)"]
+,"0$1",""]
+,[,"(1\\d{3})(\\d{4,6})","$1 $2",["1"]
+,"0$1",""]
+,[,"(7\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["7[1-9]"]
+,"0$1",""]
+,[,"(70\\d{2})(\\d{6})","$1 $2",["70"]
+,"0$1",""]
+,[,"(800)(1111)","$1 $2",["800","8001"]
+,"0$1",""]
+,[,"(8\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["8(?:0|4[3-5]|7[01])"]
+,"0$1",""]
+]
+,,,1]
+,
+  "GD": [,[,,"[489]\\d{9}","\\d{7,10}"]
+,[,,"473(?:2(?:3[0-2]|69)|3(?:2[89]|86)|4(?:08|3[5-9]|4[0-49]|5[5-79]|68|73|90)|63[68]|7(?:58|84)|938)\\d{4}","\\d{7,10}"]
+,[,,"473(?:4(?:0[3-79]|1[04-9]|20|58)|53[3-8])\\d{4}","\\d{10}"]
+,[,,"8(?:00|66|77|88)[2-9]\\d{6}","\\d{10}"]
+,[,,"900[2-9]\\d{6}","\\d{10}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"GD",1,"011",,,,,,,,,,,,"473"]
+,
+  "GE": [,[,,"[1-3579]\\d{7}|8\\d{8}","\\d{3,9}"]
+,[,,"(?:122|2(?:22|36|5[03])|3(?:1[0-35-8]|[24-6]\\d|3[1-35679]|7[0-39]|9[1-35-7])|44[2-6])\\d{5}","\\d{3,8}"]
+,[,,"(?:5[1578]|6[28]|7[0147-9]|9[0135-9])\\d{6}","\\d{8}"]
+,[,,"800\\d{6}","\\d{9}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"GE",995,"8~10","8",,,"8",,,,[[,"(32)(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["32"]
+,"8 $1",""]
+,[,"(\\d{3})(\\d{5})","$1 $2",["2|3[13-79]|446"]
+,"8 $1",""]
+,[,"(\\d{4})(\\d{3,4})","$1 $2",["44[2-5]"]
+,"8 $1",""]
+,[,"(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["[5679]"]
+,"8 $1",""]
+,[,"(800)(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["8"]
+,"8 $1",""]
+]
+]
+,
+  "GF": [,[]
+,[]
+,[]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"GF",594,"00",,,,,,,1]
+,
+  "GG": [,[,,"[157-9]\\d{6,9}","\\d{6,10}"]
+,[,,"1481\\d{6}","\\d{6,10}"]
+,[,,"7(?:781|839|911)\\d{6}","\\d{10}"]
+,[,,"80(?:01111|\\d{7,8})|500\\d{6}","\\d{7,10}"]
+,[,,"(?:9[018]\\d|87[1-3])\\d{7}","\\d{10}"]
+,[,,"8(?:4[3-5]|70)\\d{7}","\\d{10}"]
+,[,,"70\\d{8}","\\d{10}"]
+,[,,"56\\d{8}","\\d{10}"]
+,"GG",44,"00","0"," x",,"0"]
+,
+  "GH": [,[,,"[235]\\d{6,8}","\\d{7,9}"]
+,[,,"3(?:0[237]\\d|[167](?:2[0-6]|7\\d)|2(?:2[0-5]|7\\d)|3(?:2[0-37]|7\\d)|4(?:[27]\\d|30)|5(?:2[0-7]|7\\d)|8(?:2[0-2]|7\\d)|9(?:20|7\\d))\\d{5}","\\d{7,9}"]
+,[,,"2((?:[47]\\d|08)\\d{6}|[368]\\d{7})|54\\d{7}","\\d{9}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"GH",233,"00","0",,,"0",,,,[[,"(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",,"0$1",""]
+]
+]
+,
+  "GI": [,[]
+,[]
+,[]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"GI",350,"00",,,,,,,1]
+,
+  "GL": [,[]
+,[]
+,[]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"GL",299,"00",,,,,,,1]
+,
+  "GM": [,[,,"[3-9]\\d{6}","\\d{7}"]
+,[,,"(4(?:[23]\\d{2}|4(?:1[024679]|[6-9]\\d))|5(?:54[0-7]|6(?:[67]\\d)|7(?:1[04]|2[035]|3[58]|48))|8\\d{3})\\d{3}","\\d{7}"]
+,[,,"[3679]\\d{6}","\\d{7}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"GM",220,"00",,,,,,,,[[,"(\\d{3})(\\d{4})","$1 $2",,"",""]
+]
+]
+,
+  "GN": [,[,,"[367]\\d{7}","\\d{8}"]
+,[,,"30(?:24|3[12]|4[1-35-7]|5[13]|6[189]|[78]1|9[1478])\\d{4}","\\d{8}"]
+,[,,"6(?:0(?:2\\d|3[3467]|5[2457-9])|[2457]\\d{2}|3(?:[14]0|35))\\d{4}","\\d{8}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"GN",224,"00",,,,,,,,[[,"(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",,"",""]
+]
+]
+,
+  "GP": [,[,,"[56]\\d{8}","\\d{9}"]
+,[,,"590(?:1[12]|2[0-68]|3[28]|4[126-8]|5[067]|6[018]|[89]\\d)\\d{4}","\\d{9}"]
+,[,,"690(?:00|[3-5]\\d|6[0-57-9]|7[1-6]|8[0-6]|9[09])\\d{4}","\\d{9}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"GP",590,"00","0",,,"0",,,,[[,"([56]90)(\\d{2})(\\d{4})","$1 $2-$3",,"0$1",""]
+]
+,,,1]
+,
+  "GQ": [,[,,"[23589]\\d{8}","\\d{6,9}"]
+,[,,"3(?:3(?:3\\d[7-9]|[0-24-9]\\d[46])|5\\d{2}[7-9])\\d{4}","\\d{6,9}"]
+,[,,"(?:222|551)\\d{6}","\\d{6,9}"]
+,[,,"80\\d[1-9]\\d{5}","\\d{6,9}"]
+,[,,"90\\d[1-9]\\d{5}","\\d{6,9}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"GQ",240,"00",,,,,,,,[[,"(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["[235]"]
+,"",""]
+,[,"(\\d{3})(\\d{6})","$1 $2",["[89]"]
+,"",""]
+]
+]
+,
+  "GR": [,[,,"[26-9]\\d{9}","\\d{10}"]
+,[,,"2(?:1\\d{2}|2(?:3[1-8]|4[1-7]|5[1-4]|6[1-8]|7[1-5]|[289][1-9])|3(?:1\\d|2[1-5]|3[1-4]|[45][1-3]|7[1-7]|8[1-6]|9[1-79])|4(?:1\\d|2[1-8]|3[1-4]|4[13-5]|6[1-578]|9[1-5])|5(?:1\\d|2[1-3]|4[124]|5[1-6]|[39][1-4])|6(?:1\\d|3[24]|4[1-7]|5[13-9]|[269][1-6]|7[14]|8[1-35])|7(?:1\\d|[23][1-5]|4[1-7]|5[1-57]|6[134]|9[15-7])|8(?:1\\d|2[1-5]|[34][1-4]|9[1-7]))\\d{6}","\\d{10}"]
+,[,,"69\\d{8}","\\d{10}"]
+,[,,"800\\d{7}","\\d{10}"]
+,[,,"90[19]\\d{7}","\\d{10}"]
+,[,,"8(?:0[16]|12|25)\\d{7}","\\d{10}"]
+,[,,"70\\d{8}","\\d{10}"]
+,[,,"NA","NA"]
+,"GR",30,"00",,,,,,,,[[,"([27]\\d)(\\d{4})(\\d{4})","$1 $2 $3",["21|7"]
+,"",""]
+,[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["2[2-9]1|[689]"]
+,"",""]
+,[,"(2\\d{3})(\\d{6})","$1 $2",["2[2-9][02-9]"]
+,"",""]
+]
+]
+,
+  "GT": [,[]
+,[]
+,[]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"GT",502,"00",,,,,,,1]
+,
+  "GU": [,[,,"[689]\\d{9}","\\d{7,10}"]
+,[,,"671(?:3\\d{2}|47\\d|56\\d|6[3-5]\\d|7(?:3\\d|89)|828)\\d{4}","\\d{7,10}"]
+,[,,"671(?:3\\d{2}|47\\d|56\\d|6[3-5]\\d|7(?:3\\d|89)|828)\\d{4}","\\d{7,10}"]
+,[,,"8(?:00|66|77|88)[2-9]\\d{6}","\\d{10}"]
+,[,,"900[2-9]\\d{6}","\\d{10}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"GU",1,"011",,,,,,,1,,,,,"671"]
+,
+  "GW": [,[,,"[3567]\\d{6}","\\d{7}"]
+,[,,"3(?:2[0125]|3[1245]|4[12]|5[1-4]|70|9[1-467])\\d{4}","\\d{7}"]
+,[,,"[5-7]\\d{6}","\\d{7}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"GW",245,"00",,,,,,,,[[,"(\\d{3})(\\d{4})","$1 $2",,"",""]
+]
+]
+,
+  "GY": [,[]
+,[]
+,[]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"GY",592,"001","0",,,"0",,,1]
+,
+  "HK": [,[,,"[235-7]\\d{7}|8\\d{7,8}|9\\d{7,10}","\\d{8,11}"]
+,[,,"[23]\\d{7}","\\d{8}"]
+,[,,"[5-79]\\d{7}","\\d{8}"]
+,[,,"800\\d{6}","\\d{9}"]
+,[,,"900\\d{8}","\\d{11}"]
+,[,,"NA","NA"]
+,[,,"8[1-3]\\d{6}","\\d{8}"]
+,[,,"NA","NA"]
+,"HK",852,"00",,,,,,,,[[,"(\\d{4})(\\d{4})","$1 $2",["[235-7]|[89](?:0[1-9]|[1-9])"]
+,"",""]
+,[,"(800)(\\d{3})(\\d{3})","$1 $2 $3",["800"]
+,"",""]
+,[,"(900)(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3 $4",["900"]
+,"",""]
+]
+]
+,
+  "HN": [,[]
+,[]
+,[]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"HN",504,"00","0",,,"0",,,1]
+,
+  "HR": [,[,,"[1-7]\\d{5,8}|[89]\\d{6,11}","\\d{6,12}"]
+,[,,"(?:1|6[029])\\d{7}|(?:2[0-3]|3[1-5]|4[02-47-9]|5[1-3])\\d{6}","\\d{6,9}"]
+,[,,"9[12589]\\d{6,10}","\\d{8,12}"]
+,[,,"80[01]\\d{4,7}","\\d{7,10}"]
+,[,,"6[145]\\d{4,7}","\\d{6,9}"]
+,[,,"NA","NA"]
+,[,,"7[45]\\d{4,7}","\\d{6,9}"]
+,[,,"NA","NA"]
+,"HR",385,"00","0",,,"0",,,,[[,"(1)(\\d{4})(\\d{3})","$1 $2 $3",["1"]
+,"0$1",""]
+,[,"(6[029])(\\d{4})(\\d{3})","$1 $2 $3",["6[029]"]
+,"0$1",""]
+,[,"([2-5]\\d)(\\d{3})(\\d{3})","$1 $2 $3",["[2-5]"]
+,"0$1",""]
+,[,"(9[12589])(\\d{3,4})(\\d{3,4})","$1 $2 $3",["9"]
+,"0$1",""]
+,[,"(9[12589])(\\d{3,4})(\\d{3})(\\d{3})","$1 $2 $3 $4",["9"]
+,"0$1",""]
+,[,"(\\d{2})(\\d{2})(\\d{2,3})","$1 $2 $3",["6[145]|7"]
+,"0$1",""]
+,[,"(\\d{2})(\\d{3,4})(\\d{3})","$1 $2 $3",["6[145]|7"]
+,"0$1",""]
+,[,"(80[01])(\\d{2})(\\d{2,3})","$1 $2 $3",["8"]
+,"0$1",""]
+,[,"(80[01])(\\d{3,4})(\\d{3})","$1 $2 $3",["8"]
+,"0$1",""]
+]
+]
+,
+  "HT": [,[]
+,[]
+,[]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"HT",509,"00","0",,,"0",,,1]
+,
+  "HU": [,[,,"\\d{8,9}","\\d{6,9}"]
+,[,,"(?:1\\d|2(?:1\\d|[2-9])|3[2-7]|4[24-9]|5[2-79]|6[23689]|7(?:1\\d|[2-9])|8[2-57-9]|9[2-69])\\d{6}","\\d{6,9}"]
+,[,,"(?:[237]0|31)\\d{7}","\\d{9}"]
+,[,,"80\\d{6}","\\d{8}"]
+,[,,"9[01]\\d{6}","\\d{8}"]
+,[,,"40\\d{6}","\\d{8}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"HU",36,"00","06",,,"06",,,,[[,"(1)(\\d{3})(\\d{4})","$1 $2 $3",["1"]
+,"($1)",""]
+,[,"(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["[2-9]"]
+,"($1)",""]
+]
+]
+,
+  "ID": [,[,,"[1-9]\\d{6,10}","\\d{5,11}"]
+,[,,"2[124]\\d{7,8}|(?:2(?:[35][1-4]|6[0-8]|7[1-6]|8\\d|9[1-8])|3(?:1|2[1-578]|3[1-68]|4[1-3]|5[1-8]|6[1-3568]|7[0-46]|8\\d)|4(?:0[1-589]|1[01347-9]|2[0-36-8]|3[0-24-68]|5[1-378]|6[1-5]|7[134]|8[1245])|5(?:1[1-35-9]|2[25-8]|3[1246-9]|4[1-3589]|5[1-46]|6[1-8])|6(?:19?|[25]\\d|3[1-469]|4[1-6])|7(?:1[1-46-9]|2[14-9]|[36]\\d|4[1-8]|5[1-9]|7[0-36-9])|9(?:0[12]|1[0134-8]|2[0-479]|5[125-8]|6[23679]|7[159]|8[01346]))\\d{5,8}","\\d{5,10}"]
+,[,,"8[1-35-9]\\d{7,9}","\\d{9,11}"]
+,[,,"177\\d{6,8}|800\\d{5,7}","\\d{8,11}"]
+,[,,"809\\d{7}","\\d{10}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"ID",62,"0(?:0[1789]|10(?:00|1[67]))","0",,,"0",,,,[[,"(\\d{2})(\\d{7,8})","$1 $2",["2[124]|[36]1"]
+,"(0$1)",""]
+,[,"(\\d{3})(\\d{5,7})","$1 $2",["[4579]|2[035-9]|[36][02-9]"]
+,"(0$1)",""]
+,[,"(8\\d{2})(\\d{3,4})(\\d{3,4})","$1-$2-$3",["8[1-35-9]"]
+,"0$1",""]
+,[,"(177)(\\d{6,8})","$1 $2",["1"]
+,"0$1",""]
+,[,"(800)(\\d{5,7})","$1 $2",["800"]
+,"0$1",""]
+,[,"(809)(\\d)(\\d{3})(\\d{3})","$1 $2 $3 $4",["809"]
+,"0$1",""]
+]
+]
+,
+  "IE": [,[,,"[124-9]\\d{6,9}","\\d{5,10}"]
+,[,,"1\\d{7,8}|(?:2[24-9]|4(?:0[24]|7)|5(?:0[45]|8)|6[237-9]|9[3-9])\\d{5}|(?:45|[569]1|818)\\d{6}|(?:4[12469]|5[3679]|6[56]|7[14]|9[04])\\d{7}|21\\d{6,7}|(?:23|4[34]|52|64)\\d{5,7}|48\\d{8}","\\d{5,10}"]
+,[,,"8[35-9]\\d{7}","\\d{9}"]
+,[,,"1800\\d{6}","\\d{10}"]
+,[,,"15(?:1[2-9]|[2-8]0|59|9[089])\\d{6}","\\d{10}"]
+,[,,"18[59]0\\d{6}","\\d{10}"]
+,[,,"700\\d{6}","\\d{9}"]
+,[,,"76\\d{7}","\\d{9}"]
+,"IE",353,"00","0",,,"0",,,,[[,"(1)(\\d{3,4})(\\d{4})","$1 $2 $3",["1"]
+,"(0$1)",""]
+,[,"(\\d{2})(\\d{5})","$1 $2",["2[2-9]|4[347]|5[2-58]|6[2-47-9]|9[3-9]"]
+,"(0$1)",""]
+,[,"(\\d{3})(\\d{5})","$1 $2",["40[24]|50[45]"]
+,"(0$1)",""]
+,[,"(48)(\\d{4})(\\d{4})","$1 $2 $3",["48"]
+,"(0$1)",""]
+,[,"(818)(\\d{3})(\\d{3})","$1 $2 $3",["81"]
+,"(0$1)",""]
+,[,"(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["[24-69]|7[14]"]
+,"(0$1)",""]
+,[,"([78]\\d)(\\d{3})(\\d{4})","$1 $2 $3",["76|8[35-9]"]
+,"0$1",""]
+,[,"(700)(\\d{3})(\\d{3})","$1 $2 $3",["70"]
+,"0$1",""]
+,[,"(\\d{4})(\\d{3})(\\d{3})","$1 $2 $3",["1(?:8[059]|5)","1(?:8[059]0|5)"]
+,"$1",""]
+]
+]
+,
+  "IL": [,[,,"[1-57-9]\\d{6,9}","\\d{7,10}"]
+,[,,"(?:[2-489]|7[2-46-8])\\d{7}","\\d{7,9}"]
+,[,,"5[024679]\\d{7}","\\d{9}"]
+,[,,"1(?:80[01]\\d{3}|255)\\d{3}","\\d{7,10}"]
+,[,,"1(?:212|(?:919|200)\\d{2})\\d{4}","\\d{8,10}"]
+,[,,"1(?:700|809)\\d{6}","\\d{10}"]
+,[,,"NA","NA"]
+,[,,"77\\d{7}","\\d{9}"]
+,"IL",972,"0(?:0|1[2-48])","0",,,"0",,,,[[,"([2-489])(\\d{3})(\\d{4})","$1-$2-$3",["[2-489]"]
+,"0$1",""]
+,[,"([57]\\d)(\\d{3})(\\d{4})","$1-$2-$3",["[57]"]
+,"0$1",""]
+,[,"(1)([7-9]\\d{2})(\\d{3})(\\d{3})","$1-$2-$3-$4",["1[7-9]"]
+,"$1",""]
+,[,"(1255)(\\d{3})","$1-$2",["125"]
+,"$1",""]
+,[,"(1200)(\\d{3})(\\d{3})","$1-$2-$3",["120"]
+,"$1",""]
+,[,"(1212)(\\d{2})(\\d{2})","$1-$2-$3",["121"]
+,"$1",""]
+]
+]
+,
+  "IM": [,[,,"[157-9]\\d{6,9}","\\d{6,10}"]
+,[,,"1624\\d{6}","\\d{6,10}"]
+,[,,"7[69]24\\d{6}","\\d{6,10}"]
+,[,,"80(?:01111|\\d{7,8})|500\\d{6}","\\d{7,10}"]
+,[,,"(?:9[018]\\d|87[1-3])\\d{7}","\\d{10}"]
+,[,,"8(?:4[3-5]|70)\\d{7}","\\d{10}"]
+,[,,"70\\d{8}","\\d{10}"]
+,[,,"56\\d{8}","\\d{10}"]
+,"IM",44,"00","0"," x",,"0"]
+,
+  "IN": [,[,,"[1-9]\\d{9,10}","\\d{6,11}"]
+,[,,"(?:11|2[02]|33|4[04]|79|80)[2-6]\\d{7}|(?:1(?:2[0-249]|3[0-25]|4[145]|5[14]|6[014]|7[1257]|8[01346]|9[14])|2(?:1[257]|3[013]|4[01]|5[0137]|6[0158]|78|8[1568]|9[14])|3(?:26|4[1-3]|5[34]|6[01489]|7[02-46]|8[159])|4(?:1[36]|2[1-47]|3[15]|5[12]|6[126-9]|7[0-24-9]|8[013-57]|9[014-7])|5(?:1[25]|22|3[25]|4[28]|5[12]|6[25]|[78]1|9[15])|6(?:12|[2345]1|57|6[13]|7[14]|80)|7(?:12|2[14]|3[134]|4[47]|5[15]|[67]1|88)|8(?:16|2[014]|3[126]|6[136]|7[078]|8[34]|91))[2-6]\\d{6}|(?:(?:1(?:2[35-8]|3[346-9]|4[236-9]|5[0235-9]|6[235-9]|7[34689]|8[257-9]|9[0235-9])|2(?:1[134689]|3[24-8]|4[2-8]|5[25689]|6[2-4679]|7[13-79]|8[2-479]|9[235-9])|3(?:01|1[79]|2[1-5]|4[25-8]|5[125689]|6[235-7]|7[157-9]|8[2-467])|4(?:1[14578]|2[5689]|3[2-467]|5[4-7]|6[35]|73|8[2689]|9[2389])|5(?:1[146-9]|2[14-8]|3[1346]|4[14-69]|5[46]|6[146-9]|7[2-4]|8[2-8]|9[246])|6(?:1[1358]|2[2457]|3[2-4]|4[235-7]|5[2-689]|6[24-58]|7[23-689]|8[1-6])|8(?:1[1357-9]|2[235-8]|3[03-57-9]|4[0-24-9]|5\\d|6[2457-9]|7[1-6]|8[1256]|9[2-4]))\\d|7(?:(?:1[013-9]|2[0235-9]|3[2679]|4[1-35689]|5[2-46-9]|[67][02-9]|9\\d)\\d|8(?:2[0-6]|[013-8]\\d)))[2-6]\\d{5}","\\d{6,10}"]
+,[,,"(?:7(?:39[89]|5(?:50|6[6-8]|79|[89][7-9])|6(?:0[027]|20|3[19]|54|65|7[67]|9[6-9])|7(?:0[89]|3[589]|42|60|9[5-9])|8(?:[03][07-9]|14|2[7-9]|4[25]|6[09]))\\d|9\\d{4}|8(?:0[01589]\\d|1[024]\\d|8(?:[079]\\d|44)|9[057-9]\\d)\\d)\\d{5}","\\d{10}"]
+,[,,"1(?:800\\d?|600)\\d{6}","\\d{10,11}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"IN",91,"00","0",,,"0",,,,[[,"(\\d{2})(\\d{2})(\\d{6})","$1 $2 $3",["7(?:39|5[5-9]|[67][02-9]|8[0-6])|8(?:0[01589]|1[024]|8[0479]|9[057-9])|9","7(?:39|5(?:50|[6-9])|[67][02-9]|8[0-6])|8(?:0[01589]|1[024]|8(?:[079]|44)|9[057-9])|9"]
+,"0$1",""]
+,[,"(\\d{2})(\\d{4})(\\d{4})","$1 $2 $3",["11|2[02]|33|4[04]|79|80[2-6]"]
+,"0$1",""]
+,[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["1(?:2[0-249]|3[0-25]|4[145]|[569][14]|7[1257]|8[1346]|[68][1-9])"]
+,"0$1",""]
+,[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["2(?:1[257]|3[013]|4[01]|5[0137]|6[0158]|78|8[1568]|9[14])"]
+,"0$1",""]
+,[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["3(?:26|4[1-3]|5[34]|6[01489]|7[02-46]|8[159])"]
+,"0$1",""]
+,[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["4(?:1[36]|2[1-47]|3[15]|5[12]|6[126-9]|7[0-24-9]|8[013-57]|9[014-7])"]
+,"0$1",""]
+,[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["5(?:[136][25]|22|4[28]|5[12]|[78]1|9[15])"]
+,"0$1",""]
+,[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["6(?:12|[2345]1|57|6[13]|7[14]|80)"]
+,"0$1",""]
+,[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["7(?:12|2[14]|3[134]|4[47]|5[15]|[67]1|88)","7(?:12|2[14]|3[134]|4[47]|5(?:1|5[1-9])|[67]1|88)"]
+,"0$1",""]
+,[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["8(?:16|2[014]|3[126]|6[136]|7[078]|8[34]|91)"]
+,"0$1",""]
+,[,"(\\d{4})(\\d{3})(\\d{3})","$1 $2 $3",["1(?:[2-579]|[68][1-9])|[2-8]"]
+,"0$1",""]
+,[,"(1600)(\\d{2})(\\d{4})","$1 $2 $3",["160","1600"]
+,"$1",""]
+,[,"(1800)(\\d{2,3})(\\d{4})","$1 $2 $3",["180","1800"]
+,"$1",""]
+]
+]
+,
+  "IO": [,[]
+,[]
+,[]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"IO",246,"00",,,,,,,1]
+,
+  "IQ": [,[,,"[1-7]\\d{7,9}","\\d{6,10}"]
+,[,,"1\\d{7}|(?:2[13-5]|3[02367]|4[023]|5[03]|6[026])\\d{6,7}","\\d{6,9}"]
+,[,,"7[5-9]\\d{8}","\\d{10}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"IQ",964,"00","0",,,"0",,,,[[,"(1)(\\d{3})(\\d{4})","$1 $2 $3",["1"]
+,"0$1",""]
+,[,"([2-6]\\d)(\\d{3})(\\d{3,4})","$1 $2 $3",["[2-6]"]
+,"0$1",""]
+,[,"(7[5-9]\\d)(\\d{3})(\\d{4})","$1 $2 $3",["7"]
+,"0$1",""]
+]
+]
+,
+  "IR": [,[,,"[1-9]\\d{9}","\\d{7,10}"]
+,[,,"[1-8]\\d{9}","\\d{7,10}"]
+,[,,"9(?:1\\d|3[1-8])\\d{7}","\\d{10}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"IR",98,"00","0",,,"0",,,,[[,"(21)(\\d{4})(\\d{4})","$1 $2 $3",["21"]
+,"0$1",""]
+,[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["[13-89]|2[02-9]"]
+,"0$1",""]
+]
+]
+,
+  "IS": [,[]
+,[]
+,[]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"IS",354,"00","0",,,"0",,,1]
+,
+  "IT": [,[,,"[01389]\\d{5,10}","\\d{6,11}"]
+,[,,"0\\d{7,10}","\\d{8,11}"]
+,[,,"3\\d{8,9}","\\d{9,10}"]
+,[,,"80(?:0\\d{6}|3\\d{3})","\\d{6,9}"]
+,[,,"89(?:2\\d{3}|9\\d{6})","\\d{6,9}"]
+,[,,"84[78]\\d{6,7}","\\d{9,10}"]
+,[,,"178\\d{6,7}","\\d{9,10}"]
+,[,,"NA","NA"]
+,"IT",39,"00",,,,,,,,[[,"(0[26])(\\d{3,4})(\\d{4})","$1 $2 $3",["0[26]"]
+,"",""]
+,[,"(0[26])(\\d{4})(\\d{5})","$1 $2 $3",["0[26]"]
+,"",""]
+,[,"(0[26])(\\d{6})","$1 $2",["0[26]"]
+,"",""]
+,[,"(0\\d{2})(\\d{3,4})(\\d{4})","$1 $2 $3",["0(?:[13-57-9][0159]|36)"]
+,"",""]
+,[,"(0\\d{2})(\\d{5,6})","$1 $2",["0(?:[13-57-9][0159]|36)"]
+,"",""]
+,[,"(0\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["0[13-57-9]"]
+,"",""]
+,[,"(0\\d{3})(\\d{4,6})","$1 $2",["0[13-57-9]"]
+,"",""]
+,[,"(\\d{3})(\\d{3})(\\d{3,4})","$1 $2 $3",["[13]|8(?:00|4[78])"]
+,"",""]
+,[,"(\\d{3})(\\d{3,6})","$1 $2",["8(?:03|9)"]
+,"",""]
+]
+]
+,
+  "JE": [,[,,"[157-9]\\d{6,9}","\\d{6,10}"]
+,[,,"1534\\d{6}","\\d{6,10}"]
+,[,,"7(?:7(?:00|97)|829|937)\\d{6}","\\d{10}"]
+,[,,"80(?:01111|\\d{7,8})|500\\d{6}","\\d{7,10}"]
+,[,,"(?:9[018]\\d|87[1-3])\\d{7}","\\d{10}"]
+,[,,"8(?:4[3-5]|70)\\d{7}","\\d{10}"]
+,[,,"70\\d{8}","\\d{10}"]
+,[,,"56\\d{8}","\\d{10}"]
+,"JE",44,"00","0"," x",,"0"]
+,
+  "JM": [,[,,"[89]\\d{9}","\\d{7,10}"]
+,[,,"876(?:(?:5[0-26]|6\\d|7[1-6]|9[2-8])\\d{5}|(?:7(?:0[2-689]|8[056]|9[45])|9(?:0[1-8]|1[02378]|9[2-468]))\\d{4})","\\d{7,10}"]
+,[,,"876(?:(?:21|[348]\\d|5[78]|77)\\d|7(?:0[07]|8[1-47-9]|9[0-36-9])|9(?:[01]9|9[0579]))\\d{4}","\\d{10}"]
+,[,,"8(?:00|66|77|88)[2-9]\\d{6}","\\d{10}"]
+,[,,"900[2-9]\\d{6}","\\d{10}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"JM",1,"011",,,,,,,,,,,,"876"]
+,
+  "JO": [,[,,"[235-9]\\d{7,8}","\\d{7,9}"]
+,[,,"[2356][2-8]\\d{6}","\\d{7,8}"]
+,[,,"7(?:4[5-7]|55|7[5-79]|8[5-8]|9[05-9])\\d{6}","\\d{9}"]
+,[,,"80\\d{6}","\\d{8}"]
+,[,,"90\\d{6}","\\d{8}"]
+,[,,"(?:8[57]\\d|810)\\d{5}","\\d{8}"]
+,[,,"70\\d{7}","\\d{9}"]
+,[,,"NA","NA"]
+,"JO",962,"00","0",,,"0",,,,[[,"([2356])(\\d{3})(\\d{4})","$1 $2 $3",["[2356]"]
+,"(0$1)",""]
+,[,"(7)(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4 $5",["7[457-9]"]
+,"0$1",""]
+,[,"(\\d{3})(\\d{5,6})","$1 $2",["70|[89]"]
+,"0$1",""]
+]
+]
+,
+  "JP": [,[,,"\\d{9,10}","\\d{9,10}"]
+,[,,"(?:1[1-9][1-9]|9(?:[3-9][1-9]|2\\d)|(?:[36][1-9]|[24578][2-9])\\d)\\d{6}","\\d{9}"]
+,[,,"[7-9]0\\d{8}","\\d{10}"]
+,[,,"120\\d{6}","\\d{9}"]
+,[,,"990\\d{6}","\\d{9}"]
+,[,,"NA","NA"]
+,[,,"60\\d{7}","\\d{9}"]
+,[,,"50\\d{8}","\\d{10}"]
+,"JP",81,"010","0",,,"0",,,,[[,"(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["(?:12|99)0"]
+,"0$1",""]
+,[,"(\\d{2})(\\d{4})(\\d{4})","$1 $2 $3",["[57-9]0"]
+,"0$1",""]
+,[,"(\\d{4})(\\d)(\\d{4})","$1 $2 $3",["1(?:26|3[79]|4[56]|5[4-68]|6[3-5])|5(?:76|97)|499|746|8(?:3[89]|63|47|51)|9(?:49|80|9[16])","1(?:267|3(?:7[247]|9[278])|4(?:5[67]|66)|5(?:47|58|64|8[67])|6(?:3[245]|48|5[4-68]))|5(?:76|97)9|499[2468]|7468|8(?:3(?:8[78]|96)|636|477|51[24])|9(?:496|802|9(?:1[23]|69))","1(?:267|3(?:7[247]|9[278])|4(?:5[67]|66)|5(?:47|58|64|8[67])|6(?:3[245]|48|5[4-68]))|5(?:769|979[2-69])|499[2468]|7468|8(?:3(?:8[78]|96[2457-9])|636[2-57-9]|477|51[24])|9(?:496|802|9(?:1[23]|69))"]
+,"0$1",""]
+,[,"(\\d{3})(\\d{2})(\\d{4})","$1 $2 $3",["1(?:2[3-6]|3[3-9]|4[2-6]|5[2-8]|[68][2-7]|7[2-689]|9[1-578])|2(?:2[034-9]|3[3-58]|4[0-468]|5[04-8]|6[013-8]|7[06-9]|8[02-57-9]|9[13])|4(?:2[28]|3[689]|6[035-7]|7[05689]|80|9[3-5])|5(?:3[1-36-9]|4[4578]|5[013-8]|6[1-9]|7[2-8]|8[14-7]|9[4-9])|7(?:2[15]|3[5-9]|4[02-9]|6[135-8]|7[0-4689]|9[014-9])|8(?:2[49]|3[3-8]|4[5-8]|5[2-9]|6[35-9]|7[579]|8[03-579]|9[2-8])|9(?:[23]0|4[02-46-9]|5[0245-79]|6[4-9]|7[2-47-9]|8[02-7]|9[3-7])","1(?:2[3-6]|3[3-9]|4[2-6]|5(?:[236-8]|[45][2-69])|[68][2-7]|7[2-689]|9[1-578])|2(?:2(?:[04-9]|3[23])|3[3-58]|4[0-468]|5(?:5[78]|7[2-4]|[0468][2-9])|6(?:[0135-8]|4[2-5])|7(?:[0679]|8[2-7])|8(?:[024578]|3[25-9]|9[6-9])|9(?:11|3[2-4]))|4(?:2(?:2[2-9]|8[237-9])|3[689]|6[035-7]|7(?:[059][2-8]|[68])|80|9[3-5])|5(?:3[1-36-9]|4[4578]|5[013-8]|6[1-9]|7[2-8]|8[14-7]|9(?:[89][2-8]|[4-7]))|7(?:2[15]|3[5-9]|4[02-9]|6[135-8]|7[0-4689]|9(?:[017-9]|4[6-8]|5[2-478]|6[2-589]))|8(?:2(?:4[4-8]|9[2-8])|3(?:7[2-56]|[3-6][2-9]|8[2-5])|4[5-8]|5[2-9]|6(?:[37]|5[4-7]|6[2-9]|8[2-8]|9[236-9])|7[579]|8[03-579]|9[2-8])|9(?:[23]0|4[02-46-9]|5[0245-79]|6[4-9]|7[2-47-9]|8[02-7]|9(?:3[34]|[4-7]))","1(?:2[3-6]|3[3-9]|4[2-6]|5(?:[236-8]|[45][2-69])|[68][2-7]|7[2-689]|9[1-578])|2(?:2(?:[04-9]|3[23])|3[3-58]|4[0-468]|5(?:5[78]|7[2-4]|[0468][2-9])|6(?:[0135-8]|4[2-5])|7(?:[0679]|8[2-7])|8(?:[024578]|3[25-9]|9[6-9])|9(?:11|3[2-4]))|4(?:2(?:2[2-9]|8[237-9])|3[689]|6[035-7]|7(?:[059][2-8]|[68])|80|9[3-5])|5(?:3[1-36-9]|4[4578]|5[013-8]|6[1-9]|7[2-8]|8[14-7]|9(?:[89][2-8]|[4-7]))|7(?:2[15]|3[5-9]|4[02-9]|6[135-8]|7[0-4689]|9(?:[017-9]|4[6-8]|5[2-478]|6[2-589]))|8(?:2(?:4[4-8]|9(?:[3578]|20|4[04-9]|6[56]))|3(?:7(?:[2-5]|6[0-59])|[3-6][2-9]|8[2-5])|4[5-8]|5[2-9]|6(?:[37]|5(?:[467]|5[014-9])|6(?:[2-8]|9[02-69])|8[2-8]|9(?:[236-8]|9[23]))|7[579]|8[03-579]|9[2-8])|9(?:[23]0|4[02-46-9]|5[0245-79]|6[4-9]|7[2-47-9]|8[02-7]|9(?:3(?:3[02-9]|4[0-24689])|4[2-69]|[5-7]))","1(?:2[3-6]|3[3-9]|4[2-6]|5(?:[236-8]|[45][2-69])|[68][2-7]|7[2-689]|9[1-578])|2(?:2(?:[04-9]|3[23])|3[3-58]|4[0-468]|5(?:5[78]|7[2-4]|[0468][2-9])|6(?:[0135-8]|4[2-5])|7(?:[0679]|8[2-7])|8(?:[024578]|3[25-9]|9[6-9])|9(?:11|3[2-4]))|4(?:2(?:2[2-9]|8[237-9])|3[689]|6[035-7]|7(?:[059][2-8]|[68])|80|9[3-5])|5(?:3[1-36-9]|4[4578]|5[013-8]|6[1-9]|7[2-8]|8[14-7]|9(?:[89][2-8]|[4-7]))|7(?:2[15]|3[5-9]|4[02-9]|6[135-8]|7[0-4689]|9(?:[017-9]|4[6-8]|5[2-478]|6[2-589]))|8(?:2(?:4[4-8]|9(?:[3578]|20|4[04-9]|6(?:5[25]|60)))|3(?:7(?:[2-5]|6[0-59])|[3-6][2-9]|8[2-5])|4[5-8]|5[2-9]|6(?:[37]|5(?:[467]|5[014-9])|6(?:[2-8]|9[02-69])|8[2-8]|9(?:[236-8]|9[23]))|7[579]|8[03-579]|9[2-8])|9(?:[23]0|4[02-46-9]|5[0245-79]|6[4-9]|7[2-47-9]|8[02-7]|9(?:3(?:3[02-9]|4[0-24689])|4[2-69]|[5-7]))"]
+,"0$1",""]
+,[,"(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["1|2(?:23|5[5-89]|64|78|8[39]|91)|4(?:2[2689]|64|7[347])|5(?:[2-589]|39)|8(?:[46-9]|3[279]|2[124589])|9(?:[235-8]|93)","1|2(?:23|5(?:[57]|[68]0|9[19])|64|78|8[39]|917)|4(?:2(?:[68]|20|9[178])|64|7[347])|5(?:[2-589]|39[67])|8(?:[46-9]|3[279]|2[124589])|9(?:[235-8]|93[34])","1|2(?:23|5(?:[57]|[68]0|9(?:17|99))|64|78|8[39]|917)|4(?:2(?:[68]|20|9[178])|64|7[347])|5(?:[2-589]|39[67])|8(?:[46-9]|3[279]|2[124589])|9(?:[235-8]|93(?:31|4))"]
+,"0$1",""]
+,[,"(\\d{3})(\\d{2})(\\d{4})","$1 $2 $3",["2(?:9[14-79]|74|[34]7|[56]9)|82|993"]
+,"0$1",""]
+,[,"(\\d)(\\d{4})(\\d{4})","$1 $2 $3",["[36]|4(?:2[09]|7[01])"]
+,"0$1",""]
+,[,"(\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["[2479]"]
+,"0$1",""]
+]
+]
+,
+  "KE": [,[,,"\\d{6,10}","\\d{4,10}"]
+,[,,"(?:20|4[0-6]|5\\d|6[0-24-9])\\d{4,7}","\\d{4,9}"]
+,[,,"7(?:1[0-6]|2\\d|3[2-8]|5[0-2]|7[023])\\d{6}","\\d{9}"]
+,[,,"8(?:00|88)\\d{6,7}","\\d{9,10}"]
+,[,,"9(?:00|1)\\d{6,7}","\\d{8,10}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"KE",254,"000","0",,,"0",,,,[[,"(\\d{2})(\\d{4,7})","$1 $2",["[2-6]|91"]
+,"0$1",""]
+,[,"(\\d{3})(\\d{6,7})","$1 $2",["[78]|90"]
+,"0$1",""]
+]
+]
+,
+  "KG": [,[,,"[356-8]\\d{8}","\\d{5,9}"]
+,[,,"(?:3(?:1(?:2\\d|3[1-9]|52|6[1-8])|2(?:22|3[0-479]|6[0-7])|4(?:22|5[6-9]|6[0-4])|5(?:22|3[4-7]|59|6[0-5])|6(?:22|5[35-7]|6[0-3])|7(?:22|3[468]|4[1-8]|59|6\\d|7[5-7])|9(?:22|4[1-7]|6[0-8]))|6(?:09|12|2[2-4])\\d)\\d{5}","\\d{5,9}"]
+,[,,"5[124-7]\\d{7}|7(?:0[05]|7\\d)\\d{6}","\\d{9}"]
+,[,,"800\\d{6}","\\d{9}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"KG",996,"00","0",,,"0",,,,[[,"(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["31[25]|[5-8]"]
+,"0$1",""]
+,[,"(\\d{4})(\\d{5})","$1 $2",["3(?:1[36]|[2-9])"]
+,"0$1",""]
+]
+]
+,
+  "KH": [,[,,"[1-9]\\d{7,9}","\\d{6,10}"]
+,[,,"(?:2[3-6]|3[2-6]|4[2-4]|[5-7][2-5])[2-47-9]\\d{5}","\\d{6,8}"]
+,[,,"(?:(?:1[0-35-9]|9[1-49])[1-9]|85[2-689])\\d{5}","\\d{8}"]
+,[,,"1800(?:1\\d|2[09])\\d{4}","\\d{10}"]
+,[,,"1900(?:1\\d|2[09])\\d{4}","\\d{10}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"KH",855,"00[178]","0",,,"0",,,,[[,"(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["1\\d[1-9]|[2-9]"]
+,"0$1",""]
+,[,"(1[89]00)(\\d{3})(\\d{3})","$1 $2 $3",["1[89]0"]
+,"",""]
+]
+]
+,
+  "KI": [,[]
+,[]
+,[]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"KI",686,"00","0",,,"0",,,1]
+,
+  "KM": [,[,,"[37]\\d{6}","\\d{7}"]
+,[,,"7(?:6[0-37-9]|7[0-57-9])\\d{4}","\\d{7}"]
+,[,,"3[23]\\d{5}","\\d{7}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"KM",269,"00",,,,,,,,[[,"(\\d)(\\d{3})(\\d{3})","$1 $2 $3",,"",""]
+]
+]
+,
+  "KN": [,[,,"[89]\\d{9}","\\d{7,10}"]
+,[,,"869(?:2(?:29|36)|4(?:6[5-9]|70))\\d{4}","\\d{7,10}"]
+,[,,"869(?:5(?:5[6-8]|6[5-7])|66[2-9]|76[2-5])\\d{4}","\\d{10}"]
+,[,,"8(?:00|66|77|88)[2-9]\\d{6}","\\d{10}"]
+,[,,"900[2-9]\\d{6}","\\d{10}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"KN",1,"011",,,,,,,,,,,,"869"]
+,
+  "KP": [,[]
+,[]
+,[]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"KP",850,"00","0",,,"0",,,1]
+,
+  "KR": [,[,,"[1-79]\\d{3,9}|8\\d{8}","\\d{4,10}"]
+,[,,"(?:2|[34][1-3]|5[1-5]|6[1-4])(?:1\\d{2,3}|[2-9]\\d{6,7})","\\d{4,10}"]
+,[,,"1[0-25-9]\\d{7,8}","\\d{9,10}"]
+,[,,"80\\d{7}","\\d{9}"]
+,[,,"60[2-9]\\d{6}","\\d{9}"]
+,[,,"NA","NA"]
+,[,,"50\\d{8}","\\d{10}"]
+,[,,"70\\d{8}","\\d{10}"]
+,"KR",82,"00(?:[124-68]|[37]\\d{2})","0",,,"0(?:8[1-46-8]|85\\d{2})?",,,,[[,"(\\d{2})(\\d{4})(\\d{4})","$1-$2-$3",["1(?:0|1[19]|[69]9|5[458])|[57]0","1(?:0|1[19]|[69]9|5(?:44|59|8))|[57]0"]
+,"0$1",""]
+,[,"(\\d{2})(\\d{3})(\\d{4})","$1-$2-$3",["1(?:[169][2-8]|[78]|5[1-4])|[68]0|[3-9][1-9][2-9]","1(?:[169][2-8]|[78]|5(?:[1-3]|4[56]))|[68]0|[3-9][1-9][2-9]"]
+,"0$1",""]
+,[,"(\\d{3})(\\d)(\\d{4})","$1-$2-$3",["131","1312"]
+,"0$1",""]
+,[,"(\\d{3})(\\d{2})(\\d{4})","$1-$2-$3",["131","131[13-9]"]
+,"0$1",""]
+,[,"(\\d{3})(\\d{3})(\\d{4})","$1-$2-$3",["13[2-9]"]
+,"0$1",""]
+,[,"(\\d{2})(\\d{2})(\\d{3})(\\d{4})","$1-$2-$3-$4",["30"]
+,"0$1",""]
+,[,"(\\d)(\\d{4})(\\d{4})","$1-$2-$3",["2(?:[26]|3[0-467])","2(?:[26]|3(?:01|1[45]|2[17-9]|39|4|6[67]|7[078]))"]
+,"0$1",""]
+,[,"(\\d)(\\d{3})(\\d{4})","$1-$2-$3",["2(?:3[0-35-9]|[457-9])","2(?:3(?:0[02-9]|1[0-36-9]|2[02-6]|3[0-8]|6[0-589]|7[1-69]|[589])|[457-9])"]
+,"0$1",""]
+,[,"(\\d)(\\d{3,4})","$1-$2",["21[0-46-9]"]
+,"0$1",""]
+,[,"(\\d{2})(\\d{3,4})","$1-$2",["[3-9][1-9]1","[3-9][1-9]1(?:[0-46-9])"]
+,"0$1",""]
+]
+]
+,
+  "KW": [,[,,"[12569]\\d{6,7}","\\d{7,8}"]
+,[,,"(?:18|2[2-5]\\d)\\d{5}","\\d{7,8}"]
+,[,,"(?:5[05]|6[05-7]|9[0479])\\d{6}","\\d{8}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"KW",965,"00","0",,,"0",,,,[[,"(\\d{4})(\\d{3,4})","$1 $2",["[1269]"]
+,"0$1",""]
+,[,"(5[05]\\d)(\\d{5})","$1 $2",["5"]
+,"0$1",""]
+]
+]
+,
+  "KY": [,[,,"[389]\\d{9}","\\d{7,10}"]
+,[,,"345(?:2(?:22|44)|444|6(?:23|38|40)|7(?:6[6-9]|77)|8(?:00|1[45]|25|4[89]|88)|9(?:14|4[035-9]))\\d{4}","\\d{7,10}"]
+,[,,"345(?:32[3-79]|5(?:1[467]|2[5-7]|4[5-9])|9(?:1[679]|2[4-9]|3[89]))\\d{4}","\\d{10}"]
+,[,,"8(?:00|66|77|88)[2-9]\\d{6}","\\d{10}"]
+,[,,"900[2-9]\\d{6}|345976\\d{4}","\\d{10}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"KY",1,"011",,,,,,,,,,,,"345"]
+,
+  "KZ": [,[,,"(?:[67]\\d{2}|80[09])\\d{7}","\\d{10}"]
+,[,,"7(?:1\\d[2-7]|2(?:[0-689][2-7]|75[279]))\\d{6}","\\d{10}"]
+,[,,"7(?:(?:(?:1[2-578]|2[13-7])9[01]|2758)\\d{5}|(?:0[0-257]|6[02-4]|7[57])\\d{7})|6\\{9}","\\d{10}"]
+,[,,"800\\d{7}","\\d{10}"]
+,[,,"809\\d{7}","\\d{10}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"KZ",7,"8~10","8",,,"8"]
+,
+  "LA": [,[,,"[2-57]\\d{7,9}","\\d{6,10}"]
+,[,,"(?:[2-57]1|54)\\d{6}","\\d{6,8}"]
+,[,,"20(?:[23]|5[4-6]|77|9[89])\\d{6}","\\d{9,10}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"LA",856,"00","0",,,"0",,,,[[,"(20)([23])(\\d{3})(\\d{3})","$1 $2 $3 $4",["20[23]"]
+,"0$1",""]
+,[,"(20)([579]\\d)(\\d{3})(\\d{3})","$1 $2 $3 $4",["20[579]"]
+,"0$1",""]
+,[,"([2-57]\\d)(\\d{3})(\\d{3})","$1 $2 $3",["21|[3-57]"]
+,"0$1",""]
+]
+]
+,
+  "LB": [,[,,"[13-9]\\d{6,7}","\\d{7,8}"]
+,[,,"(?:[14-6]\\d|[7-9][2-9])\\d{5}","\\d{7}"]
+,[,,"(3\\d|7(?:0\\d|1[167]))\\d{5}","\\d{7,8}"]
+,[,,"NA","NA"]
+,[,,"8[01]\\d{6}","\\d{8}"]
+,[,,"9[01]\\d{6}","\\d{8}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"LB",961,"00","0",,,"0",,,,[[,"([13-6])(\\d{3})(\\d{3})","$1 $2 $3",["[13-6]"]
+,"0$1",""]
+,[,"([7-9][01])(\\d{3})(\\d{3})","$1 $2 $3",["[7-9][01]"]
+,"0$1",""]
+,[,"([7-9][2-9])(\\d{2})(\\d{3})","$1 $2 $3",["[7-9][2-9]"]
+,"0$1",""]
+]
+]
+,
+  "LC": [,[,,"[789]\\d{9}","\\d{7,10}"]
+,[,,"758(?:234|4(?:5[0-9]|6[2-9]|8[0-2])|638|758)\\d{4}","\\d{7,10}"]
+,[,,"758(?:28[4-7]|384|4(?:6[01]|8[4-9])|5(?:1[89]|20|84)|7(?:1[2-9]|2[0-4]))\\d{4}","\\d{10}"]
+,[,,"8(?:00|66|77|88)[2-9]\\d{6}","\\d{10}"]
+,[,,"900[2-9]\\d{6}","\\d{10}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"LC",1,"011",,,,,,,,,,,,"758"]
+,
+  "LI": [,[,,"(?:66|80|90)\\d{7}|[237-9]\\d{6}","\\d{7,9}"]
+,[,,"(?:2(?:17|3\\d|6[02-58]|96)|3(?:02|7[01357]|8[048]|9[0269])|870)\\d{4}","\\d{7}"]
+,[,,"66(?:[0178][0-4]|2[025-9]|[36]\\d|4[129]|5[45]|9[019])\\d{5}|7(?:4[2-59]|56|[6-9]\\d)\\d{4}","\\d{7,9}"]
+,[,,"80(?:0(?:07|2[238]|79|\\d{4})|9\\d{2})\\d{2}","\\d{7,9}"]
+,[,,"NA","NA"]
+,[,,"90(?:0(?:2[278]|79|\\d{4})|1(?:23|\\d{4})|6(?:66|\\d{4}))\\d{2}","\\d{7,9}"]
+,[,,"701\\d{4}","\\d{7}"]
+,[,,"NA","NA"]
+,"LI",423,"00",,,,,,,,[[,"(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3",["[23]|7[4-9]|87"]
+,"",""]
+,[,"(6\\d)(\\d{3})(\\d{3})","$1 $2 $3",["6"]
+,"",""]
+,[,"([7-9]0\\d)(\\d{2})(\\d{2})","$1 $2 $3",["[7-9]0"]
+,"",""]
+,[,"([89]0\\d)(\\d{2})(\\d{2})(\\d{2})","0$1 $2 $3 $4",["[89]0"]
+,"",""]
+]
+]
+,
+  "LK": [,[]
+,[]
+,[]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"LK",94,"00","0",,,"0",,,1]
+,
+  "LR": [,[,,"(?:[27]\\d|[4-6])\\d{6}","\\d{7,8}"]
+,[,,"2\\d{7}","\\d{8}"]
+,[,,"(?:4[67]|5\\d|7\\d{2}|6[4-8])\\d{5}","\\d{7,8}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"LR",231,"00","0",,,"0",,,,[[,"([27]\\d)(\\d{3})(\\d{3})","$1 $2 $3",["[27]"]
+,"0$1",""]
+,[,"([4-6])(\\d{3})(\\d{3})","$1 $2 $3",["[4-6]"]
+,"0$1",""]
+]
+]
+,
+  "LS": [,[,,"[2568]\\d{7}","\\d{8}"]
+,[,,"2\\d{7}","\\d{8}"]
+,[,,"[56]\\d{7}","\\d{8}"]
+,[,,"800[256]\\d{4}","\\d{8}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"LS",266,"00",,,,,,,,[[,"(\\d{4})(\\d{4})","$1 $2",,"",""]
+]
+]
+,
+  "LT": [,[,,"[3-9]\\d{7}","\\d{8}"]
+,[,,"(?:3[1478]|4[124-6]|52)\\d{6}","\\d{8}"]
+,[,,"6\\d{7}","\\d{8}"]
+,[,,"800\\d{5}","\\d{8}"]
+,[,,"90[0239]\\d{5}","\\d{8}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"LT",370,"00","8",,,"8",,,,[[,"([34]\\d)(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["37|4(?:1|5[45]|6[2-4])"]
+,"8 $1",""]
+,[,"([3-689]\\d{2})(\\d{2})(\\d{3})","$1 $2 $3",["3[148]|4(?:[24]|6[09])|5(?:[0189]|28)|[689]"]
+,"8 $1",""]
+,[,"(5)(2[0-79]\\d)(\\d{4})","$1 $2 $3",["52[0-79]"]
+,"8 $1",""]
+]
+]
+,
+  "LU": [,[]
+,[]
+,[]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"LU",352,"00",,,,,,,1]
+,
+  "LV": [,[,,"[2689]\\d{7}","\\d{8}"]
+,[,,"6\\d{7}","\\d{8}"]
+,[,,"2\\d{7}","\\d{8}"]
+,[,,"80\\d{6}","\\d{8}"]
+,[,,"90\\d{6}","\\d{8}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"LV",371,"00",,,,,,,,[[,"([2689]\\d)(\\d{3})(\\d{3})","$1 $2 $3",,"",""]
+]
+]
+,
+  "LY": [,[]
+,[]
+,[]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"LY",218,"00","0",,,"0",,,1]
+,
+  "MA": [,[,,"[5689]\\d{8}","\\d{9}"]
+,[,,"5(?:2(?:[015-7]\\d{2}|(?:[28][2-9]|3[2-7]|4[2-8])\\d|9(?:0\\d|[89]0))|3(?:[0-4]\\d{2}|(?:[57][2-9]|6[2-8]|9[3-9])\\d|8(?:0\\d|[89]0)))\\d{4}","\\d{9}"]
+,[,,"6(?:00|33|[15-7]\\d|4[0-8]|99)\\d{6}","\\d{9}"]
+,[,,"80\\d{7}","\\d{9}"]
+,[,,"89\\d{7}","\\d{9}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"MA",212,"00","0",,,"0",,,,[[,"([56]\\d{2})(\\d{6})","$1-$2",["5(?:2[015-7]|3[0-4])|6"]
+,"0$1",""]
+,[,"([58]\\d{3})(\\d{5})","$1-$2",["5(?:2[2-489]|3[5-9])|892","5(?:2(?:[2-48]|90)|3(?:[5-79]|80))|892"]
+,"0$1",""]
+,[,"(5\\d{4})(\\d{4})","$1-$2",["5(?:29|38)","5(?:29|38)[89]"]
+,"0$1",""]
+,[,"(8[09])(\\d{7})","$1-$2",["8(?:0|9[013-9])"]
+,"0$1",""]
+]
+]
+,
+  "MC": [,[]
+,[]
+,[]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"MC",377,"00","0",,,"0",,,1]
+,
+  "MD": [,[,,"[256-9]\\d{7}","\\d{8}"]
+,[,,"(?:2(?:1[0569]|2\\d|3[015-7]|4[1-46-9]|5[0-24689]|6[2-589]|7[1-37]|9[1347-9])|5(?:33|5[257]))\\d{5}","\\d{5,8}"]
+,[,,"(?:6(?:50|7[12]|[89]\\d)|7(?:80|9\\d))\\d{5}","\\d{8}"]
+,[,,"800\\d{5}","\\d{8}"]
+,[,,"900\\d{5}","\\d{8}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"MD",373,"00","0",,,"0",,,,[[,"(22)(\\d{3})(\\d{3})","$1 $2 $3",["22"]
+,"0$1",""]
+,[,"([25-7]\\d{2})(\\d{2})(\\d{3})","$1 $2 $3",["2[13-79]|[5-7]"]
+,"0$1",""]
+,[,"([89]00)(\\d{5})","$1 $2",["[89]"]
+,"0$1",""]
+]
+]
+,
+  "ME": [,[]
+,[]
+,[]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"ME",382,"99","0",,,"0",,,1]
+,
+  "MG": [,[,,"[23]\\d{8}","\\d{7,9}"]
+,[,,"2(?:0(?:(?:2\\d|4[47]|5[3467]|6[279]|8[268]|9[245])\\d|7(?:2[29]|[35]\\d))|210\\d)\\d{4}","\\d{7,9}"]
+,[,,"3[02-4]\\d{7}","\\d{9}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"MG",261,"00","0",,,"0",,,,[[,"([23]\\d)(\\d{2})(\\d{3})(\\d{2})","$1 $2 $3 $4",,"0$1",""]
+]
+]
+,
+  "MF": [,[,,"[56]\\d{8}","\\d{9}"]
+,[,,"590(?:10|2[79]|5[128]|[78]7)\\d{4}","\\d{9}"]
+,[,,"690(?:10|2[27]|66|77|8[78])\\d{4}","\\d{9}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"MF",590,"00","0",,,"0"]
+,
+  "MH": [,[]
+,[]
+,[]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"MH",692,"011","1",,,"1",,,1]
+,
+  "MK": [,[,,"[2-578]\\d{7}","\\d{8}"]
+,[,,"(?:2\\d|3[1-4]|4[2-8])\\d{6}","\\d{6,8}"]
+,[,,"7\\d{7}","\\d{8}"]
+,[,,"800\\d{5}","\\d{8}"]
+,[,,"5[02-9]\\d{6}","\\d{8}"]
+,[,,"8(?:0[1-9]|[1-9]\\d)\\d{5}","\\d{8}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"MK",389,"00","0",,,"0",,,,[[,"(2)(\\d{3})(\\d{4})","$1 $2 $3",["2"]
+,"0$1",""]
+,[,"([347]\\d)(\\d{3})(\\d{3})","$1 $2 $3",["[347]"]
+,"0$1",""]
+,[,"([58]\\d{2})(\\d)(\\d{2})(\\d{2})","$1 $2 $3 $4",["[58]"]
+,"0$1",""]
+]
+]
+,
+  "ML": [,[,,"[246-8]\\d{7}","\\d{8}"]
+,[,,"(?:2(?:0(?:2[0-589]|7[027-9])|1(?:2[5-7]|[3-689]\\d))|442\\d)\\d{4}","\\d{8}"]
+,[,,"(?:6(?:[569]\\d)|7(?:[08][1-9]|[3579][0-4]|4[014-7]|6\\d))\\d{5}","\\d{8}"]
+,[,,"800\\d{5}","\\d{8}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"ML",223,"00","0",,,"0",,,,[[,"([246-8]\\d)(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",,"",""]
+]
+]
+,
+  "MM": [,[,,"[124-8]\\d{5,7}|9\\d{7,8}","\\d{5,9}"]
+,[,,"(?:1\\d|2|4[2-6]|5[2-9]|6\\d|7[0-5]|8[1-6])\\d{5}|1333\\d{4}","\\d{5,8}"]
+,[,,"9(?:[25689]\\d|444)\\d{5}","\\d{8,9}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"MM",95,"00",,,,,,,,[[,"(1)(\\d{3})(\\d{3})","$1 $2 $3",["1"]
+,"",""]
+,[,"(1)(3)(33\\d)(\\d{3})","$1 $2 $3 $4",["133","1333"]
+,"",""]
+,[,"(2)(\\d{2})(\\d{3})","$1 $2 $3",["2"]
+,"",""]
+,[,"(\\d{2})(\\d{2})(\\d{3})","$1 $2 $3",["[4-8]"]
+,"",""]
+,[,"(9444)(\\d{5})","$1 $2",["94"]
+,"",""]
+,[,"(9)([25689]\\d{2})(\\d{4})","$1 $2 $3",["9[25689]"]
+,"",""]
+]
+]
+,
+  "MN": [,[,,"[127-9]\\d{7}","\\d{8}"]
+,[,,"(?:[12](?:1\\d|2[1-37]|3[2-8]|4[2-68]|5[1-4689])|70)\\d{6}","\\d{8}"]
+,[,,"(?:88|9[1569])\\d{6}","\\d{8}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"MN",976,"001","0",,,"0",,,,[[,"([127-9]\\d)(\\d{2})(\\d{4})","$1 $2 $3",["[12]1|[7-9]"]
+,"0$1",""]
+,[,"([12]2\\d)(\\d{5})","$1 $2",["[12]2[1-3]"]
+,"0$1",""]
+,[,"([12]\\d{3})(\\d{4})","$1 $2",["[12](?:27|[3-5])","[12](?:27|[3-5]\\d)2"]
+,"0$1",""]
+,[,"([12]\\d{4})(\\d{3})","$1 $2",["[12](?:27|[3-5])","[12](?:27|[3-5]\\d)[4-9]"]
+,"0$1",""]
+]
+]
+,
+  "MO": [,[,,"[268]\\d{7}","\\d{8}"]
+,[,,"(?:28[2-57-9]|8[2-57-9]\\d)\\d{5}","\\d{8}"]
+,[,,"6[26]\\d{6}","\\d{8}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"MO",853,"00",,,,,,,,[[,"([268]\\d{3})(\\d{4})","$1 $2",,"",""]
+]
+]
+,
+  "MP": [,[,,"[689]\\d{9}","\\d{7,10}"]
+,[,,"670(?:2(?:3[3-5]|88|56)|32[23]|4[38]3|532|6(?:64|70|8\\d))\\d{4}","\\d{7,10}"]
+,[,,"670(?:2(?:3[3-5]|88|56)|32[23]|4[38]3|532|6(?:64|70|8\\d))\\d{4}","\\d{7,10}"]
+,[,,"8(?:00|66|77|88)[2-9]\\d{6}","\\d{10}"]
+,[,,"900[2-9]\\d{6}","\\d{10}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"MP",1,"011",,,,,,,1,,,,,"670"]
+,
+  "MQ": [,[]
+,[]
+,[]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"MQ",596,"00","0",,,"0",,,1]
+,
+  "MR": [,[,,"[2-7]\\d{6}","\\d{7}"]
+,[,,"5(?:1[035]|2[0-69]|3[0348]|4[468]|5[02-467]|6[39]|7[4-69])\\d{4}","\\d{7}"]
+,[,,"(?:[23][0-4]|4[3-5]|6\\d|7[0-7])\\d{5}","\\d{7}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"MR",222,"00",,,,,,,,[[,"([2-7]\\d{2})(\\d{2})(\\d{2})","$1 $2 $3",,"",""]
+]
+]
+,
+  "MS": [,[,,"[689]\\d{9}","\\d{7,10}"]
+,[,,"664491\\d{4}","\\d{7,10}"]
+,[,,"664492\\d{4}","\\d{10}"]
+,[,,"8(?:00|66|77|88)[2-9]\\d{6}","\\d{10}"]
+,[,,"900[2-9]\\d{6}","\\d{10}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"MS",1,"011",,,,,,,,,,,,"664"]
+,
+  "MT": [,[]
+,[]
+,[]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"MT",356,"00","21",,,"21",,,1]
+,
+  "MU": [,[,,"[2-9]\\d{6}","\\d{7}"]
+,[,,"(?:2(?:[034789]\\d|1[0-8]|2[0-79])|4(?:[013-8]\\d|2[4-7])|[56]\\d{2}|8(?:14|3[129]))\\d{4}","\\d{7}"]
+,[,,"(?:25\\d|4(?:2[12389]|9\\d)|7\\d{2}|87[15-7]|9[1-8]\\d)\\d{4}","\\d{7}"]
+,[,,"80[012]\\d{4}","\\d{7}"]
+,[,,"30\\d{5}","\\d{7}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"MU",230,"020",,,,,,,,[[,"([2-9]\\d{2})(\\d{4})","$1 $2",,"",""]
+]
+]
+,
+  "MV": [,[]
+,[]
+,[]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"MV",960,"020","0",,,"0",,,1]
+,
+  "MW": [,[,,"(?:[13-5]|[27]\\d{2}|[89](?:\\d{2})?)\\d{6}","\\d{7,9}"]
+,[,,"(?:1[2-9]|21\\d{2})\\d{5}","\\d{7,9}"]
+,[,,"(?:[3-5]|77|8(?:8\\d)?|9(?:9\\d)?)\\d{6}","\\d{7,9}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"MW",265,"00","0",,,"0",,,,[[,"(\\d)(\\d{3})(\\d{3})","$1 $2 $3",["[13-5]"]
+,"0$1",""]
+,[,"(2\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["2"]
+,"0$1",""]
+,[,"(\\d)(\\d{4})(\\d{4})","$1 $2 $3",["7"]
+,"0$1",""]
+,[,"(\\d)(\\d{3,4})(\\d{3,4})","$1 $2 $3",["[89]"]
+,"0$1",""]
+]
+]
+,
+  "MX": [,[,,"[1-9]\\d{9,10}","\\d{7,11}"]
+,[,,"(?:33|55|81)\\d{8}|(?:2(?:2[2-9]|3[1-35-8]|4[13-9]|7[1-689]|8[1-58]|9[467])|3(?:1[1-79]|[2458][1-9]|7[1-8]|9[1-5])|4(?:1[1-57-9]|[24-6][1-9]|[37][1-8]|8[1-35-9]|9[2-689])|5(?:88|9[1-79])|6(?:1[2-68]|[234][1-9]|5[1-3689]|6[12457-9]|7[1-7]|8[67]|9[4-8])|7(?:[13467][1-9]|2[1-8]|5[13-9]|8[1-69]|9[17])|8(?:2[13-689]|3[1-6]|4[124-6]|6[1246-9]|7[1-378]|9[12479])|9(?:1[346-9]|2[1-4]|3[2-46-8]|5[1348]|[69][1-9]|7[12]|8[1-8]))\\d{7}","\\d{7,10}"]
+,[,,"1(?:(?:33|55|81)\\d{8}|(?:2(?:2[2-9]|3[1-35-8]|4[13-9]|7[1-689]|8[1-58]|9[467])|3(?:1[1-79]|[2458][1-9]|7[1-8]|9[1-5])|4(?:1[1-57-9]|[24-6][1-9]|[37][1-8]|8[1-35-9]|9[2-689])|5(?:88|9[1-79])|6(?:1[2-68]|[2-4][1-9]|5[1-3689]|6[12457-9]|7[1-7]|8[67]|9[4-8])|7(?:[13467][1-9]|2[1-8]|5[13-9]|8[1-69]|9[17])|8(?:2[13-689]|3[1-6]|4[124-6]|6[1246-9]|7[1-378]|9[12479])|9(?:1[346-9]|2[1-4]|3[2-46-8]|5[1348]|[69][1-9]|7[12]|8[1-8]))\\d{7})","\\d{11}"]
+,[,,"800\\d{7}","\\d{10}"]
+,[,,"900\\d{7}","\\d{10}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"MX",52,"0[09]","01",,,"0[12]|04[45](\\d{10})","1$1",,,[[,"([358]\\d)(\\d{4})(\\d{4})","$1 $2 $3",["33|55|81"]
+,"01 $1",""]
+,[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["[2467]|3[12457-9]|5[89]|8[02-9]|9[0-35-9]"]
+,"01 $1",""]
+,[,"1([358]\\d)(\\d{4})(\\d{4})","045 $1 $2 $3",["1(?:33|55|81)"]
+,"$1",""]
+,[,"1(\\d{3})(\\d{3})(\\d{4})","045 $1 $2 $3",["1(?:[2467]|3[12457-9]|5[89]|8[2-9]|9[1-35-9])"]
+,"$1",""]
+]
+,[[,"([358]\\d)(\\d{4})(\\d{4})","$1 $2 $3",["33|55|81"]
+,,""]
+,[,"(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3",["[2467]|3[12457-9]|5[89]|8[02-9]|9[0-35-9]"]
+,,""]
+,[,"(1)([358]\\d)(\\d{4})(\\d{4})","$1 $2 $3 $4",["1(?:33|55|81)"]
+,,""]
+,[,"(1)(\\d{3})(\\d{3})(\\d{4})","$1 $2 $3 $4",["1(?:[2467]|3[12457-9]|5[89]|8[2-9]|9[1-35-9])"]
+,,""]
+]
+]
+,
+  "MY": [,[,,"[13-9]\\d{7,9}","\\d{6,10}"]
+,[,,"(?:3\\d{2}|[4-79]\\d|8[2-9])\\d{6}","\\d{6,9}"]
+,[,,"1[0-46-9]\\d{7}","\\d{9}"]
+,[,,"1[38]00\\d{6}","\\d{10}"]
+,[,,"1600\\d{6}","\\d{10}"]
+,[,,"NA","NA"]
+,[,,"1700\\d{6}","\\d{10}"]
+,[,,"154\\d{7}","\\d{10}"]
+,"MY",60,"00","0",,,"0",,,,[[,"([4-79])(\\d{3})(\\d{4})","$1-$2 $3",["[4-79]"]
+,"0$1",""]
+,[,"(3)(\\d{4})(\\d{4})","$1-$2 $3",["3"]
+,"0$1",""]
+,[,"([18]\\d)(\\d{3})(\\d{3,4})","$1-$2 $3",["1[0-46-9][1-9]|8"]
+,"0$1",""]
+,[,"(1)([36-8]00)(\\d{2})(\\d{4})","$1-$2-$3-$4",["1[36-8]0"]
+,"",""]
+,[,"(154)(\\d{3})(\\d{4})","$1-$2 $3",["15"]
+,"0$1",""]
+]
+]
+,
+  "MZ": [,[,,"[28]\\d{7,8}","\\d{8,9}"]
+,[,,"2(?:[1346]\\d|5[0-2]|[78][12]|93)\\d{5}","\\d{8}"]
+,[,,"8[24]\\d{7}","\\d{9}"]
+,[,,"800\\d{6}","\\d{9}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"MZ",258,"00",,,,,,,,[[,"([28]\\d)(\\d{3})(\\d{3,4})","$1 $2 $3",["2|8[24]"]
+,"",""]
+,[,"(80\\d)(\\d{3})(\\d{3})","$1 $2 $3",["80"]
+,"",""]
+]
+]
+,
+  "NA": [,[,,"[68]\\d{5,9}","\\d{4,10}"]
+,[,,"6(?:1(?:[136]|2\\d?)\\d|2(?:[25]\\d?|[134678])\\d|3(?:2\\d{0,3}|4\\d{1,2}|[135-8]\\d?)|4(?:[13-8]\\d|2\\d{1,2})|(?:5(?:[16-7]\\d|[3-58]\\d?|2\\d{1,2}))|6\\d{0,4}|7\\d{0,3})\\d{4}","\\d{4,10}"]
+,[,,"8(?:1(?:1[0-24]|[2-4]\\d|50|6[0-2])|5\\d{2})\\d{5}","\\d{9}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"88\\d{6}","\\d{8}"]
+,"NA",264,"00","0",,,"0",,,,[[,"(8\\d)(\\d{3})(\\d{4})","$1 $2 $3",["8[15]"]
+,"0$1",""]
+,[,"(632532)(\\d{2,4})","$1 $2",["632","6325","63253","632532"]
+,"0$1",""]
+,[,"(6\\d)(\\d{2,3})(\\d{4})","$1 $2 $3",["6(?:1|[245][1-7]|3[125-7]|6[1256]|7[1236])"]
+,"0$1",""]
+,[,"(6\\d)(\\d{4,5})","$1 $2",["6(?:3[12567]|5[3-5]|6[1256]|7[1236])"]
+,"0$1",""]
+,[,"(6\\d{2})(\\d{4,6})","$1 $2",["6[2356]8"]
+,"0$1",""]
+,[,"(6\\d{3})(\\d{4,5})","$1 $2",["6(?:34|6[34]|75)","6(?:342|6[34]|751)"]
+,"0$1",""]
+,[,"(88)(\\d{3})(\\d{3})","$1 $2 $3",["88"]
+,"0$1",""]
+]
+]
+,
+  "NC": [,[]
+,[]
+,[]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"NC",687,"00","0",,,"0",,,1]
+,
+  "NE": [,[,,"[029]\\d{7}","\\d{8}"]
+,[,,"2(?:0(?:20|3[1-7]|4[134]|5[14]|6[14578]|7[1-578])|1(?:4[145]|5[14]|6[14-68]|7[169]|88))\\d{4}","\\d{8}"]
+,[,,"9[03467]\\d{6}","\\d{8}"]
+,[,,"08\\d{6}","\\d{8}"]
+,[,,"09\\d{6}","\\d{8}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"NE",227,"00",,,,,,,,[[,"([029]\\d)(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[29]|09"]
+,"",""]
+,[,"(08)(\\d{3})(\\d{3})","$1 $2 $3",["08"]
+,"",""]
+]
+]
+,
+  "NF": [,[]
+,[]
+,[]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"NF",672,"00",,,,,,,1]
+,
+  "NG": [,[,,"[1-69]\\d{5,8}|[78]\\d{5,13}","\\d{5,14}"]
+,[,,"[12]\\d{6,7}|9\\d{7}|(?:4[023568]|5[02368]|6[02-469]|7[569]|8[2-9])\\d{6}|(?:4[47]|5[14579]|6[1578]|7[0-357])\\d{5,6}|(?:78|41)\\d{5}","\\d{5,9}"]
+,[,,"(?:70[3-9]|8(?:0[2-9]|1[23]))\\d{7}|(?:702[1-9]|819[01])\\d{6}","\\d{10}"]
+,[,,"800\\d{7,11}","\\d{10,14}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"700\\d{7,11}","\\d{10,14}"]
+,[,,"NA","NA"]
+,"NG",234,"009","0",,,"0",,,,[[,"([129])(\\d{3})(\\d{3,4})","$1 $2 $3",["[129]"]
+,"0$1",""]
+,[,"([3-8]\\d)(\\d{3})(\\d{2,3})","$1 $2 $3",["[3-6]|7(?:[1-79]|0[1-9])|8[2-9]"]
+,"0$1",""]
+,[,"([78]\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["70[03-9]|8(?:0|1[23])"]
+,"0$1",""]
+,[,"([78]\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["702|819"]
+,"0$1",""]
+,[,"([78]00)(\\d{4})(\\d{4,5})","$1 $2 $3",["[78]00"]
+,"0$1",""]
+,[,"([78]00)(\\d{5})(\\d{5,6})","$1 $2 $3",["[78]00"]
+,"0$1",""]
+,[,"(78)(\\d{2})(\\d{3})","$1 $2 $3",["78"]
+,"0$1",""]
+]
+]
+,
+  "NI": [,[]
+,[]
+,[]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"NI",505,"00","0",,,"0",,,1]
+,
+  "NL": [,[,,"[1-9]\\d{6,9}","\\d{7,10}"]
+,[,,"(?:1[0135-8]|2[02-69]|3[0-68]|4[0135-9]|[57]\\d|8[478])\\d{7}","\\d{9}"]
+,[,,"6[1-58]\\d{7}","\\d{9}"]
+,[,,"800\\d{4,7}","\\d{7,10}"]
+,[,,"90[069]\\d{4,7}","\\d{7,10}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"85\\d{7}","\\d{9}"]
+,"NL",31,"00","0",,,"0",,,,[[,"([1-578]\\d)(\\d{3})(\\d{4})","$1 $2 $3",["1[035]|2[0346]|3[03568]|4[0356]|5[0358]|7|8[458]"]
+,"0$1",""]
+,[,"([1-5]\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["1[16-8]|2[259]|3[124]|4[17-9]|5[124679]"]
+,"0$1",""]
+,[,"(6)(\\d{8})","$1 $2",["6"]
+,"0$1",""]
+,[,"([89]0\\d)(\\d{4,7})","$1 $2",["80|9"]
+,"0$1",""]
+]
+]
+,
+  "NO": [,[,,"0\\d{4}|[2-9]\\d{7}","\\d{5}(?:\\d{3})?"]
+,[,,"0\\d{4}|(?:2[1-4]|3[1-3578]|5[1-35-7]|6[1-4679]|7\\d)\\d{6}|81(?:0(?:0[7-9]|1\\d)|5\\d{2})\\d{3}","\\d{5}(?:\\d{3})?"]
+,[,,"(?:4[015-8]|9\\d)\\d{6}","\\d{8}"]
+,[,,"80[01]\\d{5}","\\d{8}"]
+,[,,"82[09]\\d{5}","\\d{8}"]
+,[,,"810(?:0[0-6]|[2-8]\\d)\\d{3}","\\d{8}"]
+,[,,"880\\d{5}","\\d{8}"]
+,[,,"NA","NA"]
+,"NO",47,"00",,,,,,,,[[,"([489]\\d{2})(\\d{2})(\\d{3})","$1 $2 $3",["[489]"]
+,"",""]
+,[,"([235-7]\\d)(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[235-7]"]
+,"",""]
+]
+]
+,
+  "NP": [,[,,"[1-8]\\d{5,7}|98[45]\\d{7}","\\d{6,10}"]
+,[,,"(?:1[014-6]|2[13-79]|3[135-8]|4[146-9]|5[135-7]|6[13-9]|7[15-9]|8[1-4679]|9[1-79])\\d{6}","\\d{6,8}"]
+,[,,"98[45]\\d{7}","\\d{10}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"NP",977,"00","0",,,"0",,,,[[,"(1)([4-6]\\d{3})(\\d{3})","$1 $2 $3",["1[4-6]"]
+,"0$1",""]
+,[,"(\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["1[01]|[2-8]|9[1-79]"]
+,"0$1",""]
+,[,"(98[45])(\\d{3})(\\d{4})","$1 $2 $3",["98"]
+,"0$1",""]
+]
+]
+,
+  "NR": [,[]
+,[]
+,[]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"NR",674,"00","0",,,"0",,,1]
+,
+  "NU": [,[]
+,[]
+,[]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"NU",683,"00","0",,,"0",,,1]
+,
+  "NZ": [,[,,"[2-9]\\d{7,9}","\\d{7,10}"]
+,[,,"(?:3[2-79]|[479][2-689]|6[235-9])\\d{6}|24099\\d{3}","\\d{7,8}"]
+,[,,"2(?:[027]\\d{7}|9\\d{6,7}|1(?:0\\d{5,7}|[12]\\d{5,6}|[3-9]\\d{5})|4[1-9]\\d{6}|8\\d{7,8})","\\d{8,10}"]
+,[,,"(?:800|508)\\d{6,7}","\\d{9,10}"]
+,[,,"900\\d{6,7}","\\d{9,10}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"NZ",64,"00","0",,,"0",,,,[[,"([34679])(\\d{3})(\\d{4})","$1-$2 $3",["[3467]|9[1-9]"]
+,"0$1",""]
+,[,"(21)(\\d{4})(\\d{3,4})","$1 $2 $3",["21"]
+,"0$1",""]
+,[,"([2589]\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["2[0247-9]|5|[89]00"]
+,"0$1",""]
+,[,"(2[019])(\\d{3})(\\d{3})","$1 $2 $3",["2[019]"]
+,"0$1",""]
+,[,"(24099)(\\d{3})","$1 $2",["240","2409","24099"]
+,"0$1",""]
+]
+]
+,
+  "OM": [,[,,"(?:2[3-6]|5|9[2-9])\\d{6}|800\\d{5,6}","\\d{7,9}"]
+,[,,"2[3-6]\\d{6}","\\d{8}"]
+,[,,"9[2-9]\\d{6}","\\d{8}"]
+,[,,"8007\\d{4,5}|500\\d{4}","\\d{7,9}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"OM",968,"00",,,,,,,,[[,"(2\\d)(\\d{6})","$1 $2",["2"]
+,"",""]
+,[,"(9\\d{3})(\\d{4})","$1 $2",["9"]
+,"",""]
+,[,"([58]00)(\\d{4,6})","$1 $2",["[58]"]
+,"",""]
+]
+]
+,
+  "PA": [,[]
+,[]
+,[]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"PA",507,"00","0",,,"0",,,1]
+,
+  "PE": [,[,,"[146-8]\\d{7,10}|5\\d{7}(?:\\d{3})?","\\d{7,11}"]
+,[,,"(?:1\\d{2}|4[1-4]|5[1-46]|6[1-7]|7[2-46]|8[2-4])\\d{6}","\\d{7,9}"]
+,[,,"(?:1|4[1-4]|5[1-46]|6[1-7]|7[2-46]|8[2-4])9\\d{8}","\\d{10,11}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"PE",51,"00","0"," Anexo ",,"0",,,,[[,"(1)(9\\d{2})(\\d{6})","$1 $2 $3",["19"]
+,"($1)",""]
+,[,"(1)(\\d{8})","$1 $2",["1[0-8]"]
+,"($1)",""]
+,[,"([4-8]\\d)(\\d{6})","$1 $2",["[4-8]\\d[0-8]"]
+,"($1)",""]
+,[,"([4-8]\\d)(9\\d{2})(\\d{6})","$1 $2 $3",["[4-8]\\d9"]
+,"($1)",""]
+]
+]
+,
+  "PF": [,[]
+,[]
+,[]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"PF",689,"00",,,,,,,1]
+,
+  "PG": [,[,,"[1-9]\\d{6,7}","\\d{7,8}"]
+,[,,"(?:3\\d{2}|4[257]\\d|5[34]\\d|6(?:29|4[1-9])|85[02-46-9]|9[78]\\d)\\d{4}","\\d{7}"]
+,[,,"(?:68|7(?:[126]\\d|3[34689]))\\d{5}","\\d{7,8}"]
+,[,,"180\\d{4}","\\d{7}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"275\\d{4}","\\d{7}"]
+,"PG",675,"00",,,,,,,,[[,"(\\d{3})(\\d{4})","$1 $2",["[1-689]"]
+,"",""]
+,[,"(7[1-36]\\d)(\\d{2})(\\d{3})","$1 $2 $3",["7[1-36]"]
+,"",""]
+]
+]
+,
+  "PH": [,[,,"[2-9]\\d{7,9}|1800\\d{7,9}","\\d{7,13}"]
+,[,,"(?:2|3[2-68]|4[2-9]|5[2-6]|6[2-58]|7[24578]|8[2-8])\\d{7}","\\d{7,9}"]
+,[,,"9(?:0[5-9]|1[025-9]|2[0-36-9]|3[0235-9]|7[349]|[89]9)\\d{7}","\\d{10}"]
+,[,,"1800\\d{7,9}","\\d{11,13}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"PH",63,"00","0",,,"0",,,,[[,"(2)(\\d{3})(\\d{4})","$1 $2 $3",["2"]
+,"(0$1)",""]
+,[,"(\\d{4})(\\d{5})","$1 $2",["3(?:23|39|46)|4(?:2[3-6]|[35]9|4[26]|76)|5(?:22|44)|642|8(?:62|8[245])","3(?:230|397|461)|4(?:2(?:35|[46]4|51)|396|4(?:22|63)|59[347]|76[15])|5(?:221|446)|642[23]|8(?:622|8(?:[24]2|5[13]))"]
+,"(0$1)",""]
+,[,"(\\d{5})(\\d{4})","$1 $2",["346|4(?:27|9[35])|883","3469|4(?:279|9(?:30|56))|8834"]
+,"(0$1)",""]
+,[,"([3-8]\\d)(\\d{3})(\\d{4})","$1 $2 $3",["[3-8]"]
+,"(0$1)",""]
+,[,"(9\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["9"]
+,"0$1",""]
+,[,"(1800)(\\d{3})(\\d{4})","$1 $2 $3",["1"]
+,"",""]
+,[,"(1800)(\\d{1,2})(\\d{3})(\\d{4})","$1 $2 $3 $4",["1"]
+,"",""]
+]
+]
+,
+  "PK": [,[,,"1\\d{8}|[2-8]\\d{5,11}|9(?:[013-9]\\d{4,9}|2\\d(?:111\\d{6}|\\d{3,7}))","\\d{6,12}"]
+,[,,"(?:21|42)[2-9]\\d{7}|(?:2[25]|4[0146-9]|5[1-35-7]|6[1-8]|7[14]|8[16]|91)[2-9]\\d{6}|(?:2(?:3[2358]|4[2-4]|9[2-8])|45[3479]|54[2-467]|60[468]|72[236]|8(?:2[2-689]|3[23578]|4[3478]|5[2356])|9(?:1|2[2-8]|3[27-9]|4[2-6]|6[3569]|9[25-8]))[2-9]\\d{5,6}|58[126]\\d{7}","\\d{6,10}"]
+,[,,"3(?:0\\d|1[2-5]|2[1-3]|3[1-6]|4[2-6]|64)\\d{7}","\\d{10}"]
+,[,,"800\\d{5}","\\d{8}"]
+,[,,"900\\d{5}","\\d{8}"]
+,[,,"(?:2(?:[125]|3[2358]|4[2-4]|9[2-8])|4(?:[0-246-9]|5[3479])|5(?:[1-35-7]|4[2-467]|8[126])|6(?:[1-8]|0[468])|7(?:[14]|2[236])|8(?:[16]|2[2-689]|3[23578]|4[3478]|5[2356])|9(?:1|22|3[27-9]|4[2-6]|6[3569]|9[2-7]))111\\d{6}","\\d{11,12}"]
+,[,,"122\\d{6}","\\d{9}"]
+,[,,"NA","NA"]
+,"PK",92,"00","0",,,"0",,,,[[,"(\\d{2})(111)(\\d{3})(\\d{3})","$1 $2 $3 $4",["(?:2[125]|4[0-246-9]|5[1-35-7]|6[1-8]|7[14]|8[16]|91)1","(?:2[125]|4[0-246-9]|5[1-35-7]|6[1-8]|7[14]|8[16]|91)11","(?:2[125]|4[0-246-9]|5[1-35-7]|6[1-8]|7[14]|8[16]|91)111"]
+,"(0$1)",""]
+,[,"(\\d{3})(111)(\\d{3})(\\d{3})","$1 $2 $3 $4",["(?:2[349]|45|54|60|72|8[2-5]|9[2-9])","(?:2[349]|45|54|60|72|8[2-5]|9[2-9])\\d1","(?:2[349]|45|54|60|72|8[2-5]|9[2-9])\\d11","(?:2[349]|45|54|60|72|8[2-5]|9[2-9])\\d111"]
+,"(0$1)",""]
+,[,"(\\d{2})(\\d{7,8})","$1 $2",["(?:2[125]|4[0-246-9]|5[1-35-7]|6[1-8]|7[14]|8[16]|91)[2-9]"]
+,"(0$1)",""]
+,[,"(\\d{3})(\\d{6,7})","$1 $2",["2[349]|45|54|60|72|8[2-5]|9[2-9]","(?:2[349]|45|54|60|72|8[2-5]|9[2-9])\\d[2-9]"]
+,"(0$1)",""]
+,[,"(3\\d{2})(\\d{7})","$1 $2",["3"]
+,"0$1",""]
+,[,"([15]\\d{3})(\\d{5,6})","$1 $2",["58[12]|1"]
+,"(0$1)",""]
+,[,"(586\\d{2})(\\d{5})","$1 $2",["586"]
+,"(0$1)",""]
+,[,"([89]00)(\\d{3})(\\d{2})","$1 $2 $3",["[89]00"]
+,"0$1",""]
+]
+]
+,
+  "PL": [,[,,"[1-9]\\d{8}","\\d{9}"]
+,[,,"(?:1[2-8]|2[2-59]|3[2-4]|4[1-468]|5[24-689]|6[1-3578]|7[14-7]|8[1-79]|9[145])\\d{7}","\\d{9}"]
+,[,,"(?:5[013]|6[069]|7[289]|88)\\d{7}","\\d{9}"]
+,[,,"800\\d{6}","\\d{9}"]
+,[,,"70\\d{7}","\\d{9}"]
+,[,,"801\\d{6}","\\d{9}"]
+,[,,"NA","NA"]
+,[,,"39\\d{7}","\\d{9}"]
+,"PL",48,"00",,,,,,,,[[,"(\\d{2})(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[124]|3[2-4]|5[24-689]|6[1-3578]|7[14-7]|8[1-79]|9[145]"]
+,"",""]
+,[,"(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["39|5[013]|6[069]|7[0289]|8[08]"]
+,"",""]
+]
+]
+,
+  "PM": [,[]
+,[]
+,[]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"PM",508,"00","0",,,"0",,,1]
+,
+  "PR": [,[,,"[789]\\d{9}","\\d{7,10}"]
+,[,,"(?:787|939)[2-9]\\d{6}","\\d{7,10}"]
+,[,,"(?:787|939)[2-9]\\d{6}","\\d{7,10}"]
+,[,,"8(00|66|77|88)[2-9]\\d{6}","\\d{10}"]
+,[,,"900[2-9]\\d{6}","\\d{10}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"PR",1,"011",,,,,,,1,,,,,"787|939"]
+,
+  "PS": [,[]
+,[]
+,[]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"PS",970,"00","0",,,"0",,,1]
+,
+  "PT": [,[,,"[2-46-9]\\d{8}","\\d{9}"]
+,[,,"2(?:[12]\\d|[35][1-689]|4[1-59]|6[1-35689]|7[1-9]|8[1-69]|9[1256])\\d{6}","\\d{9}"]
+,[,,"9(?:[136]\\d{2}|2[25-79]\\d|4(?:80|9\\d))\\d{5}","\\d{9}"]
+,[,,"4\\d{8}|80[02]\\d{6}","\\d{9}"]
+,[,,"71\\d{7}","\\d{9}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"30\\d{7}","\\d{9}"]
+,"PT",351,"00",,,,,,,,[[,"([2-46-9]\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",,"",""]
+]
+]
+,
+  "PW": [,[]
+,[]
+,[]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"PW",680,"011",,,,,,,1]
+,
+  "PY": [,[]
+,[]
+,[]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"PY",595,"002","0",,,"0",,,1]
+,
+  "QA": [,[,,"[3-8]\\d{6,7}","\\d{7,8}"]
+,[,,"44\\d{6}","\\d{7,8}"]
+,[,,"(?:33|55|66|77)\\d{6}","\\d{7,8}"]
+,[,,"800\\d{4}","\\d{7,8}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"QA",974,"00",,,,,,,,[[,"(8\\d{2})(\\d{4})","$1 $2",["8"]
+,"",""]
+,[,"([3-7]\\d{3})(\\d{4})","$1 $2",["[3-7]"]
+,"",""]
+]
+]
+,
+  "RE": [,[,,"[268]\\d{8}","\\d{9}"]
+,[,,"262\\d{6}","\\d{9}"]
+,[,,"6(?:9[23]|47)\\d{6}","\\d{9}"]
+,[,,"80\\d{7}","\\d{9}"]
+,[,,"8(?:1[01]|2[0156]|84|9[0-37-9])\\d{6}","\\d{9}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"RE",262,"00","0",,,"0",,,,[[,"([268]\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",,"0$1",""]
+]
+,,,1,"262|6[49]|8"]
+,
+  "RO": [,[,,"[237-9]\\d{8}","\\d{9}"]
+,[,,"[23][13-6]\\d{7}","\\d{9}"]
+,[,,"7[1-8]\\d{7}","\\d{9}"]
+,[,,"800\\d{6}","\\d{9}"]
+,[,,"90[036]\\d{6}","\\d{9}"]
+,[,,"801\\d{6}","\\d{9}"]
+,[,,"802\\d{6}","\\d{9}"]
+,[,,"NA","NA"]
+,"RO",40,"00","0"," int ",,"0",,,,[[,"([237]\\d)(\\d{3})(\\d{4})","$1 $2 $3",["[23]1|7"]
+,"0$1",""]
+,[,"(\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["[23][02-9]|[89]"]
+,"0$1",""]
+]
+]
+,
+  "RS": [,[,,"[1-46-9]\\d{4,11}","\\d{5,12}"]
+,[,,"[1-3]\\d{6,9}","\\d{5,10}"]
+,[,,"6[0-689]\\d{3,10}","\\d{5,12}"]
+,[,,"800\\d{3,6}","\\d{6,9}"]
+,[,,"(?:9[0-2]|42)\\d{4,7}","\\d{6,9}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"RS",381,"00","0",,,"0",,,,[[,"([23]\\d{2})(\\d{4,7})","$1 $2",["(?:2[389]|39)0"]
+,"0$1",""]
+,[,"([1-4]\\d)(\\d{4,8})","$1 $2",["1|2(?:[0-24-7]|[389][1-9])|3(?:[0-8]|9[1-9])|42"]
+,"0$1",""]
+,[,"(6[0-689])(\\d{3,10})","$1 $2",["6"]
+,"0$1",""]
+,[,"([89]0\\d)(\\d{3,6})","$1 $2",["[89]"]
+,"0$1",""]
+]
+]
+,
+  "RU": [,[,,"[3489]\\d{9}","\\d{10}"]
+,[,,"(?:3(?:0[12]|4[1-35-79]|5[1-3]|8[1-58]|9[0145])|4(?:01|1[1356]|2[13467]|7[1-5]|8[1-7]|9[1-689])|8(?:1[1-8]|2[01]|3[13-6]|4[0-8]|5[15]|6[1-35-7]|7[1-37-9]))\\d{7}","\\d{10}"]
+,[,,"9\\d{9}","\\d{10}"]
+,[,,"800\\d{7}","\\d{10}"]
+,[,,"809\\d{7}","\\d{10}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"RU",7,"8~10","8",,,"8",,,,[[,"([34689]\\d{2})(\\d{3})(\\d{2})(\\d{2})","$1 $2-$3-$4",["[34689]"]
+,"8 ($1)",""]
+,[,"([7]\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",["7"]
+,"8 ($1)",""]
+]
+,,,1]
+,
+  "RW": [,[,,"[27-9]\\d{8}","\\d{9}"]
+,[,,"25\\d{7}","\\d{9}"]
+,[,,"7[258]\\d{7}","\\d{9}"]
+,[,,"800\\d{6}","\\d{9}"]
+,[,,"900\\d{6}","\\d{9}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"RW",250,"000","0",,,"0",,,,[[,"(25\\d)(\\d{3})(\\d{3})","$1 $2 $3",["2"]
+,"$1",""]
+,[,"([7-9]\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["[7-9]"]
+,"0$1",""]
+]
+]
+,
+  "SA": [,[,,"[1-9]\\d{7,10}","\\d{7,11}"]
+,[,,"(?:1[24-7]|2[24-8]|3[35-8]|4[34-68]|6[2-5]|7[235-7])\\d{6}","\\d{7,8}"]
+,[,,"(?:5[013-69]\\d|8111)\\d{6}","\\d{9,10}"]
+,[,,"800\\d{7}","\\d{10}"]
+,[,,"9200\\d{7}","\\d{11}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"SA",966,"00","0",,,"0",,,,[[,"([1-467])(\\d{3})(\\d{4})","$1 $2 $3",["[1-467]"]
+,"0$1",""]
+,[,"(9200)(\\d{3})(\\d{4})","$1 $2 $3",["9"]
+,"0$1",""]
+,[,"(5\\d)(\\d{3})(\\d{4})","$1 $2 $3",["5"]
+,"0$1",""]
+,[,"(800)(\\d{3})(\\d{4})","$1 $2 $3",["80"]
+,"0$1",""]
+,[,"(8111)(\\d{3})(\\d{3})","$1 $2 $3",["81"]
+,"0$1",""]
+]
+]
+,
+  "SB": [,[]
+,[]
+,[]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"SB",677,"00",,,,,,,1]
+,
+  "SC": [,[,,"[2-8]\\d{5}","\\d{6}"]
+,[,,"(?:2(?:1[78]|2[14-69]|3[2-4]|4[1-36-8]|6[167]|[89]\\d)|3(?:2[1-6]|4[4-6]|55|6[016]|7\\d|8[0-589]|9[0-5])|5(?:5\\d|6[0-2])|6(?:0[0-27-9]|1[0-478]|2[145]|3[02-4]|4[124]|6[015]|7\\d|8[1-3])|78[0138])\\d{3}","\\d{6}"]
+,[,,"(?:5(?:[1247-9]\\d|6[3-9])|7(?:[14679]\\d|2[1-9]|8[24-79]))\\d{3}","\\d{6}"]
+,[,,"8000\\d{2}","\\d{6}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"4[1-37]\\d{4}","\\d{6}"]
+,"SC",248,"0[0-2]",,,,,,"00",,[[,"(\\d{3})(\\d{3})","$1 $2",,"",""]
+]
+]
+,
+  "SD": [,[]
+,[]
+,[]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"SD",249,"00","0",,,"0",,,1]
+,
+  "SE": [,[,,"\\d{7,10}","\\d{5,10}"]
+,[,,"1(?:0[1-8]\\d{6}|[136]\\d{5,7}|(?:2[0-35]|4[0-4]|5[0-25-9]|7[13-6]|[89]\\d)\\d{5,6})|2(?:[136]\\d{5,7}|(?:2[0-7]|4[0136-8]|5[0-38]|7[018]|8[01]|9[0-57])\\d{5,6})|3(?:[356]\\d{5,7}|(?:0[0-4]|1\\d|2[0-25]|4[056]|7[0-2]|8[0-3]|9[023])\\d{5,6})|4(?:[0246]\\d{5,7}|(?:1[01-8]|3[0135]|5[14-79]|7[0-246-9]|8[0156]|9[0-689])\\d{5,6})|5(?:0[0-6]|1[1-5]|2[0-68]|3[0-4]|4\\d|5[0-5]|6[03-5]|7[013]|8[0-79]|9[01])\\d{5,6}|6(?:[03]\\d{5,7}|(?:1[1-3]|2[0-4]|4[02-57]|5[0-37]|6[0-3]|7[0-2]|8[0247]|9[0-356])\\d{5,6})|8\\d{6,8}|9(?:0\\d{5,7}|(?:1[0-68]|2\\d|3[02-59]|4[0-4]|5[0-4]|6[01]|7[0135-8]|8[01])\\d{5,6})","\\d{5,9}"]
+,[,,"7[02-46]\\d{7}","\\d{9}"]
+,[,,"20\\d{4,7}","\\d{6,9}"]
+,[,,"9(?:00|39|44)\\d{7}","\\d{10}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"SE",46,"00","0",,,"0",,,,[[,"(8)(\\d{2,3})(\\d{2,3})(\\d{2})","$1 $2 $3 $4",["8"]
+,"0$1",""]
+,[,"([1-69]\\d)(\\d{2,3})(\\d{2})(\\d{2})","$1 $2 $3 $4",["1[013689]|2[0136]|3[1356]|4[0246]|54|6[03]|90"]
+,"0$1",""]
+,[,"([1-69]\\d)(\\d{3})(\\d{2})","$1 $2 $3",["1[13689]|2[136]|3[1356]|4[0246]|54|6[03]|90"]
+,"0$1",""]
+,[,"(\\d{3})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",["1[2457]|2[2457-9]|3[0247-9]|4[1357-9]|5[0-35-9]|6[124-9]|9(?:[125-8]|3[0-5]|4[0-3])"]
+,"0$1",""]
+,[,"(\\d{3})(\\d{2,3})(\\d{2})","$1 $2 $3",["1[2457]|2[2457-9]|3[0247-9]|4[1357-9]|5[0-35-9]|6[124-9]|9(?:[125-8]|3[0-5]|4[0-3])"]
+,"0$1",""]
+,[,"(7[02-46])(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",["7[02-46]"]
+,"0$1",""]
+,[,"(20)(\\d{2,3})(\\d{2})","$1 $2 $3",["20"]
+,"0$1",""]
+,[,"(9[034]\\d)(\\d{2})(\\d{2})(\\d{3})","$1 $2 $3 $4",["9[034]"]
+,"0$1",""]
+]
+]
+,
+  "SG": [,[,,"[13689]\\d{7,10}","\\d{8,11}"]
+,[,,"[36]\\d{7}","\\d{8}"]
+,[,,"[89]\\d{7}","\\d{8}"]
+,[,,"1?800\\d{7}","\\d{10,11}"]
+,[,,"1900\\d{7}","\\d{11}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"SG",65,"0[0-3][0-9]",,,,,,,,[[,"([3689]\\d{3})(\\d{4})","$1 $2",["[369]|8[1-9]"]
+,"",""]
+,[,"(1[89]00)(\\d{3})(\\d{4})","$1 $2 $3",["1[89]"]
+,"",""]
+,[,"(800)(\\d{3})(\\d{4})","$1 $2 $3",["80"]
+,"",""]
+]
+]
+,
+  "SH": [,[]
+,[]
+,[]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"SH",290,"00",,,,,,,1]
+,
+  "SI": [,[,,"[1-7]\\d{6,7}|[89]\\d{4,7}","\\d{5,8}"]
+,[,,"(?:1\\d|2[2-8]|3[4-8]|4[24-8]|[57][3-8])\\d{6}","\\d{7,8}"]
+,[,,"(?:[37][01]|4[019]|51|64)\\d{6}","\\d{8}"]
+,[,,"80\\d{4,6}","\\d{6,8}"]
+,[,,"90\\d{4,6}|89[1-3]\\d{2,5}","\\d{5,8}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"(?:59|8[1-3])\\d{6}","\\d{8}"]
+,"SI",386,"00","0",,,"0",,,,[[,"(\\d)(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",["[12]|3[4-8]|4[24-8]|5[3-8]|7[3-8]"]
+,"(0$1)",""]
+,[,"([3-7]\\d)(\\d{3})(\\d{3})","$1 $2 $3",["[37][01]|4[019]|51|64"]
+,"0$1",""]
+,[,"([89][09])(\\d{3,6})","$1 $2",["[89][09]"]
+,"0$1",""]
+,[,"([58]\\d{2})(\\d{5})","$1 $2",["59|8[1-3]"]
+,"0$1",""]
+]
+]
+,
+  "SK": [,[,,"[2-689]\\d{8}","\\d{9}"]
+,[,,"[2-5]\\d{8}","\\d{9}"]
+,[,,"9(?:0[1-8]|1[0-24-9]|4[0489])\\d{6}","\\d{9}"]
+,[,,"800\\d{6}","\\d{9}"]
+,[,,"9(?:[78]\\d{7}|00\\d{6})","\\d{9}"]
+,[,,"8[5-9]\\d{7}","\\d{9}"]
+,[,,"NA","NA"]
+,[,,"6(?:5[0-4]|9[0-6])\\d{6}","\\d{9}"]
+,"SK",421,"00","0",,,"0",,,,[[,"(2)(\\d{3})(\\d{3})(\\d{2})","$1/$2 $3 $4",["2"]
+,"0$1",""]
+,[,"([3-5]\\d)(\\d{3})(\\d{2})(\\d{2})","$1/$2 $3 $4",["[3-5]"]
+,"0$1",""]
+,[,"([689]\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["[689]"]
+,"0$1",""]
+]
+]
+,
+  "SL": [,[,,"[2-578]\\d{7}","\\d{6,8}"]
+,[,,"[235]2[2-4][2-9]\\d{4}","\\d{6,8}"]
+,[,,"(?:25|3[03]|44|5[056]|7[6-8]|88)[1-9]\\d{5}","\\d{6,8}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"SL",232,"00","0",,,"0",,,,[[,"(\\d{2})(\\d{6})","$1 $2",,"(0$1)",""]
+]
+]
+,
+  "SM": [,[]
+,[]
+,[]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"SM",378,"00","0",,,"0",,,1]
+,
+  "SN": [,[,,"[37]\\d{8}","\\d{9}"]
+,[,,"3(?:010|3(?:8[1-9]|9[2-9]))\\d{5}","\\d{9}"]
+,[,,"7(?:0[1256]0|6(?:1[23]|2[89]|3[3489]|4[6-9]|5[1-389]|6[6-9]|7[45]|8[3-8])|7(?:1[014-8]|2[0-7]|3[0-35-8]|4[0-6]|[56]\\d|7[0-589]|8[01]|9[0-6]))\\d{5}","\\d{9}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"33301\\d{4}","\\d{9}"]
+,"SN",221,"00",,,,,,,,[[,"(\\d{2})(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",,"",""]
+]
+]
+,
+  "SO": [,[,,"[13-59]\\d{6,7}","\\d{7,8}"]
+,[,,"(?:5[57-9]|[134]\\d)\\d{5}","\\d{7}"]
+,[,,"(?:9[01]|15)\\d{6}","\\d{8}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"SO",252,"00",,,,,,,,[[,"([13-5])(\\d{6})","$1 $2",["[13-5]"]
+,"",""]
+,[,"([19]\\d)(\\d{6})","$1 $2",["[19]"]
+,"",""]
+]
+]
+,
+  "SR": [,[]
+,[]
+,[]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"SR",597,"00",,,,,,,1]
+,
+  "ST": [,[,,"[29]\\d{6}","\\d{7}"]
+,[,,"22\\d{5}","\\d{7}"]
+,[,,"9[89]\\d{5}","\\d{7}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"ST",239,"00",,,,,,,,[[,"(\\d{3})(\\d{4})","$1 $2",,"",""]
+]
+]
+,
+  "SV": [,[]
+,[]
+,[]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"SV",503,"00",,,,,,,1]
+,
+  "SY": [,[,,"[1-59]\\d{7,8}","\\d{6,9}"]
+,[,,"(?:1(?:|1\\d?|4\\d|[2356])|2[1-35]|3(?:1\\d|[34])|4[13]|5[1-3])\\d{6}","\\d{6,9}"]
+,[,,"9(?:3[23]|4[457]|55|6[67]|88|9[19])\\d{6}","\\d{9}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"SY",963,"00","0",,,"0",,,,[[,"(\\d{2})(\\d{3})(\\d{3,4})","$1 $2 $3",["[1-5]"]
+,"0$1",""]
+,[,"(9[3-689])(\\d{4})(\\d{3})","$1 $2 $3",["9"]
+,"0$1",""]
+]
+]
+,
+  "SZ": [,[,,"[2-7]\\d{6,7}","\\d{7,8}"]
+,[,,"2?(?:2(?:0[07]|[13]7|2[57])|3(?:0[34]|[1278]3|3[23]|[46][34])|(?:40[4-69]|16|2[12]|3[57]|[4578]2|67)|5(?:0[5-7]|1[6-9]|[23][78]|48|5[01]))\\d{4}","\\d{7,8}"]
+,[,,"(?:6|7[67])\\d{6}","\\d{7,8}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"SZ",268,"00",,,,,,,,[[,"(\\d{3})(\\d{4})","$1 $2",["[2-6]"]
+,"",""]
+,[,"(\\d{4})(\\d{4})","$1 $2",["7"]
+,"",""]
+]
+]
+,
+  "TC": [,[,,"[689]\\d{9}","\\d{7,10}"]
+,[,,"649(?:712|9(?:4\\d|50))\\d{4}","\\d{7,10}"]
+,[,,"649(?:2(?:3[12]|4[1-5])|3(?:3[1-39]|4[1-57])|4[34][12])\\d{4}","\\d{10}"]
+,[,,"8(?:00|66|77|88)[2-9]\\d{6}","\\d{10}"]
+,[,,"900[2-9]\\d{6}","\\d{10}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"64971[01]\\d{4}","\\d{10}"]
+,"TC",1,"011",,,,,,,,,,,,"649"]
+,
+  "TD": [,[,,"[2679]\\d{7}","\\d{8}"]
+,[,,"22(?:[3789]0|5[0-5]|6[89])\\d{4}","\\d{8}"]
+,[,,"(?:6(?:3[0-7]|6\\d)|77\\d|9(?:5[0-4]|9\\d))\\d{5}","\\d{8}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"TD",235,"00|16",,,,,,"00",,[[,"(\\d{2})(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",,"",""]
+]
+]
+,
+  "TF": [,[]
+,[]
+,[]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"TF",262,"00","0",,,"0",,,1]
+,
+  "TG": [,[,,"[02-9]\\d{6}","\\d{7}"]
+,[,,"(?:2[2-7]|3[23]|44|55|66|77)\\d{5}","\\d{7}"]
+,[,,"(?:0[1-9]|7[56]|8[1-7]|9\\d)\\d{5}","\\d{7}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"TG",228,"00",,,,,,,,[[,"(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3",,"",""]
+]
+]
+,
+  "TH": [,[,,"[2-8]\\d{7,8}|1\\d{9}","\\d{8,10}"]
+,[,,"(?:2[1-9]|3[24-9]|4[2-5]|5[3-6]|7[3-7])\\d{6}","\\d{8}"]
+,[,,"8\\d{8}","\\d{9}"]
+,[,,"1800\\d{6}","\\d{10}"]
+,[,,"1900\\d{6}","\\d{10}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"60\\d{7}","\\d{9}"]
+,"TH",66,"00","0",,,"0",,,,[[,"(2)(\\d{3})(\\d{4})","$1 $2 $3",["2"]
+,"0$1",""]
+,[,"([3-7]\\d)(\\d{3})(\\d{3,4})","$1 $2 $3",["[3-7]"]
+,"0$1",""]
+,[,"(8)(\\d{4})(\\d{4})","$1 $2 $3",["8"]
+,"0$1",""]
+,[,"(1[89]00)(\\d{3})(\\d{3})","$1 $2 $3",["1"]
+,"$1",""]
+]
+]
+,
+  "TJ": [,[,,"[349]\\d{8}","\\d{3,9}"]
+,[,,"(?:3(?:1[3-5]|2[245]|31|4[24-7]|5[25]|72)|4(?:46|74|87))\\d{6}","\\d{3,9}"]
+,[,,"9[0-35-9]\\d{7}","\\d{9}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"TJ",992,"8~10","8",,,"8",,,,[[,"([349]\\d{2})(\\d{2})(\\d{4})","$1 $2 $3",["[34]7|91[78]"]
+,"8$1",""]
+,[,"([49]\\d)(\\d{3})(\\d{4})","$1 $2 $3",["4[48]|9(?:19|[0235-9])"]
+,"8$1",""]
+,[,"(331700)(\\d)(\\d{2})","$1 $2 $3",["331","3317","33170","331700"]
+,"8$1",""]
+,[,"(\\d{4})(\\d)(\\d{4})","$1 $2 $3",["3[1-5]","3(?:[1245]|3(?:[02-9]|1[0-589]))"]
+,"8$1",""]
+]
+]
+,
+  "TK": [,[]
+,[]
+,[]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"TK",690,"00",,,,,,,1]
+,
+  "TL": [,[,,"[2-47-9]\\d{6}","\\d{7}"]
+,[,,"(?:2[1-5]|3[1-9]|4[1-4])\\d{5}","\\d{7}"]
+,[,,"7[2-4]\\d{5}","\\d{7}"]
+,[,,"80\\d{5}","\\d{7}"]
+,[,,"90\\d{5}","\\d{7}"]
+,[,,"NA","NA"]
+,[,,"70\\d{5}","\\d{7}"]
+,[,,"NA","NA"]
+,"TL",670,"00",,,,,,,,[[,"(\\d{3})(\\d{4})","$1 $2",,"",""]
+]
+]
+,
+  "TM": [,[,,"[1-6]\\d{7}","\\d{8}"]
+,[,,"(?:12\\d|243|[3-5]22)\\d{5}","\\d{8}"]
+,[,,"6[6-8]\\d{6}","\\d{8}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"TM",993,"8~10","8",,,"8",,,,[[,"([1-6]\\d)(\\d{2})(\\d{2})(\\d{2})","$1 $2 $3 $4",,"8 $1",""]
+]
+]
+,
+  "TN": [,[,,"[247-9]\\d{7}","\\d{8}"]
+,[,,"7\\d{7}","\\d{8}"]
+,[,,"(?:2[0-7]|40|9\\d)\\d{6}","\\d{8}"]
+,[,,"NA","NA"]
+,[,,"8[028]\\d{6}","\\d{8}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"TN",216,"00",,,,,,,,[[,"([247-9]\\d)(\\d{3})(\\d{3})","$1 $2 $3",,"",""]
+]
+]
+,
+  "TO": [,[]
+,[]
+,[]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"TO",676,"00",,,,,,,1]
+,
+  "TR": [,[,,"[2-589]\\d{9}","\\d{10}"]
+,[,,"[2-4]\\d{9}|850\\d{7}","\\d{10}"]
+,[,,"5\\d{9}","\\d{10}"]
+,[,,"800\\d{7}","\\d{10}"]
+,[,,"900\\d{7}","\\d{10}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"TR",90,"00","0",,,"0",,,,[[,"([2-589]\\d{2})(\\d{3})(\\d{4})","$1 $2 $3",,"0$1",""]
+]
+]
+,
+  "TT": [,[,,"[89]\\d{9}","\\d{7,10}"]
+,[,,"868(?:22[1-4]|6(?:1[4-6]|[2-6]\\d|7[0-79]|9[0-8])|82[12])\\d{4}","\\d{7,10}"]
+,[,,"868(?:29\\d|3(?:0[1-9]|1[02-9]|[2-9]\\d)|4([679]\\d|8[0-4])|6(?:20|78|8\\d)|7(?:1[02-9]|[2-9]\\d))\\d{4}","\\d{10}"]
+,[,,"8(?:00|66|77|88)[2-9]\\d{6}","\\d{10}"]
+,[,,"900[2-9]\\d{6}","\\d{10}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"TT",1,"011",,,,,,,,,,,,"868"]
+,
+  "TV": [,[]
+,[]
+,[]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"TV",688,"00",,,,,,,1]
+,
+  "TW": [,[,,"[2-9]\\d{7,8}","\\d{8,9}"]
+,[,,"[2-8]\\d{7,8}","\\d{8,9}"]
+,[,,"9\\d{8}","\\d{9}"]
+,[,,"800\\d{6}","\\d{9}"]
+,[,,"900\\d{6}","\\d{9}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"TW",886,"0(?:0[25679]|19)","0","#",,"0",,,,[[,"([2-8])(\\d{3,4})(\\d{4})","$1 $2 $3",["[2-7]|8[1-9]"]
+,"0$1",""]
+,[,"([89]\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["80|9"]
+,"0$1",""]
+]
+]
+,
+  "TZ": [,[,,"\\d{9}","\\d{7,9}"]
+,[,,"2[2-8]\\d{7}","\\d{7,9}"]
+,[,,"(?:6[158]|7[1-9])(\\d{7})","\\d{9}"]
+,[,,"80[08]\\d{6}","\\d{9}"]
+,[,,"90\\d{7}","\\d{9}"]
+,[,,"8(?:40|6[01])\\d{6}","\\d{9}"]
+,[,,"NA","NA"]
+,[,,"41\\d{7}","\\d{9}"]
+,"TZ",255,"00[056]","0",,,"0",,,,[[,"([24]\\d)(\\d{3})(\\d{4})","$1 $2 $3",["[24]"]
+,"0$1",""]
+,[,"([67]\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["[67]"]
+,"0$1",""]
+,[,"([89]\\d{2})(\\d{2})(\\d{4})","$1 $2 $3",["[89]"]
+,"0$1",""]
+]
+]
+,
+  "UA": [,[,,"[3-689]\\d{8}","\\d{5,9}"]
+,[,,"(?:3[1-8]|4[13-8]|5[1-7]|6[12459])\\d{7}","\\d{5,9}"]
+,[,,"(?:39|50|6[36-8]|9[1-9])\\d{7}","\\d{9}"]
+,[,,"800\\d{6}","\\d{9}"]
+,[,,"900\\d{6}","\\d{9}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"UA",380,"0~0","0",,,"0",,,,[[,"([3-69]\\d)(\\d{3})(\\d{4})","$1 $2 $3",["39|4(?:[45][0-5]|87)|5(?:0|6[37]|7[37])|6[36-8]|9[1-9]","39|4(?:[45][0-5]|87)|5(?:0|6(?:3[14-7]|7)|7[37])|6[36-8]|9[1-9]"]
+,"0$1",""]
+,[,"([3-689]\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["3[1-8]2|4[1378]2|5(?:[12457]2|6[24])|6(?:[49]2|[12][29]|5[24])|8|90","3(?:[1-46-8]2[013-9]|52)|4[1378]2|5(?:[12457]2|6[24])|6(?:[49]2|[12][29]|5[24])|8|90"]
+,"0$1",""]
+,[,"([3-6]\\d{3})(\\d{5})","$1 $2",["3(?:5[013-9]|[1-46-8])|4(?:[137][013-9]|6|[45][6-9]|8[4-6])|5(?:[1245][013-9]|6[0135-9]|3|7[4-6])|6(?:[49][013-9]|5[0135-9]|[12][13-8])","3(?:5[013-9]|[1-46-8](?:22|[013-9]))|4(?:[137][013-9]|6|[45][6-9]|8[4-6])|5(?:[1245][013-9]|6(?:3[02389]|[015689])|3|7[4-6])|6(?:[49][013-9]|5[0135-9]|[12][13-8])"]
+,"0$1",""]
+]
+]
+,
+  "UG": [,[,,"\\d{9}","\\d{5,9}"]
+,[,,"3\\d{8}|4(?:[1-6]\\d|7[136]|8[1356]|96)\\d{6}|20(?:0\\d|24)\\d{5}","\\d{5,9}"]
+,[,,"7(?:[1578]\\d|0[0-4])\\d{6}","\\d{9}"]
+,[,,"800[123]\\d{5}","\\d{9}"]
+,[,,"90[123]\\d{6}","\\d{9}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"UG",256,"00[057]","0",,,"0",,,,[[,"([247-9]\\d{2})(\\d{6})","$1 $2",["[7-9]|200|4(?:6[45]|[7-9])"]
+,"0$1",""]
+,[,"([34]\\d)(\\d{7})","$1 $2",["3|4(?:[1-5]|6[0-36-9])"]
+,"0$1",""]
+,[,"(2024)(\\d{5})","$1 $2",["202"]
+,"0$1",""]
+]
+]
+,
+  "US": [,[,,"[2-9]\\d{9}","\\d{7,10}"]
+,[,,"(?:2(?:0[1-35-9]|1[02-9]|2[4589]|3[149]|4[08]|5[1-46]|6[0279]|7[06]|8[13])|3(?:0[1-57-9]|1[02-9]|2[0135]|3[014679]|47|5[12]|6[01]|8[056])|4(?:0[124-9]|1[02-579]|2[3-5]|3[0245]|4[0235]|69|7[089]|8[04])|5(?:0[1-57-9]|1[0235-8]|[23]0|4[01]|5[19]|6[1-37]|7[013-5]|8[056])|6(?:0[1-35-9]|1[024-9]|2[036]|3[016]|4[16]|5[017]|6[0-29]|78|8[12])|7(?:0[1-46-8]|1[2-9]|2[047]|3[124]|4[07]|5[47]|6[02359]|7[02-59]|8[156])|8(?:0[1-68]|1[02-8]|28|3[0-25]|4[3578]|5[06-9]|6[02-5]|7[028])|9(?:0[1346-9]|1[02-9]|2[058]|3[167]|4[0179]|5[1246]|7[0-3589]|8[059]))[2-9]\\d{6}","\\d{7,10}"]
+,[,,"(?:2(?:0[1-35-9]|1[02-9]|2[4589]|3[149]|4[08]|5[1-46]|6[0279]|7[06]|8[13])|3(?:0[1-57-9]|1[02-9]|2[0135]|3[014679]|47|5[12]|6[01]|8[056])|4(?:0[124-9]|1[02-579]|2[3-5]|3[0245]|4[0235]|69|7[089]|8[04])|5(?:0[1-57-9]|1[0235-8]|[23]0|4[01]|5[19]|6[1-37]|7[013-5]|8[056])|6(?:0[1-35-9]|1[024-9]|2[036]|3[016]|4[16]|5[017]|6[0-29]|78|8[12])|7(?:0[1-46-8]|1[2-9]|2[047]|3[124]|4[07]|5[47]|6[02359]|7[02-59]|8[156])|8(?:0[1-68]|1[02-8]|28|3[0-25]|4[3578]|5[06-9]|6[02-5]|7[028])|9(?:0[1346-9]|1[02-9]|2[058]|3[167]|4[0179]|5[1246]|7[0-3589]|8[059]))[2-9]\\d{6}","\\d{7,10}"]
+,[,,"8(?:00|66|77|88)[2-9]\\d{6}","\\d{10}"]
+,[,,"900[2-9]\\d{6}","\\d{10}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"US",1,"011","1",,,"1",,,1,[[,"(\\d{3})(\\d{3})(\\d{4})","($1) $2-$3",,"",""]
+,[,"(\\d{3})(\\d{4})","$1-$2",,"",""]
+]
+,[[,"(\\d{3})(\\d{3})(\\d{4})","$1-$2-$3",,,""]
+]
+,,1]
+,
+  "UY": [,[]
+,[]
+,[]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"UY",598,"00","0",,,"0",,,1]
+,
+  "UZ": [,[,,"[679]\\d{8}","\\d{7,9}"]
+,[,,"(?:6[125679]|7[0-69])\\d{7}","\\d{7,9}"]
+,[,,"9[0-57-9]\\d{7}","\\d{7,9}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"UZ",998,"8~10","8",,,"8",,,,[[,"([679]\\d)(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",,"8$1",""]
+]
+]
+,
+  "VA": [,[,,"06\\d{8}","\\d{10}"]
+,[,,"06698\\d{5}","\\d{10}"]
+,[,,"N/A","N/A"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"VA",379,"00",,,,,,,,[[,"(06)(\\d{4})(\\d{4})","$1 $2 $3",,"",""]
+]
+]
+,
+  "VC": [,[,,"(?:784|8(?:00|66|77|88)|900)[2-9]\\d{6}","\\d{7,10}"]
+,[,,"784(?:266|3(?:6[6-9]|7\\d|8[0-24-6])|4(?:38|5[0-36-8]|8\\d|9[01])|555|638|784)\\d{4}","\\d{7,10}"]
+,[,,"784(?:4(?:3[0-24]|5[45]|9[2-5])|5(?:2[6-9]|3[0-3]|93))\\d{4}","\\d{10}"]
+,[,,"8(?:00|66|77|88)[2-9]\\d{6}","\\d{10}"]
+,[,,"900[2-9]\\d{6}","\\d{10}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"VC",1,"011",,,,,,,,,,,,"784"]
+,
+  "VE": [,[,,"[24589]\\d{9}","\\d{7,10}"]
+,[,,"(?:2(?:12|3[457-9]|[58][1-9]|[467]\\d|9[1-6])|50[01])\\d{7}","\\d{7,10}"]
+,[,,"4(?:1[24-8]|2[46])\\d{7}","\\d{10}"]
+,[,,"800\\d{7}","\\d{10}"]
+,[,,"900\\d{7}","\\d{10}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"VE",58,"00","0",,,"1\\d{2}|0",,,,[[,"(\\d{3})(\\d{7})","$1-$2",,"0$1",""]
+]
+]
+,
+  "VG": [,[,,"(?:284|8(?:00|66|77|88)|900)[2-9]\\d{6}","\\d{7,10}"]
+,[,,"284(?:(?:229|4(?:46|9[45])|8(?:52|6[459]))\\d{4}|496[0-5]\\d{3})","\\d{7,10}"]
+,[,,"284(?:(?:30[0-3]|4(?:4[0-5]|68|99)|54[0-4])\\d{4}|496[6-9]\\d{3})","\\d{10}"]
+,[,,"8(?:00|66|77|88)[2-9]\\d{6}","\\d{10}"]
+,[,,"900[2-9]\\d{6}","\\d{10}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"VG",1,"011",,,,,,,,,,,,"284"]
+,
+  "VI": [,[,,"340(?:6[49]2|7[17]\\d)\\d{4}|(?:8(?:00|66|77|88)|900)[2-9]\\d{6}","\\d{7,10}"]
+,[,,"340(?:6[49]2|7[17]\\d)\\d{4}|(?:8(?:00|66|77|88)|900)[2-9]\\d{6}","\\d{7,10}"]
+,[,,"340(?:6[49]2|7[17]\\d)\\d{4}|(?:8(?:00|66|77|88)|900)[2-9]\\d{6}","\\d{7,10}"]
+,[,,"8(00|66|77|88)[2-9]\\d{6}","\\d{10}"]
+,[,,"900[2-9]\\d{6}","\\d{10}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"VI",1,"011",,,,,,,1,,,,,"340"]
+,
+  "VN": [,[,,"8\\d{5,8}|[1-79]\\d{7,9}","\\d{7,10}"]
+,[,,"(?:2(?:[025-79]|1[0189]|[348][01])|3(?:[0136-9]|[25][01])|[48]\\d|5(?:[01][01]|[2-9])|6(?:[0-46-8]|5[01])|7(?:[02-79]|[18][01]))\\d{7}|69\\d{5,6}|80\\d{5}","\\d{7,10}"]
+,[,,"(?:9\\d|1(?:2[1-35-9]|6[3-9]|99))\\d{7}","\\d{9,10}"]
+,[,,"1800\\d{4,6}","\\d{8,10}"]
+,[,,"1900\\d{4,6}","\\d{8,10}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"VN",84,"00","0",,,"0",,,,[[,"([48])(\\d{4})(\\d{4})","$1 $2 $3",["[48]"]
+,"0$1",""]
+,[,"([235-7]\\d)(\\d{4})(\\d{3})","$1 $2 $3",["2[025-79]|3[0136-9]|5[2-9]|6[0-46-9]|7[02-79]"]
+,"0$1",""]
+,[,"(80)(\\d{5})","$1 $2",["80"]
+,"0$1",""]
+,[,"(69\\d)(\\d{4,5})","$1 $2",["69"]
+,"0$1",""]
+,[,"([235-7]\\d{2})(\\d{4})(\\d{3})","$1 $2 $3",["2[1348]|3[25]|5[01]|65|7[18]"]
+,"0$1",""]
+,[,"(9\\d)(\\d{3})(\\d{2})(\\d{2})","$1 $2 $3 $4",["9"]
+,"0$1",""]
+,[,"(1[269]\\d)(\\d{3})(\\d{4})","$1 $2 $3",["1(?:[26]|99)"]
+,"0$1",""]
+,[,"(1[89]00)(\\d{4,6})","$1 $2",["1(?:8|90)"]
+,"$1",""]
+]
+]
+,
+  "VU": [,[]
+,[]
+,[]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"VU",678,"00",,,,,,,1]
+,
+  "WF": [,[]
+,[]
+,[]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"WF",681,"19",,,,,,,1]
+,
+  "WS": [,[,,"[2-8]\\d{4,6}","\\d{5,7}"]
+,[,,"(?:[2-5]\\d|6[1-9]|840\\d)\\d{3}","\\d{5,7}"]
+,[,,"(?:60|7[25-7]\\d)\\d{4}","\\d{6,7}"]
+,[,,"800\\d{3}","\\d{6}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"WS",685,"0","0",,,"0",,,,[[,"(8[04]0)(\\d{3,4})","$1 $2",["8[04]0"]
+,"0$1",""]
+,[,"(7[25-7])(\\d{5})","$1 $2",["7[25-7]"]
+,"0$1",""]
+]
+]
+,
+  "YE": [,[,,"[1-7]\\d{6,8}","\\d{6,9}"]
+,[,,"(?:1(?:7\\d|[2-68])|2[2-68]|3[2358]|4[2-58]|5[2-6]|6[3-58]|7[24-68])\\d{5}","\\d{6,8}"]
+,[,,"7[137]\\d{7}","\\d{9}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"YE",967,"00","0",,,"0",,,,[[,"([1-7])(\\d{3})(\\d{3,4})","$1 $2 $3",["[1-6]|7[24-68]"]
+,"0$1",""]
+,[,"(7[137]\\d)(\\d{3})(\\d{3})","$1 $2 $3",["7[137]"]
+,"0$1",""]
+]
+]
+,
+  "YT": [,[,,"[268]\\d{8}","\\d{9}"]
+,[,,"2696[0-4]\\d{4}","\\d{9}"]
+,[,,"639\\d{6}","\\d{9}"]
+,[,,"80\\d{7}","\\d{9}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"YT",262,"00","0",,,"0",,,,,,,,"269|63"]
+,
+  "ZA": [,[,,"\\d{9}","\\d{8,9}"]
+,[,,"(?:1[0-8]|2[1-478]|3[1-69]|4\\d|5[1346-8])\\d{7}","\\d{8,9}"]
+,[,,"(?:7[1-4689]|8[1-5789])\\d{7}","\\d{9}"]
+,[,,"80\\d{7}","\\d{9}"]
+,[,,"86\\d{7}","\\d{9}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"87\\d{7}","\\d{9}"]
+,"ZA",27,"00","0",,,"0",,,,[[,"([1-578]\\d)(\\d{3})(\\d{4})","$1 $2 $3",,"0$1",""]
+]
+]
+,
+  "ZM": [,[,,"[289]\\d{8}","\\d{9}"]
+,[,,"21[1-8]\\d{6}","\\d{9}"]
+,[,,"9(?:55|6[4-9]|7[4-9])\\d{6}","\\d{9}"]
+,[,,"800\\d{6}","\\d{9}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"ZM",260,"00","0",,,"0",,,,[[,"([29]\\d)(\\d{7})","$1 $2",["[29]"]
+,"0$1",""]
+,[,"(800)(\\d{3})(\\d{3})","$1 $2 $3",["8"]
+,"0$1",""]
+]
+]
+,
+  "ZW": [,[,,"(?:[19]1|23)\\d{3,8}|[1-69]\\d{4,8}","\\d{3,10}"]
+,[,,"(?:1[346-8]|2(?:0[45]|2[28]|48|58[23]|[69]|7[2-46-8]|8[13-9])|3(?:08?|17?|3[78]|[45]|7[1569]|8[379])|5(?:18|483|[57-9])|6(?:37?|[459]|88)|848)\\d{3,6}|(?:2(?:27|5|7[159]|82)|39|5[346]|6[16-8])\\d{4,6}|2(?:0|70)\\d{5,6}|(?:9[2-8]|4\\d)\\d{4,7}","\\d{3,10}"]
+,[,,"(?:[19]1|73)\\d{3,8}","\\d{3,10}"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,[,,"NA","NA"]
+,"ZW",263,"00","0",,,"0",,,,[[,"([49])(\\d{3})(\\d{2,5})","$1 $2 $3",["4|9[2-9]"]
+,"0$1",""]
+,[,"([179]\\d)(\\d{3})(\\d{3,5})","$1 $2 $3",["[19]1|7"]
+,"0$1",""]
+,[,"([1-356]\\d)(\\d{3,5})","$1 $2",["1[3-9]|2(?:[1-469]|0[0-35-9]|[45][0-79])|3(?:0[0-79]|1[0-689]|[24-69]|3[0-69])|5(?:[02-46-9]|[15][0-69])|6(?:[0145]|[29][0-79]|3[0-689]|[68][0-69])"]
+,"0$1",""]
+,[,"([1-356]\\d)(\\d{3})(\\d{3})","$1 $2 $3",["1[3-9]|2(?:[1-469]|0[0-35-9]|[45][0-79])|3(?:0[0-79]|1[0-689]|[24-69]|3[0-69])|5(?:[02-46-9]|[15][0-69])|6(?:[0145]|[29][0-79]|3[0-689]|[68][0-69])"]
+,"0$1",""]
+,[,"([2356]\\d{2})(\\d{3,5})","$1 $2",["2(?:[278]|0[45]|48)|3(?:08|17|3[78]|[78])|5[15][78]|6(?:[29]8|37|[68][78])"]
+,"0$1",""]
+,[,"([2356]\\d{2})(\\d{3})(\\d{3})","$1 $2 $3",["2(?:[278]|0[45]|48)|3(?:08|17|3[78]|[78])|5[15][78]|6(?:[29]8|37|[68][78])"]
+,"0$1",""]
+,[,"([25]\\d{3})(\\d{3,5})","$1 $2",["(?:25|54)8","258[23]|5483"]
+,"0$1",""]
+,[,"([25]\\d{3})(\\d{3})(\\d{3})","$1 $2 $3",["(?:25|54)8","258[23]|5483"]
+,"0$1",""]
+]
+]
+};
index e06d5d1..f5fb781 100644 (file)
@@ -142,54 +142,65 @@ i18n.phonenumbers.NumberFormat.prototype.clearFormat = function() {
 
 
 /**
- * Gets the value of the leading_digits field.
+ * Gets the value of the leading_digits_pattern field at the index given.
+ * @param {number} index The index to lookup.
  * @return {?string} The value.
  */
-i18n.phonenumbers.NumberFormat.prototype.getLeadingDigits = function() {
-  return /** @type {?string} */ (this.get$Value(3));
+i18n.phonenumbers.NumberFormat.prototype.getLeadingDigitsPattern = function(index) {
+  return /** @type {?string} */ (this.get$Value(3, index));
 };
 
 
 /**
- * Gets the value of the leading_digits field or the default value if not set.
+ * Gets the value of the leading_digits_pattern field at the index given or the default value if not set.
+ * @param {number} index The index to lookup.
  * @return {string} The value.
  */
-i18n.phonenumbers.NumberFormat.prototype.getLeadingDigitsOrDefault = function() {
-  return /** @type {string} */ (this.get$ValueOrDefault(3));
+i18n.phonenumbers.NumberFormat.prototype.getLeadingDigitsPatternOrDefault = function(index) {
+  return /** @type {string} */ (this.get$ValueOrDefault(3, index));
 };
 
 
 /**
- * Sets the value of the leading_digits field.
- * @param {string} value The value.
+ * Adds a value to the leading_digits_pattern field.
+ * @param {string} value The value to add.
  */
-i18n.phonenumbers.NumberFormat.prototype.setLeadingDigits = function(value) {
-  this.set$Value(3, /** @type {Object} */ (value));
+i18n.phonenumbers.NumberFormat.prototype.addLeadingDigitsPattern = function(value) {
+  this.add$Value(3, /** @type {Object} */ (value));
 };
 
 
 /**
- * Returns whether the leading_digits field has a value.
+ * Returns the array of values in the leading_digits_pattern field.
+ * @return {Array.<string>} The values in the field.
+ */
+i18n.phonenumbers.NumberFormat.prototype.leadingDigitsPatternArray = function() {
+  return /** @type {Array.<string>} */ (this.array$Values(3));
+};
+
+
+/**
+ * Returns whether the leading_digits_pattern field has a value.
  * @return {boolean} true if the field has a value.
  */
-i18n.phonenumbers.NumberFormat.prototype.hasLeadingDigits = function() {
+i18n.phonenumbers.NumberFormat.prototype.hasLeadingDigitsPattern = function() {
   return this.has$Value(3);
 };
 
 
 /**
- * Gets the number of values in the leading_digits field.
+ * Gets the number of values in the leading_digits_pattern field.
  * @return {number}
  */
-i18n.phonenumbers.NumberFormat.prototype.leadingDigitsCount = function() {
+i18n.phonenumbers.NumberFormat.prototype.leadingDigitsPatternCount = function() {
   return this.count$Values(3);
 };
 
 
 /**
- * Clears the values in the leading_digits field.
+ * Clears the values in the leading_digits_pattern field.
  */
-i18n.phonenumbers.NumberFormat.prototype.clearLeadingDigits = function() {
+i18n.phonenumbers.NumberFormat.prototype.clearLeadingDigitsPattern = function() {
   this.clear$Field(3);
 };
 
@@ -1714,7 +1725,8 @@ goog.proto2.Message.set$Metadata(i18n.phonenumbers.NumberFormat, {
     type: String
   },
   '3' : {
-    name: 'leading_digits',
+    name: 'leading_digits_pattern',
+    repeated: true,
     fieldType: goog.proto2.Message.FieldType.STRING,
     type: String
   },
index 2a9ffbe..de85352 100644 (file)
@@ -436,7 +436,7 @@ i18n.phonenumbers.PhoneNumberUtil.KNOWN_EXTN_PATTERNS_ =
     '[ \u00A0\\t,]*' + '(?:ext(?:ensio)?n?|\uFF45\uFF58\uFF54\uFF4E?|' +
     '[,x\uFF58#\uFF03~\uFF5E]|int|anexo|\uFF49\uFF4E\uFF54)' +
     '[:\\.\uFF0E]?[ \u00A0\\t,-]*([' +
-    i18n.phonenumbers.PhoneNumberUtil.VALID_DIGITS_ + ']{1,7})|[- ]+([' +
+    i18n.phonenumbers.PhoneNumberUtil.VALID_DIGITS_ + ']{1,7})#?|[- ]+([' +
     i18n.phonenumbers.PhoneNumberUtil.VALID_DIGITS_ + ']{1,5})#';
 
 /**
@@ -494,12 +494,6 @@ i18n.phonenumbers.PhoneNumberUtil.FG_PATTERN_ = /\$FG/;
  * @private
  */
 i18n.phonenumbers.PhoneNumberUtil.CC_PATTERN_ = /\$CC/;
-/**
- * @const
- * @type {RegExp}
- * @private
- */
-i18n.phonenumbers.PhoneNumberUtil.NON_DIGIT_PATTERN_ = /\D/;
 
 /**
  * INTERNATIONAL and NATIONAL formats are consistent with the definition in
@@ -765,8 +759,9 @@ i18n.phonenumbers.PhoneNumberUtil.prototype.getLengthOfGeographicalAreaCode =
   }
 
   /** @type {i18n.phonenumbers.PhoneNumberType} */
-  var type = this.getNumberTypeHelper_('' + number.getNationalNumber(),
-                                       metadata);
+  var type = this.getNumberTypeHelper_(
+      i18n.phonenumbers.PhoneNumberUtil.getNationalSignificantNumber(number),
+      metadata);
   // Most numbers other than the two types below have to be dialled in full.
   if (type != i18n.phonenumbers.PhoneNumberType.FIXED_LINE &&
       type != i18n.phonenumbers.PhoneNumberType.FIXED_LINE_OR_MOBILE) {
@@ -780,7 +775,7 @@ i18n.phonenumbers.PhoneNumberUtil.prototype.getLengthOfGeographicalAreaCode =
     // include the extension when we format it, so we copy it and clear the
     // extension here.
     copiedProto = new i18n.phonenumbers.PhoneNumber();
-    copiedProto.values_ = goog.cloneObject(number.values_);
+    copiedProto.mergeFrom(number);
     copiedProto.clearExtension();
   } else {
     copiedProto = number;
@@ -791,7 +786,7 @@ i18n.phonenumbers.PhoneNumberUtil.prototype.getLengthOfGeographicalAreaCode =
       i18n.phonenumbers.PhoneNumberFormat.INTERNATIONAL);
   /** @type {!Array.<string>} */
   var numberGroups = nationalSignificantNumber.split(
-      i18n.phonenumbers.PhoneNumberUtil.NON_DIGIT_PATTERN_);
+      i18n.phonenumbers.PhoneNumberUtil.NON_DIGITS_PATTERN_);
   // The pattern will start with '+COUNTRY_CODE ' so the first group will always
   // be the empty string (before the + symbol) and the second group will be the
   // country code. The third group will be area code if it's not the last group.
@@ -804,10 +799,6 @@ i18n.phonenumbers.PhoneNumberUtil.prototype.getLengthOfGeographicalAreaCode =
   if (numberGroups.length <= 2) {
     return 0;
   }
-  // Note all countries that use leading zero in national number currently don't
-  // use national prefix, so they won't have an area code, which means clients
-  // don't need to worry about appending the leading zero to the geographical
-  // area code they derive from the length we return here.
   return numberGroups[1].length;
 };
 
@@ -884,8 +875,6 @@ i18n.phonenumbers.PhoneNumberUtil.prototype.isValidRegionCode_ =
 i18n.phonenumbers.PhoneNumberUtil.prototype.format =
   function(number, numberFormat) {
 
-  /** @type {!goog.string.StringBuffer} */
-  var formattedNumber = new goog.string.StringBuffer();
   /** @type {number} */
   var countryCode = number.getCountryCodeOrDefault();
   /** @type {string} */
@@ -894,11 +883,9 @@ i18n.phonenumbers.PhoneNumberUtil.prototype.format =
   if (numberFormat == i18n.phonenumbers.PhoneNumberFormat.E164) {
     // Early exit for E164 case since no formatting of the national number needs
     // to be applied. Extensions are not formatted.
-    formattedNumber.append(nationalSignificantNumber);
-    this.formatNumberByFormat_(countryCode,
-                               i18n.phonenumbers.PhoneNumberFormat.E164,
-                               formattedNumber);
-    return formattedNumber.toString();
+    return this.formatNumberByFormat_(countryCode,
+                                      i18n.phonenumbers.PhoneNumberFormat.E164,
+                                      nationalSignificantNumber, '');
   }
   // Note getRegionCodeForCountryCode() is used because formatting information
   // for countries which share a country code is contained by only one country
@@ -907,15 +894,20 @@ i18n.phonenumbers.PhoneNumberUtil.prototype.format =
   /** @type {string} */
   var regionCode = this.getRegionCodeForCountryCode(countryCode);
   if (!this.isValidRegionCode_(regionCode)) {
-    formattedNumber.append(nationalSignificantNumber);
-    return formattedNumber.toString();
+    return nationalSignificantNumber;
   }
 
-  formattedNumber.append(this.formatNationalNumber_(nationalSignificantNumber,
-                                                    regionCode, numberFormat));
-  this.maybeGetFormattedExtension_(number, regionCode, formattedNumber);
-  this.formatNumberByFormat_(countryCode, numberFormat, formattedNumber);
-  return formattedNumber.toString();
+  /** @type {string} */
+  var formattedExtension = this.maybeGetFormattedExtension_(number, regionCode);
+  /** @type {string} */
+  var formattedNationalNumber =
+      this.formatNationalNumber_(nationalSignificantNumber,
+                                 regionCode,
+                                 numberFormat);
+  return this.formatNumberByFormat_(countryCode,
+                                    numberFormat,
+                                    formattedNationalNumber,
+                                    formattedExtension);
 };
 
 /**
@@ -950,6 +942,8 @@ i18n.phonenumbers.PhoneNumberUtil.prototype.formatByPattern =
   if (!this.isValidRegionCode_(regionCode)) {
     return nationalSignificantNumber;
   }
+  /** @type {Array.<i18n.phonenumbers.NumberFormat>} */
+  var userDefinedFormatsCopy = [];
   /** @type {number} */
   var size = userDefinedFormats.length;
   for (var i = 0; i < size; ++i) {
@@ -959,25 +953,48 @@ i18n.phonenumbers.PhoneNumberUtil.prototype.formatByPattern =
     var nationalPrefixFormattingRule =
         numFormat.getNationalPrefixFormattingRuleOrDefault();
     if (nationalPrefixFormattingRule.length > 0) {
+      // Before we do a replacement of the national prefix pattern $NP with the
+      // national prefix, we need to copy the rule so that subsequent
+      // replacements for different numbers have the appropriate national
+      // prefix.
+      /** type {i18n.phonenumbers.NumberFormat} */
+      var numFormatCopy = new i18n.phonenumbers.NumberFormat();
+      numFormatCopy.mergeFrom(numFormat);
       /** @type {string} */
       var nationalPrefix =
           this.getMetadataForRegion(regionCode).getNationalPrefixOrDefault();
-      // Replace $NP with national prefix and $FG with the first group ($1).
-      nationalPrefixFormattingRule = nationalPrefixFormattingRule
-          .replace(i18n.phonenumbers.PhoneNumberUtil.NP_PATTERN_,
-                   nationalPrefix)
-          .replace(i18n.phonenumbers.PhoneNumberUtil.FG_PATTERN_, '$1');
-      numFormat.setNationalPrefixFormattingRule(nationalPrefixFormattingRule);
+      if (nationalPrefix.length > 0) {
+        // Replace $NP with national prefix and $FG with the first group ($1).
+        nationalPrefixFormattingRule = nationalPrefixFormattingRule
+            .replace(i18n.phonenumbers.PhoneNumberUtil.NP_PATTERN_,
+                     nationalPrefix)
+            .replace(i18n.phonenumbers.PhoneNumberUtil.FG_PATTERN_, '$1');
+        numFormatCopy.setNationalPrefixFormattingRule(
+            nationalPrefixFormattingRule);
+      } else {
+        // We don't want to have a rule for how to format the national prefix if
+        // there isn't one.
+        numFormatCopy.clearNationalPrefixFormattingRule();
+      }
+      userDefinedFormatsCopy.push(numFormatCopy);
+    } else {
+      // Otherwise, we just add the original rule to the modified list of
+      // formats.
+      userDefinedFormatsCopy.push(numFormat);
     }
   }
 
-  /** @type {!goog.string.StringBuffer} */
-  var formattedNumber = new goog.string.StringBuffer(
+  /** @type {string} */
+  var formattedExtension = this.maybeGetFormattedExtension_(number, regionCode);
+  /** @type {string} */
+  var formattedNationalNumber =
       this.formatAccordingToFormats_(nationalSignificantNumber,
-                                     userDefinedFormats, numberFormat));
-  this.maybeGetFormattedExtension_(number, regionCode, formattedNumber);
-  this.formatNumberByFormat_(countryCode, numberFormat, formattedNumber);
-  return formattedNumber.toString();
+                                     userDefinedFormatsCopy,
+                                     numberFormat);
+  return this.formatNumberByFormat_(countryCode,
+                                    numberFormat,
+                                    formattedNationalNumber,
+                                    formattedExtension);
 };
 
 /**
@@ -1003,18 +1020,18 @@ i18n.phonenumbers.PhoneNumberUtil.prototype.
     return nationalSignificantNumber;
   }
 
-  /** @type {!goog.string.StringBuffer} */
-  var formattedNumber = new goog.string.StringBuffer(
+  /** @type {string} */
+  var formattedExtension = this.maybeGetFormattedExtension_(number, regionCode);
+  /** @type {string} */
+  var formattedNationalNumber =
       this.formatNationalNumber_(nationalSignificantNumber,
                                  regionCode,
                                  i18n.phonenumbers.PhoneNumberFormat.NATIONAL,
-                                 carrierCode));
-  this.maybeGetFormattedExtension_(number, regionCode, formattedNumber);
-  this.formatNumberByFormat_(countryCode,
-                             i18n.phonenumbers.PhoneNumberFormat.NATIONAL,
-                             formattedNumber);
-  return formattedNumber.toString();
-}
+                                 carrierCode);
+  return this.formatNumberByFormat_(
+      countryCode, i18n.phonenumbers.PhoneNumberFormat.NATIONAL,
+      formattedNationalNumber, formattedExtension);
+};
 
 /**
  * Formats a phone number for out-of-country dialing purpose. If no
@@ -1080,6 +1097,8 @@ i18n.phonenumbers.PhoneNumberUtil.prototype.formatOutOfCountryCallingNumber =
   var metadata = this.getMetadataForRegion(countryCallingFrom);
   /** @type {string} */
   var internationalPrefix = metadata.getInternationalPrefixOrDefault();
+  /** @type {string} */
+  var formattedExtension = this.maybeGetFormattedExtension_(number, regionCode);
 
   // For countries that have multiple international prefixes, the international
   // format of the number is returned, unless there is a preferred international
@@ -1095,17 +1114,12 @@ i18n.phonenumbers.PhoneNumberUtil.prototype.formatOutOfCountryCallingNumber =
         metadata.getPreferredInternationalPrefixOrDefault();
   }
 
-  /** @type {!goog.string.StringBuffer} */
-  var formattedNumber = new goog.string.StringBuffer(formattedNationalNumber);
-  this.maybeGetFormattedExtension_(number, regionCode, formattedNumber);
-  if (internationalPrefixForFormatting.length > 0) {
-    return internationalPrefixForFormatting + ' ' + countryCode + ' ' +
-        formattedNumber.toString();
-  } else {
-    this.formatNumberByFormat_(countryCode,
-        i18n.phonenumbers.PhoneNumberFormat.INTERNATIONAL, formattedNumber);
-  }
-  return formattedNumber.toString();
+  return internationalPrefixForFormatting != '' ?
+      internationalPrefixForFormatting + ' ' + countryCode + ' ' +
+          formattedNationalNumber + formattedExtension :
+      this.formatNumberByFormat_(
+          countryCode, i18n.phonenumbers.PhoneNumberFormat.INTERNATIONAL,
+          formattedNationalNumber, formattedExtension);
 };
 
 /**
@@ -1178,30 +1192,25 @@ i18n.phonenumbers.PhoneNumberUtil.getNationalSignificantNumber =
  * @param {number} countryCode the country calling code.
  * @param {i18n.phonenumbers.PhoneNumberFormat} numberFormat the format the
  *     phone number should be formatted into.
- * @param {!goog.string.StringBuffer} formattedNumber the formatted phone
- *     number.
+ * @param {string} formattedNationalNumber
+ * @param {string} formattedExtension
+ * @return {string} the formatted phone number.
  * @private
  */
 i18n.phonenumbers.PhoneNumberUtil.prototype.formatNumberByFormat_ =
-  function(countryCode, numberFormat, formattedNumber) {
+  function(countryCode, numberFormat,
+           formattedNationalNumber, formattedExtension) {
 
   switch (numberFormat) {
   case i18n.phonenumbers.PhoneNumberFormat.E164:
-    /** @type {string} */
-    var a = formattedNumber.toString();
-    formattedNumber.clear();
-    formattedNumber.append(i18n.phonenumbers.PhoneNumberUtil.PLUS_SIGN +
-                           countryCode + a);
-    return;
+    return i18n.phonenumbers.PhoneNumberUtil.PLUS_SIGN + countryCode +
+        formattedNationalNumber + formattedExtension;
   case i18n.phonenumbers.PhoneNumberFormat.INTERNATIONAL:
-    a = formattedNumber.toString();
-    formattedNumber.clear();
-    formattedNumber.append(i18n.phonenumbers.PhoneNumberUtil.PLUS_SIGN +
-                           countryCode + ' ' + a);
-    return;
+    return i18n.phonenumbers.PhoneNumberUtil.PLUS_SIGN + countryCode + ' ' +
+        formattedNationalNumber + formattedExtension;
   case i18n.phonenumbers.PhoneNumberFormat.NATIONAL:
   default:
-    return;
+    return formattedNationalNumber + formattedExtension;
   }
 };
 
@@ -1262,8 +1271,13 @@ i18n.phonenumbers.PhoneNumberUtil.prototype.formatAccordingToFormats_ =
   var l = availableFormats.length;
   for (var i = 0; i < l; ++i) {
     numFormat = availableFormats[i];
-    if (!numFormat.hasLeadingDigits() ||
-        nationalNumber.search(numFormat.getLeadingDigits()) == 0) {
+    /** @type {number} */
+    var size = numFormat.leadingDigitsPatternCount();
+    if (size == 0 ||
+        // We always use the last leading_digits_pattern, as it is the most
+        // detailed.
+        nationalNumber
+            .search(numFormat.getLeadingDigitsPattern(size - 1)) == 0) {
       /** @type {RegExp} */
       var patternToMatch = new RegExp(numFormat.getPattern());
       /** @type {string} */
@@ -1351,32 +1365,45 @@ i18n.phonenumbers.PhoneNumberUtil.prototype.getExampleNumberForType =
 };
 
 /**
- * Appends the formatted extension of a phone number to formattedNumber, if the
- * phone number had an extension specified.
+ * Gets the formatted extension of a phone number, if the phone number had an
+ * extension specified. If not, it returns an empty string.
  *
  * @param {i18n.phonenumbers.PhoneNumber} number the PhoneNumber that might have
  *     an extension.
  * @param {string} regionCode the ISO 3166-1 two-letter country code.
- * @param {!goog.string.StringBuffer} formattedNumber the formatted phone
- *     number.
+ * @return {string} the formatted extension if any.
  * @private
  */
 i18n.phonenumbers.PhoneNumberUtil.prototype.maybeGetFormattedExtension_ =
-  function(number, regionCode, formattedNumber) {
+  function(number, regionCode) {
 
-  if (number.hasExtension()) {
-    // Formats the extension part of the phone number by prefixing it with the
-    // appropriate extension prefix. This will be the default extension prefix,
-    // unless overridden by a preferred extension prefix for this country.
-    /** @type {i18n.phonenumbers.PhoneMetadata} */
-    var metadata = this.getMetadataForRegion(regionCode);
-    if (metadata.hasPreferredExtnPrefix()) {
-      formattedNumber.append(metadata.getPreferredExtnPrefix());
-    } else {
-      formattedNumber.append(
-          i18n.phonenumbers.PhoneNumberUtil.DEFAULT_EXTN_PREFIX_);
-    }
-    formattedNumber.append(number.getExtension());
+  if (!number.hasExtension()) {
+    return '';
+  } else {
+    return this.formatExtension_(number.getExtensionOrDefault(), regionCode);
+  }
+};
+
+/**
+ * Formats the extension part of the phone number by prefixing it with the
+ * appropriate extension prefix. This will be the default extension prefix,
+ * unless overridden by a preferred extension prefix for this country.
+ *
+ * @param {string} extensionDigits the extension digits.
+ * @param {string} regionCode the ISO 3166-1 two-letter country code.
+ * @return {string} the formatted extension.
+ * @private
+ */
+i18n.phonenumbers.PhoneNumberUtil.prototype.formatExtension_ =
+  function(extensionDigits, regionCode) {
+
+  /** @type {i18n.phonenumbers.PhoneMetadata} */
+  var metadata = this.getMetadataForRegion(regionCode);
+  if (metadata.hasPreferredExtnPrefix()) {
+    return metadata.getPreferredExtnPrefix() + extensionDigits;
+  } else {
+    return i18n.phonenumbers.PhoneNumberUtil.DEFAULT_EXTN_PREFIX_ +
+        extensionDigits;
   }
 };
 
@@ -1506,7 +1533,7 @@ i18n.phonenumbers.PhoneNumberUtil.prototype.getMetadataForRegion =
     var metadataSerialized =
         i18n.phonenumbers.metadata.countryToMetadata[regionCode];
     if (metadataSerialized == null) {
-       return null;
+      return null;
     }
     metadata = /** @type {i18n.phonenumbers.PhoneMetadata} */ (
         serializer.deserialize(i18n.phonenumbers.PhoneMetadata.getDescriptor(),
@@ -1714,6 +1741,19 @@ i18n.phonenumbers.PhoneNumberUtil.prototype.isNANPACountry =
 };
 
 /**
+ * Check whether countryCode represents the country calling code from a country
+ * whose national significant number could contain a leading zero. An example of
+ * such a country is Italy.
+ *
+ * @param {number} countryCode the country calling code.
+ * @return {boolean}
+ */
+i18n.phonenumbers.PhoneNumberUtil.isLeadingZeroCountry = function(countryCode) {
+  return countryCode in
+      i18n.phonenumbers.PhoneNumberUtil.LEADING_ZERO_COUNTRIES_;
+};
+
+/**
  * Convenience wrapper around isPossibleNumberWithReason. Instead of returning
  * the reason for failure, this method returns a boolean value.
  *
@@ -1729,19 +1769,6 @@ i18n.phonenumbers.PhoneNumberUtil.prototype.isPossibleNumber =
 };
 
 /**
- * Check whether countryCode represents the country calling code from a country
- * whose national significant number could contain a leading zero. An example of
- * such a country is Italy.
- *
- * @param {number} countryCode the country calling code.
- * @return {boolean}
- */
-i18n.phonenumbers.PhoneNumberUtil.isLeadingZeroCountry = function(countryCode) {
-  return countryCode in
-      i18n.phonenumbers.PhoneNumberUtil.LEADING_ZERO_COUNTRIES_;
-};
-
-/**
  * Check whether a phone number is a possible number. It provides a more lenient
  * check than isValidNumber in the following sense:
  *
@@ -1794,7 +1821,8 @@ i18n.phonenumbers.PhoneNumberUtil.prototype.isPossibleNumberWithReason =
     var numberLength = nationalNumber.length;
     if (numberLength < i18n.phonenumbers.PhoneNumberUtil.MIN_LENGTH_FOR_NSN_) {
       return i18n.phonenumbers.PhoneNumberUtil.ValidationResult.TOO_SHORT;
-    } else if (numberLength > i18n.phonenumbers.PhoneNumberUtil.MAX_LENGTH_FOR_NSN_) {
+    } else if (numberLength >
+               i18n.phonenumbers.PhoneNumberUtil.MAX_LENGTH_FOR_NSN_) {
       return i18n.phonenumbers.PhoneNumberUtil.ValidationResult.TOO_LONG;
     } else {
       return i18n.phonenumbers.PhoneNumberUtil.ValidationResult.IS_POSSIBLE;
@@ -1804,11 +1832,11 @@ i18n.phonenumbers.PhoneNumberUtil.prototype.isPossibleNumberWithReason =
   var possibleNumberPattern =
       generalNumDesc.getPossibleNumberPatternOrDefault();
   /** @type {Array.<string> } */
-  var a = nationalNumber.match('^' + possibleNumberPattern);
+  var matchedGroups = nationalNumber.match('^' + possibleNumberPattern);
   /** @type {string} */
-  var m = a ? a[0] : '';
-  if (m.length > 0) {
-    return (m.length == nationalNumber.length) ?
+  var firstGroup = matchedGroups ? matchedGroups[0] : '';
+  if (firstGroup.length > 0) {
+    return (firstGroup.length == nationalNumber.length) ?
         i18n.phonenumbers.PhoneNumberUtil.ValidationResult.IS_POSSIBLE :
         i18n.phonenumbers.PhoneNumberUtil.ValidationResult.TOO_LONG;
   } else {
@@ -1850,6 +1878,39 @@ i18n.phonenumbers.PhoneNumberUtil.prototype.isPossibleNumberString =
 };
 
 /**
+ * Attempts to extract a valid number from a phone number that is too long to be
+ * valid, and resets the PhoneNumber object passed in to that valid version. If
+ * no valid number could be extracted, the PhoneNumber object passed in will not
+ * be modified.
+ * @param {i18n.phonenumbers.PhoneNumber} number a PhoneNumber object which
+ *     contains a number that is too long to be valid.
+ * @return {boolean} true if a valid phone number can be successfully extracted.
+ */
+i18n.phonenumbers.PhoneNumberUtil.prototype.truncateTooLongNumber =
+    function(number) {
+
+  if (this.isValidNumber(number)) {
+    return true;
+  }
+  /** @type {i18n.phonenumbers.PhoneNumber} */
+  var numberCopy = new i18n.phonenumbers.PhoneNumber();
+  numberCopy.mergeFrom(number);
+  /** @type {number} */
+  var nationalNumber = number.getNationalNumberOrDefault();
+  do {
+    nationalNumber = Math.floor(nationalNumber / 10);
+    numberCopy.setNationalNumber(nationalNumber);
+    if (nationalNumber == 0 ||
+        this.isPossibleNumberWithReason(numberCopy) ==
+            i18n.phonenumbers.PhoneNumberUtil.ValidationResult.TOO_SHORT) {
+      return false;
+    }
+  } while (!this.isValidNumber(numberCopy));
+  number.setNationalNumber(nationalNumber);
+  return true;
+};
+
+/**
  * Extracts country code from fullNumber, returns it and places the remaining
  * number in nationalNumber. It assumes that the leading plus sign or IDD has
  * already been removed. Returns 0 if fullNumber doesn't start with a valid
@@ -1866,7 +1927,9 @@ i18n.phonenumbers.PhoneNumberUtil.prototype.extractCountryCode =
   var fullNumberStr = fullNumber.toString();
   /** @type {number} */
   var potentialCountryCode;
-  for (var i = 1; i <= 3; ++i) {
+  /** @type {number} */
+  var numberLength = fullNumberStr.length;
+  for (var i = 1; i <= 3 && i <= numberLength; ++i) {
     potentialCountryCode = parseInt(fullNumberStr.substring(0, i), 10);
     if (potentialCountryCode in
         i18n.phonenumbers.metadata.countryCodeToRegionCodeMap) {
@@ -1959,9 +2022,10 @@ i18n.phonenumbers.PhoneNumberUtil.prototype.maybeExtractCountryCode =
     // Check to see if the number is valid for the default region already. If
     // not, we check to see if the country code for the default region is
     // present at the start of the number.
+    /** @type {i18n.phonenumbers.PhoneNumberDesc} */
+    var generalDesc = defaultRegionMetadata.getGeneralDesc();
     /** @type {RegExp} */
-    var validNumberPattern = new RegExp(defaultRegionMetadata.getGeneralDesc()
-        .getNationalNumberPattern());
+    var validNumberPattern = new RegExp(generalDesc.getNationalNumberPattern());
     if (!i18n.phonenumbers.PhoneNumberUtil.matchesEntirely_(
         validNumberPattern, fullNumber.toString())) {
       /** @type {number} */
@@ -1981,8 +2045,19 @@ i18n.phonenumbers.PhoneNumberUtil.prototype.maybeExtractCountryCode =
             validNumberPattern);
         /** @type {string} */
         var potentialNationalNumberStr = potentialNationalNumber.toString();
+        /** @type {Array.<string> } */
+        var matchedGroups = potentialNationalNumberStr.match(
+            '^' + generalDesc.getPossibleNumberPattern());
+        /** @type {number} */
+        var possibleNumberMatchedLength = matchedGroups &&
+            matchedGroups[0] != null && matchedGroups[0].length || 0;
+        // If the resultant number is either valid, or still too long even with
+        // the country code stripped, we consider this a better result and keep
+        // the potential national number.
         if (i18n.phonenumbers.PhoneNumberUtil.matchesEntirely_(
-            validNumberPattern, potentialNationalNumberStr)) {
+            validNumberPattern, potentialNationalNumberStr) ||
+            possibleNumberMatchedLength > 0 &&
+            possibleNumberMatchedLength != potentialNationalNumberStr.length) {
           nationalNumber.append(potentialNationalNumberStr);
           if (storeCountryCodeSource) {
             phoneNumber.setCountryCodeSource(
@@ -2020,12 +2095,14 @@ i18n.phonenumbers.PhoneNumberUtil.prototype.parsePrefixAsIdd_ =
     /** @type {number} */
     var matchEnd = numberStr.match(iddPattern)[0].length;
     /** @type {Array.<string> } */
-    var a = numberStr.substring(matchEnd).match(
+    var matchedGroups = numberStr.substring(matchEnd).match(
         i18n.phonenumbers.PhoneNumberUtil.CAPTURING_DIGIT_PATTERN_);
-    if (a && a[1] != null && a[1].length > 0) {
+    if (matchedGroups && matchedGroups[1] != null &&
+        matchedGroups[1].length > 0) {
       /** @type {string} */
       var normalizedGroup = i18n.phonenumbers.PhoneNumberUtil.normalizeHelper_(
-          a[1], i18n.phonenumbers.PhoneNumberUtil.DIGIT_MAPPINGS, true);
+          matchedGroups[1], i18n.phonenumbers.PhoneNumberUtil.DIGIT_MAPPINGS,
+          true);
       if (normalizedGroup == '0') {
         return false;
       }
@@ -2160,14 +2237,15 @@ i18n.phonenumbers.PhoneNumberUtil.prototype.maybeStripExtension =
         numberStr.substring(0, mStart))) {
     // The numbers are captured into groups in the regular expression.
     /** @type {Array.<string>} */
-    var a = numberStr.match(i18n.phonenumbers.PhoneNumberUtil.EXTN_PATTERN_);
+    var matchedGroups =
+        numberStr.match(i18n.phonenumbers.PhoneNumberUtil.EXTN_PATTERN_);
     /** @type {number} */
-    var aLength = a.length;
-    for (var i = 1; i < aLength; ++i) {
-      if (a[i] != null && a[i].length > 0) {
+    var matchedGroupsLength = matchedGroups.length;
+    for (var i = 1; i < matchedGroupsLength; ++i) {
+      if (matchedGroups[i] != null && matchedGroups[i].length > 0) {
         number.clear();
         number.append(numberStr.substring(0, mStart));
-        return a[i];
+        return matchedGroups[i];
       }
     }
   }
@@ -2188,23 +2266,24 @@ i18n.phonenumbers.PhoneNumberUtil.prototype.maybeStripExtension =
  *     denotes the country that we are expecting the number to be from. This is
  *     only used if the number being parsed is not written in international
  *     format. The country code for the number in this case would be stored as
- *     that of the default country supplied.
+ *     that of the default country supplied.  If the number is guaranteed to
+ *     start with a '+' followed by the country code, then 'ZZ' or null can be
+ *     supplied.
  * @return {i18n.phonenumbers.PhoneNumber} a phone number proto buffer filled
  *     with the parsed number.
- * @throws {i18n.phonenumbers.Error}
+ * @throws {i18n.phonenumbers.Error} if the string is not considered to be a
+ *     viable phone number or if no default country was supplied and the number
+ *     is not in international format (does not start with +).
  */
 i18n.phonenumbers.PhoneNumberUtil.prototype.parse = function(numberToParse,
                                                              defaultCountry) {
-  /** @type {i18n.phonenumbers.PhoneNumber} */
-  var phoneNumber = new i18n.phonenumbers.PhoneNumber();
   if (!this.isValidRegionCode_(defaultCountry)) {
     if (numberToParse.charAt(0) !=
-           i18n.phonenumbers.PhoneNumberUtil.PLUS_SIGN) {
+        i18n.phonenumbers.PhoneNumberUtil.PLUS_SIGN) {
       throw i18n.phonenumbers.Error.INVALID_COUNTRY_CODE;
     }
   }
-  this.parseHelper_(numberToParse, defaultCountry, false, phoneNumber);
-  return phoneNumber;
+  return this.parseHelper_(numberToParse, defaultCountry, false);
 };
 
 /**
@@ -2220,32 +2299,28 @@ i18n.phonenumbers.PhoneNumberUtil.prototype.parse = function(numberToParse,
  *     only used if the number being parsed is not written in international
  *     format. The country code for the number in this case would be stored as
  *     that of the default country supplied.
- * @param {i18n.phonenumbers.PhoneNumber=} opt_phoneNumber mutable PhoneNumber
- *     to decrease object creation when invoked many times.
  * @return {i18n.phonenumbers.PhoneNumber} a phone number proto buffer filled
  *     with the parsed number.
- * @throws {i18n.phonenumbers.Error}
+ * @throws {i18n.phonenumbers.Error} if the string is not considered to be a
+ *     viable phone number or if no default country was supplied and the number
+ *     is not in international format (does not start with +).
  */
 i18n.phonenumbers.PhoneNumberUtil.prototype.parseAndKeepRawInput =
-  function(numberToParse, defaultCountry, opt_phoneNumber) {
+  function(numberToParse, defaultCountry) {
 
-  /** @type {i18n.phonenumbers.PhoneNumber} */
-  var phoneNumber = opt_phoneNumber != null ?
-      opt_phoneNumber : new i18n.phonenumbers.PhoneNumber();
   if (!this.isValidRegionCode_(defaultCountry)) {
     if (numberToParse.charAt(0) !=
-           i18n.phonenumbers.PhoneNumberUtil.PLUS_SIGN) {
+        i18n.phonenumbers.PhoneNumberUtil.PLUS_SIGN) {
       throw i18n.phonenumbers.Error.INVALID_COUNTRY_CODE;
     }
   }
-  this.parseHelper_(numberToParse, defaultCountry, true, phoneNumber);
-  return phoneNumber;
+  return this.parseHelper_(numberToParse, defaultCountry, true);
 };
 
 /**
- * Parses a string and fills up the phoneNumber. This method is the same as the
- * public parse() method, with the exception that it allows the default country
- * to be null, for use by isNumberMatch().
+ * Parses a string and returns it in proto buffer format. This method is the
+ * same as the public parse() method, with the exception that it allows the
+ * default country to be null, for use by isNumberMatch().
  *
  * @param {string} numberToParse number that we are attempting to parse. This
  *     can contain formatting such as +, ( and -, as well as a phone number
@@ -2257,13 +2332,13 @@ i18n.phonenumbers.PhoneNumberUtil.prototype.parseAndKeepRawInput =
  *     that of the default country supplied.
  * @param {boolean} keepRawInput whether to populate the raw_input field of the
  *     phoneNumber with numberToParse.
- * @param {i18n.phonenumbers.PhoneNumber} phoneNumber the PhoneNumber object to
- *     populate.
+ * @return {i18n.phonenumbers.PhoneNumber} a phone number proto buffer filled
+ *     with the parsed number.
  * @throws {i18n.phonenumbers.Error}
  * @private
  */
 i18n.phonenumbers.PhoneNumberUtil.prototype.parseHelper_ =
-  function(numberToParse, defaultCountry, keepRawInput, phoneNumber) {
+  function(numberToParse, defaultCountry, keepRawInput) {
 
   // Extract a possible number from the string passed in (this strips leading
   // characters that could not be the start of a phone number.)
@@ -2274,6 +2349,8 @@ i18n.phonenumbers.PhoneNumberUtil.prototype.parseHelper_ =
     throw i18n.phonenumbers.Error.NOT_A_NUMBER;
   }
 
+  /** @type {i18n.phonenumbers.PhoneNumber} */
+  var phoneNumber = new i18n.phonenumbers.PhoneNumber();
   if (keepRawInput) {
     phoneNumber.setRawInput(numberToParse);
   }
@@ -2345,6 +2422,7 @@ i18n.phonenumbers.PhoneNumberUtil.prototype.parseHelper_ =
     phoneNumber.setItalianLeadingZero(true);
   }
   phoneNumber.setNationalNumber(parseInt(normalizedNationalNumberStr, 10));
+  return phoneNumber;
 };
 
 /**
@@ -2369,27 +2447,30 @@ i18n.phonenumbers.PhoneNumberUtil.prototype.parseHelper_ =
  * @return {i18n.phonenumbers.PhoneNumberUtil.MatchType} NO_MATCH,
  *     SHORT_NSN_MATCH, NSN_MATCH or EXACT_MATCH depending on the level of
  *     equality of the two numbers, described in the method definition.
- * @throws {i18n.phonenumbers.Error}
+ * @throws {i18n.phonenumbers.Error} if either number is not considered to be
+ *     a viable phone number.
  */
 i18n.phonenumbers.PhoneNumberUtil.prototype.isNumberMatch =
   function(firstNumberIn, secondNumberIn) {
 
   /** @type {i18n.phonenumbers.PhoneNumber} */
-  var firstNumber = new i18n.phonenumbers.PhoneNumber();
+  var firstNumber;
   /** @type {i18n.phonenumbers.PhoneNumber} */
-  var secondNumber = new i18n.phonenumbers.PhoneNumber();
+  var secondNumber;
   // If the input arguements are strings parse them to a proto buffer format.
   // Else make copies of the phone numbers so that the numbers passed in are not
   // edited.
   if (typeof firstNumberIn == 'string') {
-    this.parseHelper_(firstNumberIn, null, false, firstNumber);
+    firstNumber = this.parseHelper_(firstNumberIn, null, false);
   } else {
-    firstNumber.values_ = goog.cloneObject(firstNumberIn.values_);
+    firstNumber = new i18n.phonenumbers.PhoneNumber();
+    firstNumber.mergeFrom(firstNumberIn);
   }
   if (typeof secondNumberIn == 'string') {
-    this.parseHelper_(secondNumberIn, null, false, secondNumber);
+    secondNumber = this.parseHelper_(secondNumberIn, null, false);
   } else {
-    secondNumber.values_ = goog.cloneObject(secondNumberIn.values_);
+    secondNumber = new i18n.phonenumbers.PhoneNumber();
+    secondNumber.mergeFrom(secondNumberIn);
   }
   // First clear raw_input and country_code_source field and any empty-string
   // extensions so that
@@ -2479,8 +2560,8 @@ i18n.phonenumbers.PhoneNumberUtil.prototype.isNationalNumberSuffixOfTheOther_ =
  */
 i18n.phonenumbers.PhoneNumberUtil.matchesEntirely_ = function(regex, str) {
   /** @type {Array.<string>} */
-  var a = str.match(regex);
-  if (a && a[0].length == str.length) {
+  var matchedGroups = str.match(regex);
+  if (matchedGroups && matchedGroups[0].length == str.length) {
     return true;
   }
   return false;
@@ -2510,3 +2591,25 @@ i18n.phonenumbers.PhoneNumberDesc.prototype.exactlySameAs = function(other) {
       this.getPossibleNumberPattern() == other.getPossibleNumberPattern() &&
       this.getExampleNumber() == other.getExampleNumber();
 };
+
+/**
+ * @param {i18n.phonenumbers.PhoneNumber} other
+ * @return {i18n.phonenumbers.PhoneNumber}
+ */
+i18n.phonenumbers.PhoneNumber.prototype.mergeFrom = function(other) {
+  if (other) {
+    this.values_ = goog.cloneObject(other.values_);
+  }
+  return this;
+};
+
+/**
+ * @param {i18n.phonenumbers.NumberFormat} other
+ * @return {i18n.phonenumbers.NumberFormat}
+ */
+i18n.phonenumbers.NumberFormat.prototype.mergeFrom = function(other) {
+  if (other) {
+    this.values_ = goog.cloneObject(other.values_);
+  }
+  return this;
+};
index 5dfecd0..312e5fb 100644 (file)
@@ -30,7 +30,7 @@ function testGetInstanceLoadUSMetadata() {
   assertEquals('US', metadata.getId());
   assertEquals(1, metadata.getCountryCode());
   assertEquals('011', metadata.getInternationalPrefix());
-  assertFalse(metadata.hasNationalPrefix());
+  assertTrue(metadata.hasNationalPrefix());
   assertEquals(2, metadata.numberFormatCount());
   assertEquals('(\\d{3})(\\d{3})(\\d{4})',
                metadata.getNumberFormat(0).getPattern());
@@ -56,11 +56,12 @@ function testGetInstanceLoadDEMetadata() {
   assertEquals(49, metadata.getCountryCode());
   assertEquals('00', metadata.getInternationalPrefix());
   assertEquals('0', metadata.getNationalPrefix());
-  assertEquals(6, metadata.numberFormatCount());
-  assertEquals('9009', metadata.getNumberFormat(5).getLeadingDigits());
-  assertEquals('(\\d{3})(\\d{4})(\\d{4})',
-               metadata.getNumberFormat(5).getPattern());
-  assertEquals('$1 $2 $3', metadata.getNumberFormat(5).getFormat());
+  assertEquals(5, metadata.numberFormatCount());
+  assertEquals(1, metadata.getNumberFormat(4).leadingDigitsPatternCount());
+  assertEquals('900', metadata.getNumberFormat(4).getLeadingDigitsPattern(0));
+  assertEquals('(\\d{3})(\\d{3,4})(\\d{4})',
+               metadata.getNumberFormat(4).getPattern());
+  assertEquals('$1 $2 $3', metadata.getNumberFormat(4).getFormat());
   assertEquals('(?:[24-6]\\d{2}|3[03-9]\\d|[789](?:[1-9]\\d|0[2-9]))\\d{3,8}',
                metadata.getFixedLine().getNationalNumberPattern());
   assertEquals('\\d{2,14}', metadata.getFixedLine().getPossibleNumberPattern());
@@ -325,6 +326,14 @@ function testFormatDENumber() {
 
   deNumber = new i18n.phonenumbers.PhoneNumber();
   deNumber.setCountryCode(49);
+  deNumber.setNationalNumber(80212345);
+  assertEquals('08021 2345',
+               phoneUtil.format(deNumber, PNF.NATIONAL));
+  assertEquals('+49 8021 2345',
+               phoneUtil.format(deNumber, PNF.INTERNATIONAL));
+
+  deNumber = new i18n.phonenumbers.PhoneNumber();
+  deNumber.setCountryCode(49);
   deNumber.setNationalNumber(1234);
   // Note this number is correctly formatted without national prefix.
   // Most of the numbers that are treated as invalid numbers by the library are
@@ -495,29 +504,27 @@ function testFormatOutOfCountryWithPreferredIntlPrefix() {
 }
 
 function testFormatWithCarrierCode() {
+  var PNF = i18n.phonenumbers.PhoneNumberFormat;
   // We only support this for AR in our test metadata.
   /** @type {i18n.phonenumbers.PhoneNumber} */
   var arNumber = new i18n.phonenumbers.PhoneNumber();
   arNumber.setCountryCode(54);
   arNumber.setNationalNumber(91234125678);
   assertEquals('01234 12-5678',
-               phoneUtil.format(arNumber,
-                                i18n.phonenumbers.PhoneNumberFormat.NATIONAL));
+               phoneUtil.format(arNumber, PNF.NATIONAL));
   // Test formatting with a carrier code.
   assertEquals('01234 15 12-5678',
                phoneUtil.formatNationalNumberWithCarrierCode(arNumber, '15'));
   // Here the international rule is used, so no carrier code should be present.
   assertEquals('+5491234125678',
-               phoneUtil.format(arNumber,
-                                i18n.phonenumbers.PhoneNumberFormat.E164));
+               phoneUtil.format(arNumber, PNF.E164));
   // We don't support this for the US so there should be no change.
   /** @type {i18n.phonenumbers.PhoneNumber} */
   var usNumber = new i18n.phonenumbers.PhoneNumber();
   usNumber.setCountryCode(1);
   usNumber.setNationalNumber(4241231234);
   assertEquals('424 123 1234',
-               phoneUtil.format(usNumber,
-                                i18n.phonenumbers.PhoneNumberFormat.NATIONAL));
+               phoneUtil.format(usNumber, PNF.NATIONAL));
   assertEquals('424 123 1234',
                phoneUtil.formatNationalNumberWithCarrierCode(usNumber, '15'));
 }
@@ -545,6 +552,23 @@ function testFormatByPattern() {
                                          PNF.INTERNATIONAL,
                                          newNumberFormats));
 
+  // $NP is set to '1' for the US. Here we check that for other NANPA countries
+  // the US rules are followed.
+  newNumFormat.setNationalPrefixFormattingRule('$NP ($FG)');
+  newNumFormat.setFormat('$1 $2-$3');
+  /** @type {i18n.phonenumbers.PhoneNumber} */
+  var bsNumber = new i18n.phonenumbers.PhoneNumber();
+  bsNumber.setCountryCode(1);
+  bsNumber.setNationalNumber(4168819999);
+  assertEquals('1 (416) 881-9999',
+               phoneUtil.formatByPattern(bsNumber,
+                                         PNF.NATIONAL,
+                                         newNumberFormats));
+  assertEquals('+1 416 881-9999',
+               phoneUtil.formatByPattern(bsNumber,
+                                         PNF.INTERNATIONAL,
+                                         newNumberFormats));
+
   /** @type {i18n.phonenumbers.PhoneNumber} */
   var itNumber = new i18n.phonenumbers.PhoneNumber();
   itNumber.setCountryCode(39);
@@ -1076,6 +1100,75 @@ function testIsNotPossibleNumber() {
   assertFalse(phoneUtil.isPossibleNumberString('+44 300', 'GB'));
 }
 
+function testTruncateTooLongNumber() {
+  // US number 650-253-0000, but entered with one additional digit at the end.
+  /** @type {i18n.phonenumbers.PhoneNumber} */
+  var tooLongNumber = new i18n.phonenumbers.PhoneNumber();
+  tooLongNumber.setCountryCode(1);
+  tooLongNumber.setNationalNumber(65025300001);
+  /** @type {i18n.phonenumbers.PhoneNumber} */
+  var validNumber = new i18n.phonenumbers.PhoneNumber();
+  validNumber.setCountryCode(1);
+  validNumber.setNationalNumber(6502530000);
+  assertTrue(phoneUtil.truncateTooLongNumber(tooLongNumber));
+  assertTrue(validNumber.exactlySameAs(tooLongNumber));
+
+  // GB number 080 1234 5678, but entered with 4 extra digits at the end.
+  tooLongNumber = new i18n.phonenumbers.PhoneNumber();
+  tooLongNumber.setCountryCode(44);
+  tooLongNumber.setNationalNumber(80123456780123);
+  validNumber = new i18n.phonenumbers.PhoneNumber();
+  validNumber.setCountryCode(44);
+  validNumber.setNationalNumber(8012345678);
+  assertTrue(phoneUtil.truncateTooLongNumber(tooLongNumber));
+  assertTrue(validNumber.exactlySameAs(tooLongNumber));
+
+  // IT number 022 3456 7890, but entered with 3 extra digits at the end.
+  tooLongNumber = new i18n.phonenumbers.PhoneNumber();
+  tooLongNumber.setCountryCode(39);
+  tooLongNumber.setNationalNumber(2234567890123);
+  tooLongNumber.setItalianLeadingZero(true);
+  validNumber = new i18n.phonenumbers.PhoneNumber();
+  validNumber.setCountryCode(39);
+  validNumber.setNationalNumber(2234567890);
+  validNumber.setItalianLeadingZero(true);
+  assertTrue(phoneUtil.truncateTooLongNumber(tooLongNumber));
+  assertTrue(validNumber.exactlySameAs(tooLongNumber));
+
+  // Tests what happens when a valid number is passed in.
+  /** @type {i18n.phonenumbers.PhoneNumber} */
+  var validNumberCopy = new i18n.phonenumbers.PhoneNumber();
+  validNumberCopy.mergeFrom(validNumber);
+  assertTrue(phoneUtil.truncateTooLongNumber(validNumber));
+  // Tests the number is not modified.
+  assertTrue(validNumber.exactlySameAs(validNumberCopy));
+
+  // Tests what happens when a number with invalid prefix is passed in.
+  /** @type {i18n.phonenumbers.PhoneNumber} */
+  var numberWithInvalidPrefix = new i18n.phonenumbers.PhoneNumber();
+  // The test metadata says US numbers cannot have prefix 240.
+  numberWithInvalidPrefix.setCountryCode(1);
+  numberWithInvalidPrefix.setNationalNumber(2401234567);
+  /** @type {i18n.phonenumbers.PhoneNumber} */
+  var invalidNumberCopy = new i18n.phonenumbers.PhoneNumber();
+  invalidNumberCopy.mergeFrom(numberWithInvalidPrefix);
+  assertFalse(phoneUtil.truncateTooLongNumber(numberWithInvalidPrefix));
+  // Tests the number is not modified.
+  assertTrue(numberWithInvalidPrefix.exactlySameAs(invalidNumberCopy));
+
+  // Tests what happens when a too short number is passed in.
+  /** @type {i18n.phonenumbers.PhoneNumber} */
+  var tooShortNumber = new i18n.phonenumbers.PhoneNumber();
+  tooShortNumber.setCountryCode(1);
+  tooShortNumber.setNationalNumber(1234);
+  /** @type {i18n.phonenumbers.PhoneNumber} */
+  var tooShortNumberCopy = new i18n.phonenumbers.PhoneNumber();
+  tooShortNumberCopy.mergeFrom(tooShortNumber);
+  assertFalse(phoneUtil.truncateTooLongNumber(tooShortNumber));
+  // Tests the number is not modified.
+  assertTrue(tooShortNumber.exactlySameAs(tooShortNumberCopy));
+}
+
 function testIsViablePhoneNumber() {
   var isViable = i18n.phonenumbers.PhoneNumberUtil.isViablePhoneNumber;
   // Only one or two digits before strange non-possible punctuation.
@@ -1349,7 +1442,7 @@ function testMaybeExtractCountryCode() {
   }
   number = new i18n.phonenumbers.PhoneNumber();
   try {
-    phoneNumber = '(1 610) 619 43 446';
+    phoneNumber = '(1 610) 619 43';
     numberToFill = new goog.string.StringBuffer();
     assertEquals('Should not have extracted a country code - invalid number ' +
                  'both before and after extraction of uncertain country code.',
@@ -1412,6 +1505,8 @@ function testParseNationalNumber() {
   var tollfreeNumber = new i18n.phonenumbers.PhoneNumber();
   tollfreeNumber.setCountryCode(64);
   tollfreeNumber.setNationalNumber(800332005);
+  assertTrue(tollfreeNumber.exactlySameAs(
+      phoneUtil.parse('0800 DDA 005', 'NZ')));
   /** @type {i18n.phonenumbers.PhoneNumber} */
   var premiumNumber = new i18n.phonenumbers.PhoneNumber();
   premiumNumber.setCountryCode(64);
@@ -1726,13 +1821,13 @@ function testParseExtensions() {
   /** @type {i18n.phonenumbers.PhoneNumber} */
   var nonExtnNumber = new i18n.phonenumbers.PhoneNumber();
   nonExtnNumber.setCountryCode(1);
-  nonExtnNumber.setNationalNumber(180074935247);
+  nonExtnNumber.setNationalNumber(80074935247);
   assertTrue(nonExtnNumber.exactlySameAs(
       phoneUtil.parse('1800 six-flags', 'US')));
   assertTrue(nonExtnNumber.exactlySameAs(
       phoneUtil.parse('1800 SIX FLAGS', 'US')));
   assertTrue(nonExtnNumber.exactlySameAs(
-      phoneUtil.parse('0~01 1800 7493 5247', 'PL')));
+      phoneUtil.parse('0~0 1800 7493 5247', 'PL')));
   assertTrue(nonExtnNumber.exactlySameAs(
       phoneUtil.parse('(1800) 7493.5247', 'US')));
 
@@ -1740,10 +1835,10 @@ function testParseExtensions() {
   /** @type {i18n.phonenumbers.PhoneNumber} */
   var extnNumber = new i18n.phonenumbers.PhoneNumber();
   extnNumber.setCountryCode(1);
-  extnNumber.setNationalNumber(180074935247);
+  extnNumber.setNationalNumber(80074935247);
   extnNumber.setExtension('1234');
   assertTrue(extnNumber.exactlySameAs(
-      phoneUtil.parse('0~01 1800 7493 5247 ~1234', 'PL')));
+      phoneUtil.parse('0~0 1800 7493 5247 ~1234', 'PL')));
 
   // Verifying bug-fix where the last digit of a number was previously omitted
   // if it was a 0 when extracting the extension. Also verifying a few different
@@ -1807,6 +1902,9 @@ function testParseExtensions() {
   usWithExtension.setExtension('910');
   assertTrue(usWithExtension.exactlySameAs(
       phoneUtil.parse('+1 (645) 123 1234-910#', 'US')));
+  // Retry with the same number in a slightly different format.
+  assertTrue(usWithExtension.exactlySameAs(
+      phoneUtil.parse('+1 (645) 123 1234 ext. 910#', 'US')));
 }
 
 function testParseAndKeepRaw() {
@@ -1814,11 +1912,11 @@ function testParseAndKeepRaw() {
   /** @type {i18n.phonenumbers.PhoneNumber} */
   var alphaNumericNumber = new i18n.phonenumbers.PhoneNumber();
   alphaNumericNumber.setCountryCode(1);
-  alphaNumericNumber.setNationalNumber(180074935247);
-  alphaNumericNumber.setRawInput('1800 six-flags');
+  alphaNumericNumber.setNationalNumber(80074935247);
+  alphaNumericNumber.setRawInput('800 six-flags');
   alphaNumericNumber.setCountryCodeSource(CCS.FROM_DEFAULT_COUNTRY);
   assertTrue(alphaNumericNumber.exactlySameAs(
-      phoneUtil.parseAndKeepRawInput('1800 six-flags', 'US')));
+      phoneUtil.parseAndKeepRawInput('800 six-flags', 'US')));
 
   alphaNumericNumber.setCountryCode(1);
   alphaNumericNumber.setNationalNumber(8007493524);