[
  {
    "path": ".github/workflows/main.yml",
    "content": "name: CI\n\non: [push]\n\njobs:\n  test:\n    runs-on: ${{ matrix.os }}\n\n    strategy:\n      matrix:\n        os: [macOS-latest]\n\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v1\n      - name: Build and Test\n        run: swift test\n"
  },
  {
    "path": ".gitignore",
    "content": ".DS_Store\n/.build\n/Packages\n/*.xcodeproj\n.swiftpm\nResources/data/*\n"
  },
  {
    "path": "Brewfile",
    "content": "tap 'nshipster/formulae'\nbrew 'gyb'\n"
  },
  {
    "path": "LICENSE.md",
    "content": "Copyright 2019 Mattt (https://mat.tt)\n\nPermission is hereby granted, free of charge, to any person obtaining a\ncopy of this software and associated documentation files (the \"Software\"),\nto deal in the Software without restriction, including without limitation\nthe rights to use, copy, modify, merge, publish, distribute, sublicense,\nand/or sell copies of the Software, and to permit persons to whom the\nSoftware is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\nOR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\nFROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\nDEALINGS IN THE SOFTWARE.\n"
  },
  {
    "path": "Makefile",
    "content": "INPUTS = $(patsubst %,Resources/data/%.json,$(shell swift Scripts/Regions.swift))\n\n.DEFAULT_GOAL: all\n\n.PHONY: all\nall: Sources/PostalCodeValidator/PostalCodeValidator.swift Tests/PostalCodeValidatorTests/PostalCodeValidatorTests.swift\n\nSources/PostalCodeValidator/PostalCodeValidator.swift: Resources/postalData.json\nTests/PostalCodeValidatorTests/PostalCodeValidatorTests.swift: Resources/postalData.json\n\nResources/data/%.json:\n\t@mkdir -p Resources/data\n\t@curl -sS \"http://i18napis.appspot.com/address/data/$(basename $(notdir $@))\" > $@\n\nResources/postalData.json: $(INPUTS)\n\t@echo \"[\" > $@\n\t@awk 'FNR==1 && NR!=1 {print \",\\n\"}{print}' Resources/data/* >> $@\n\t@echo \"]\" >> $@\n\n%.swift: %.swift.gyb\n\t@gyb --line-directive '' -o $@ $<\n\n.PHONY:\nclean:\n\t@rm -rf Resources/data\n\t@rm -f Sources/PostalCodeValidator/PostalCodeValidator.swift\n"
  },
  {
    "path": "Package.swift",
    "content": "// swift-tools-version:4.0\n// The swift-tools-version declares the minimum version of Swift required to build this package.\n\nimport PackageDescription\n\nlet package = Package(\n    name: \"PostalCodeValidator\",\n    products: [\n        // Products define the executables and libraries produced by a package, and make them visible to other packages.\n        .library(\n            name: \"PostalCodeValidator\",\n            targets: [\"PostalCodeValidator\"]\n        ),\n    ],\n    dependencies: [\n        // Dependencies declare other packages that this package depends on.\n        // .package(url: /* package url */, from: \"1.0.0\"),\n    ],\n    targets: [\n        // Targets are the basic building blocks of a package. A target can define a module or a test suite.\n        // Targets can depend on other targets in this package, and on products in packages which this package depends on.\n        .target(\n            name: \"PostalCodeValidator\",\n            dependencies: []\n        ),\n        .testTarget(\n            name: \"PostalCodeValidatorTests\",\n            dependencies: [\"PostalCodeValidator\"]\n        ),\n    ]\n)\n"
  },
  {
    "path": "README.md",
    "content": "# PostalCodeValidator\n\n[![Build Status][ci status badge]][ci status]\n[![License][license badge]][license]\n[![Swift Version][swift version badge]][swift version]\n\nA validator for [postal codes](https://en.wikipedia.org/wiki/Postal_code)\nwith support for 200+ regions.\n\n```swift\nimport Foundation\nimport PostalCodeValidator\n\nif let validator = PostalCodeValidator(locale: .current) { // United States (US)\n    validator.validate(postalCode: \"95014\") // true\n    validator.validate(postalCode: \"22162-1010\") // true\n\n    validator.validate(postalCode: \"1234567\") // false\n    validator.validate(postalCode: \"INVALID\") // false\n}\n\n// 248 regions supported\nif let validator = PostalCodeValidator(regionCode: \"JP\") { // Japan (JP)\n    validator.validate(postalCode: \"154-0023\") // true\n    validator.validate(postalCode: \"12345\") // false\n}\n```\n\n> **Note**: Only the region of a locale is used to determine validation rules.\n> To validate the postal code for a particular region,\n> you can construct a locale using an identifier with the `\"und\"` language code.\n\n## Requirements\n\n- Swift 4.0+\n\n## Installation\n\n### Swift Package Manager\n\nAdd the PostalCodeValidator package to your target dependencies in `Package.swift`:\n\n```swift\nimport PackageDescription\n\nlet package = Package(\n  name: \"YourProject\",\n  dependencies: [\n    .package(\n        url: \"https://github.com/FormatterKit/PostalCodeValidator\",\n        from: \"0.1.0\"\n    ),\n  ]\n)\n```\n\nThen run the `swift build` command to build your project.\n\n## Known Issues\n\n- Armed forces in Germany (and likely other countries)\n  use [special postal codes](https://de.wikipedia.org/wiki/Feldpost_%28Bundeswehr%29),\n  which aren't included in the upstream data source.\n  This will cause validation of these postal codes to fail.\n  _(Thanks for pointing this out, [@timohetzel](https://twitter.com/timohetzel))_\n\n## Additional Details\n\nThe CLDR previously maintained a list of postal code formats,\nbut that information was\n[deprecated in v27](http://unicode.org/reports/tr35/tr35-info.html#Postal_Code_Validation).\n\nFollowing the guidance of the\n[twitter-cldr-rb](https://github.com/twitter/twitter-cldr-rb/issues/166) project,\n`PostalCodeValidator` sources its information from http://i18napis.appspot.com.\nThe most recent release of this software uses\ninformation retrieved from the website on November 27, 2019.\n\n## License\n\nMIT\n\n## Contact\n\nMattt ([@mattt](https://twitter.com/mattt))\n\n[ci status]: https://github.com/FormatterKit/PostalCodeValidator/actions\n[ci status badge]: https://github.com/FormatterKit/PostalCodeValidator/workflows/CI/badge.svg\n[license]: http://img.shields.io/badge/license-MIT-blue.svg?style=flat\n[license badge]: http://img.shields.io/badge/license-MIT-blue.svg?style=flat\n[swift version]: https://swift.org/download/\n[swift version badge]: http://img.shields.io/badge/swift%20version-4.0+-orange.svg?style=flat\n"
  },
  {
    "path": "Resources/postalData.json",
    "content": "[\n  {\n    \"zipex\": \"ASCN 1ZZ\",\n    \"name\": \"ASCENSION ISLAND\",\n    \"zip\": \"ASCN 1ZZ\",\n    \"fmt\": \"%N%n%O%n%A%n%C%n%Z\",\n    \"key\": \"AC\",\n    \"id\": \"data/AC\"\n  },\n  {\n    \"lang\": \"ca\",\n    \"sub_zipexs\": \"AD500~AD100~AD200~AD700~AD400~AD300~AD600\",\n    \"zipex\": \"AD100,AD501,AD700\",\n    \"sub_zips\": \"AD50[01]~AD10[01]~AD20[01]~AD70[01]~AD40[01]~AD30[01]~AD60[01]\",\n    \"zip\": \"AD[1-7]0\\\\d\",\n    \"fmt\": \"%N%n%O%n%A%n%Z %C\",\n    \"languages\": \"ca\",\n    \"sub_keys\": \"Parròquia d'Andorra la Vella~Canillo~Encamp~Escaldes-Engordany~La Massana~Ordino~Sant Julià de Lòria\",\n    \"key\": \"AD\",\n    \"sub_isoids\": \"07~02~03~08~04~05~06\",\n    \"posturl\": \"http://www.correos.es/comun/CodigosPostales/1010_s-CodPostal.asp?Provincia=\",\n    \"id\": \"data/AD\",\n    \"sub_names\": \"Andorra la Vella~Canillo~Encamp~Escaldes-Engordany~La Massana~Ordino~Sant Julià de Lòria\",\n    \"name\": \"ANDORRA\"\n  },\n  {\n    \"lang\": \"ar\",\n    \"sub_lnames\": \"Abu Dhabi~Sharjah~Fujairah~Umm Al Quwain~Dubai~Ras al Khaimah~Ajman\",\n    \"name\": \"UNITED ARAB EMIRATES\",\n    \"require\": \"AS\",\n    \"state_name_type\": \"emirate\",\n    \"id\": \"data/AE\",\n    \"languages\": \"ar\",\n    \"lfmt\": \"%N%n%O%n%A%n%S\",\n    \"sub_keys\": \"أبو ظبي~إمارة الشارقةّ~الفجيرة~ام القيوين~إمارة دبيّ~إمارة رأس الخيمة~عجمان\",\n    \"key\": \"AE\",\n    \"sub_isoids\": \"AZ~SH~FU~UQ~DU~RK~AJ\",\n    \"fmt\": \"%N%n%O%n%A%n%S\",\n    \"sub_names\": \"أبو ظبي~الشارقة~الفجيرة~ام القيوين~دبي~رأس الخيمة~عجمان\"\n  },\n  {\n    \"zipex\": \"1001,2601,3801\",\n    \"key\": \"AF\",\n    \"zip\": \"\\\\d{4}\",\n    \"fmt\": \"%N%n%O%n%A%n%C%n%Z\",\n    \"posturl\": \"http://postalcode.afghanpost.gov.af/\",\n    \"id\": \"data/AF\",\n    \"name\": \"AFGHANISTAN\"\n  },\n  {\n    \"require\": \"A\",\n    \"id\": \"data/AG\",\n    \"key\": \"AG\",\n    \"name\": \"ANTIGUA AND BARBUDA\"\n  },\n  {\n    \"zipex\": \"2640\",\n    \"name\": \"ANGUILLA\",\n    \"zip\": \"(?:AI-)?2640\",\n    \"fmt\": \"%N%n%O%n%A%n%C%n%Z\",\n    \"key\": \"AI\",\n    \"id\": \"data/AI\"\n  },\n  {\n    \"zipex\": \"1001,1017,3501\",\n    \"name\": \"ALBANIA\",\n    \"zip\": \"\\\\d{4}\",\n    \"fmt\": \"%N%n%O%n%A%n%Z%n%C\",\n    \"key\": \"AL\",\n    \"id\": \"data/AL\"\n  },\n  {\n    \"lang\": \"hy\",\n    \"sub_zipexs\": \"0201,0514~0601,0823~0901,1149~1201,1626~0000,0099~1701,2117~2201,2506~2601,3126~3201,3519~3601,3810~3901,4216\",\n    \"zipex\": \"375010,0002,0010\",\n    \"sub_zips\": \"0[2-5]~0[6-8]~09|1[01]~1[2-6]~00~1[7-9]|2[01]~2[2-5]~2[6-9]|3[01]~3[2-5]~3[6-8]~39|4[0-2]\",\n    \"zip\": \"(?:37)?\\\\d{4}\",\n    \"fmt\": \"%N%n%O%n%A%n%Z%n%C%n%S\",\n    \"languages\": \"hy\",\n    \"lfmt\": \"%N%n%O%n%A%n%Z%n%C%n%S\",\n    \"sub_lnames\": \"Aragatsotn~Ararat~Armavir~Gegharkunik~Yerevan~Lori~Kotayk~Shirak~Syunik~Vayots Dzor~Tavush\",\n    \"sub_keys\": \"Արագածոտն~Արարատ~Արմավիր~Գեղարքունիք~Երևան~Լոռի~Կոտայք~Շիրակ~Սյունիք~Վայոց ձոր~Տավուշ\",\n    \"key\": \"AM\",\n    \"sub_isoids\": \"AG~AR~AV~GR~ER~LO~KT~SH~SU~VD~TV\",\n    \"id\": \"data/AM\",\n    \"name\": \"ARMENIA\"\n  },\n  {\n    \"id\": \"data/AO\",\n    \"key\": \"AO\",\n    \"name\": \"ANGOLA\"\n  },\n  {\n    \"id\": \"data/AQ\",\n    \"key\": \"AQ\",\n    \"name\": \"ANTARCTICA\"\n  },\n  {\n    \"lang\": \"es\",\n    \"upper\": \"ACZ\",\n    \"zipex\": \"C1070AAM,C1000WAM,B1000TBU,X5187XAB\",\n    \"sub_zips\": \"B?[1-36-8]~K?[45]~H?3~U?[89]~C?1~X?[235-8]~W?3~E?[1-3]~P?[37]~Y?4~L?[3568]~F?5~M?[56]~N?3~Q?[38]~R?[89]~A?[34]~J?5~D?[4-6]~Z?[89]~S?[2368]~G?[2-5]~V?9~T?[45]\",\n    \"zip\": \"((?:[A-HJ-NP-Z])?\\\\d{4})([A-Z]{3})?\",\n    \"fmt\": \"%N%n%O%n%A%n%Z %C%n%S\",\n    \"languages\": \"es\",\n    \"sub_keys\": \"Buenos Aires~Catamarca~Chaco~Chubut~Ciudad Autónoma de Buenos Aires~Córdoba~Corrientes~Entre Ríos~Formosa~Jujuy~La Pampa~La Rioja~Mendoza~Misiones~Neuquén~Río Negro~Salta~San Juan~San Luis~Santa Cruz~Santa Fe~Santiago del Estero~Tierra del Fuego~Tucumán\",\n    \"key\": \"AR\",\n    \"sub_isoids\": \"B~K~H~U~C~X~W~E~P~Y~L~F~M~N~Q~R~A~J~D~Z~S~G~V~T\",\n    \"posturl\": \"http://www.correoargentino.com.ar/formularios/cpa\",\n    \"id\": \"data/AR\",\n    \"sub_names\": \"Buenos Aires~Catamarca~Chaco~Chubut~Ciudad Autónoma de Buenos Aires~Córdoba~Corrientes~Entre Ríos~Formosa~Jujuy~La Pampa~La Rioja~Mendoza~Misiones~Neuquén~Río Negro~Salta~San Juan~San Luis~Santa Cruz~Santa Fe~Santiago del Estero~Tierra del Fuego~Tucumán\",\n    \"name\": \"ARGENTINA\"\n  },\n  {\n    \"upper\": \"ACNOS\",\n    \"zipex\": \"96799\",\n    \"key\": \"AS\",\n    \"zip\": \"(96799)(?:[ \\\\-](\\\\d{4}))?\",\n    \"zip_name_type\": \"zip\",\n    \"require\": \"ACSZ\",\n    \"state_name_type\": \"state\",\n    \"id\": \"data/AS\",\n    \"posturl\": \"http://zip4.usps.com/zip4/welcome.jsp\",\n    \"fmt\": \"%N%n%O%n%A%n%C %S %Z\",\n    \"name\": \"AMERICAN SAMOA\"\n  },\n  {\n    \"zipex\": \"1010,3741\",\n    \"key\": \"AT\",\n    \"zip\": \"\\\\d{4}\",\n    \"fmt\": \"%O%n%N%n%A%n%Z %C\",\n    \"id\": \"data/AT\",\n    \"posturl\": \"http://www.post.at/post_subsite_postleitzahlfinder.php\",\n    \"require\": \"ACZ\",\n    \"name\": \"AUSTRIA\"\n  },\n  {\n    \"lang\": \"en\",\n    \"upper\": \"CS\",\n    \"sub_zipexs\": \"0200,2540,2618,2999~1000,2888,3585,3707~0800,0999~4000,9999~5000~7000,7999~3000,8000~6000,0872\",\n    \"zipex\": \"2060,3171,6430,4000,4006,3001\",\n    \"sub_zips\": \"29|2540|260|261[0-8]|02|2620~1|2[0-57-8]|26[2-9]|261[189]|3500|358[56]|3644|3707~0[89]~[49]~5|0872~7~[38]~6|0872\",\n    \"zip\": \"\\\\d{4}\",\n    \"require\": \"ACSZ\",\n    \"state_name_type\": \"state\",\n    \"id\": \"data/AU\",\n    \"languages\": \"en\",\n    \"sub_keys\": \"ACT~NSW~NT~QLD~SA~TAS~VIC~WA\",\n    \"key\": \"AU\",\n    \"locality_name_type\": \"suburb\",\n    \"posturl\": \"http://www1.auspost.com.au/postcodes/\",\n    \"fmt\": \"%O%n%N%n%A%n%C %S %Z\",\n    \"sub_names\": \"Australian Capital Territory~New South Wales~Northern Territory~Queensland~South Australia~Tasmania~Victoria~Western Australia\",\n    \"name\": \"AUSTRALIA\"\n  },\n  {\n    \"id\": \"data/AW\",\n    \"key\": \"AW\",\n    \"name\": \"ARUBA\"\n  },\n  {\n    \"postprefix\": \"AX-\",\n    \"zipex\": \"22150,22550,22240,22710,22270,22730,22430\",\n    \"key\": \"AX\",\n    \"zip\": \"22\\\\d{3}\",\n    \"fmt\": \"%O%n%N%n%A%nAX-%Z %C%nÅLAND\",\n    \"id\": \"data/AX\",\n    \"posturl\": \"http://www.posten.ax/department.con?iPage=123\",\n    \"require\": \"ACZ\",\n    \"name\": \"FINLAND\"\n  },\n  {\n    \"postprefix\": \"AZ \",\n    \"zipex\": \"1000\",\n    \"name\": \"AZERBAIJAN\",\n    \"zip\": \"\\\\d{4}\",\n    \"fmt\": \"%N%n%O%n%A%nAZ %Z %C\",\n    \"key\": \"AZ\",\n    \"id\": \"data/AZ\"\n  },\n  {\n    \"zipex\": \"71000\",\n    \"name\": \"BOSNIA AND HERZEGOVINA\",\n    \"zip\": \"\\\\d{5}\",\n    \"fmt\": \"%N%n%O%n%A%n%Z %C\",\n    \"key\": \"BA\",\n    \"id\": \"data/BA\"\n  },\n  {\n    \"zipex\": \"BB23026,BB22025\",\n    \"name\": \"BARBADOS\",\n    \"zip\": \"BB\\\\d{5}\",\n    \"fmt\": \"%N%n%O%n%A%n%C, %S %Z\",\n    \"state_name_type\": \"parish\",\n    \"key\": \"BB\",\n    \"id\": \"data/BB\"\n  },\n  {\n    \"zipex\": \"1340,1000\",\n    \"key\": \"BD\",\n    \"zip\": \"\\\\d{4}\",\n    \"fmt\": \"%N%n%O%n%A%n%C - %Z\",\n    \"posturl\": \"http://www.bangladeshpost.gov.bd/PostCode.asp\",\n    \"id\": \"data/BD\",\n    \"name\": \"BANGLADESH\"\n  },\n  {\n    \"zipex\": \"4000,1000\",\n    \"key\": \"BE\",\n    \"zip\": \"\\\\d{4}\",\n    \"fmt\": \"%O%n%N%n%A%n%Z %C\",\n    \"id\": \"data/BE\",\n    \"posturl\": \"http://www.post.be/site/nl/residential/customerservice/search/postal_codes.html\",\n    \"require\": \"ACZ\",\n    \"name\": \"BELGIUM\"\n  },\n  {\n    \"fmt\": \"%N%n%O%n%A%n%C %X\",\n    \"id\": \"data/BF\",\n    \"key\": \"BF\",\n    \"name\": \"BURKINA FASO\"\n  },\n  {\n    \"zipex\": \"1000,1700\",\n    \"key\": \"BG\",\n    \"zip\": \"\\\\d{4}\",\n    \"fmt\": \"%N%n%O%n%A%n%Z %C\",\n    \"posturl\": \"http://www.bgpost.bg/?cid=5\",\n    \"id\": \"data/BG\",\n    \"name\": \"BULGARIA (REP.)\"\n  },\n  {\n    \"zipex\": \"317\",\n    \"name\": \"BAHRAIN\",\n    \"zip\": \"(?:\\\\d|1[0-2])\\\\d{2}\",\n    \"fmt\": \"%N%n%O%n%A%n%C %Z\",\n    \"key\": \"BH\",\n    \"id\": \"data/BH\"\n  },\n  {\n    \"id\": \"data/BI\",\n    \"key\": \"BI\",\n    \"name\": \"BURUNDI\"\n  },\n  {\n    \"upper\": \"AC\",\n    \"id\": \"data/BJ\",\n    \"key\": \"BJ\",\n    \"name\": \"BENIN\"\n  },\n  {\n    \"upper\": \"ACX\",\n    \"zipex\": \"97100\",\n    \"key\": \"BL\",\n    \"zip\": \"9[78][01]\\\\d{2}\",\n    \"require\": \"ACZ\",\n    \"id\": \"data/BL\",\n    \"posturl\": \"http://www.laposte.fr/Particulier/Utiliser-nos-outils-pratiques/Outils-et-documents/Trouvez-un-code-postal\",\n    \"fmt\": \"%O%n%N%n%A%n%Z %C %X\",\n    \"name\": \"SAINT BARTHELEMY\"\n  },\n  {\n    \"zipex\": \"FL 07,HM GX,HM 12\",\n    \"key\": \"BM\",\n    \"zip\": \"[A-Z]{2} ?[A-Z0-9]{2}\",\n    \"fmt\": \"%N%n%O%n%A%n%C %Z\",\n    \"posturl\": \"http://www.landvaluation.bm/\",\n    \"id\": \"data/BM\",\n    \"name\": \"BERMUDA\"\n  },\n  {\n    \"zipex\": \"BT2328,KA1131,BA1511\",\n    \"key\": \"BN\",\n    \"zip\": \"[A-Z]{2} ?\\\\d{4}\",\n    \"fmt\": \"%N%n%O%n%A%n%C %Z\",\n    \"posturl\": \"http://www.post.gov.bn/index.php/extensions/postcode-guide\",\n    \"id\": \"data/BN\",\n    \"name\": \"BRUNEI DARUSSALAM\"\n  },\n  {\n    \"upper\": \"AC\",\n    \"id\": \"data/BO\",\n    \"key\": \"BO\",\n    \"name\": \"BOLIVIA\"\n  },\n  {\n    \"id\": \"data/BQ\",\n    \"key\": \"BQ\",\n    \"name\": \"BONAIRE, SINT EUSTATIUS, AND SABA\"\n  },\n  {\n    \"lang\": \"pt\",\n    \"sublocality_name_type\": \"neighborhood\",\n    \"sub_zipexs\": \"69900-000,69999-999~57000-000,57999-999~68900-000,68999-999~69000-000,69400-123~40000-000,48999-999~60000-000,63999-999~70000-000,73500-123~29000-000,29999-999~72800-000,73700-123~65000-000,65999-999~78000-000,78899-999~79000-000,79999-999~30000-000,39999-999~66000-000,68899-999~58000-000,58999-999~80000-000,87999-999~50000-000,56999-999~64000-000,64999-999~20000-000,28999-999~59000-000,59999-999~90000-000,99999-999~76800-000,78900-000,78999-999~69300-000,69399-999~88000-000,89999-999~01000-000,13000-123~49000-000,49999-999~77000-000,77999-999\",\n    \"zipex\": \"40301-110,70002-900\",\n    \"sub_zips\": \"699~57~689~69[0-24-8]~4[0-8]~6[0-3]~7[0-1]|72[0-7]|73[0-6]~29~72[89]|73[7-9]|7[4-6]~65~78[0-8]~79~3~6[6-7]|68[0-8]~58~8[0-7]~5[0-6]~64~2[0-8]~59~9~76[89]|789~693~8[89]~[01][1-9]~49~77\",\n    \"zip\": \"\\\\d{5}-?\\\\d{3}\",\n    \"upper\": \"CS\",\n    \"sub_mores\": \"true~true~true~true~true~true~true~true~true~true~true~true~true~true~true~true~true~true~true~true~true~true~true~true~true~true~true\",\n    \"require\": \"ASCZ\",\n    \"state_name_type\": \"state\",\n    \"id\": \"data/BR\",\n    \"languages\": \"pt\",\n    \"sub_keys\": \"AC~AL~AP~AM~BA~CE~DF~ES~GO~MA~MT~MS~MG~PA~PB~PR~PE~PI~RJ~RN~RS~RO~RR~SC~SP~SE~TO\",\n    \"key\": \"BR\",\n    \"sub_isoids\": \"AC~AL~AP~AM~BA~CE~DF~ES~GO~MA~MT~MS~MG~PA~PB~PR~PE~PI~RJ~RN~RS~RO~RR~SC~SP~SE~TO\",\n    \"posturl\": \"http://www.buscacep.correios.com.br/\",\n    \"fmt\": \"%O%n%N%n%A%n%D%n%C-%S%n%Z\",\n    \"sub_names\": \"Acre~Alagoas~Amapá~Amazonas~Bahia~Ceará~Distrito Federal~Espírito Santo~Goiás~Maranhão~Mato Grosso~Mato Grosso do Sul~Minas Gerais~Pará~Paraíba~Paraná~Pernambuco~Piauí~Rio de Janeiro~Rio Grande do Norte~Rio Grande do Sul~Rondônia~Roraima~Santa Catarina~São Paulo~Sergipe~Tocantins\",\n    \"name\": \"BRAZIL\"\n  },\n  {\n    \"lang\": \"en\",\n    \"name\": \"BAHAMAS\",\n    \"fmt\": \"%N%n%O%n%A%n%C, %S\",\n    \"state_name_type\": \"island\",\n    \"languages\": \"en\",\n    \"sub_keys\": \"Abaco~Acklins~Andros~Berry Islands~Bimini~Cat Island~Crooked Island~Eleuthera~Exuma~Grand Bahama~Harbour Island~Inagua~Long Island~Mayaguana~N.P.~Ragged Island~Rum Cay~San Salvador~Spanish Wells\",\n    \"key\": \"BS\",\n    \"sub_isoids\": \"~AK~~BY~BI~CI~~~EX~~HI~IN~LI~MG~~RI~RC~SS~SW\",\n    \"id\": \"data/BS\",\n    \"sub_names\": \"Abaco Islands~Acklins~Andros Island~Berry Islands~Bimini~Cat Island~Crooked Island~Eleuthera~Exuma and Cays~Grand Bahama~Harbour Island~Inagua~Long Island~Mayaguana~New Providence~Ragged Island~Rum Cay~San Salvador~Spanish Wells\"\n  },\n  {\n    \"zipex\": \"11001,31101,35003\",\n    \"key\": \"BT\",\n    \"zip\": \"\\\\d{5}\",\n    \"fmt\": \"%N%n%O%n%A%n%C %Z\",\n    \"posturl\": \"http://www.bhutanpost.bt/searchpostcode.php\",\n    \"id\": \"data/BT\",\n    \"name\": \"BHUTAN\"\n  },\n  {\n    \"id\": \"data/BV\",\n    \"key\": \"BV\",\n    \"name\": \"BOUVET ISLAND\"\n  },\n  {\n    \"id\": \"data/BW\",\n    \"key\": \"BW\",\n    \"name\": \"BOTSWANA\"\n  },\n  {\n    \"zipex\": \"223016,225860,220050\",\n    \"key\": \"BY\",\n    \"zip\": \"\\\\d{6}\",\n    \"fmt\": \"%S%n%Z %C%n%A%n%O%n%N\",\n    \"posturl\": \"http://ex.belpost.by/addressbook/\",\n    \"id\": \"data/BY\",\n    \"name\": \"BELARUS\"\n  },\n  {\n    \"id\": \"data/BZ\",\n    \"key\": \"BZ\",\n    \"name\": \"BELIZE\"\n  },\n  {\n    \"lang\": \"en\",\n    \"upper\": \"ACNOSZ\",\n    \"zipex\": \"H3Z 2Y7,V8X 3X4,T0L 1K0,T0H 1A0,K1A 0B1\",\n    \"sub_zips\": \"T~V~R~E~A~X0E|X0G|X1A~B~X0A|X0B|X0C~K|L|M|N|P~C~G|H|J|K1A~S|R8A~Y\",\n    \"zip\": \"[ABCEGHJKLMNPRSTVXY]\\\\d[ABCEGHJ-NPRSTV-Z] ?\\\\d[ABCEGHJ-NPRSTV-Z]\\\\d\",\n    \"require\": \"ACSZ\",\n    \"id\": \"data/CA\",\n    \"languages\": \"en~fr\",\n    \"sub_keys\": \"AB~BC~MB~NB~NL~NT~NS~NU~ON~PE~QC~SK~YT\",\n    \"key\": \"CA\",\n    \"posturl\": \"https://www.canadapost.ca/cpo/mc/personal/postalcode/fpc.jsf\",\n    \"fmt\": \"%N%n%O%n%A%n%C %S %Z\",\n    \"sub_names\": \"Alberta~British Columbia~Manitoba~New Brunswick~Newfoundland and Labrador~Northwest Territories~Nova Scotia~Nunavut~Ontario~Prince Edward Island~Quebec~Saskatchewan~Yukon\",\n    \"name\": \"CANADA\"\n  },\n  {\n    \"upper\": \"CS\",\n    \"zipex\": \"6799\",\n    \"name\": \"COCOS (KEELING) ISLANDS\",\n    \"zip\": \"6799\",\n    \"fmt\": \"%O%n%N%n%A%n%C %S %Z\",\n    \"key\": \"CC\",\n    \"id\": \"data/CC\"\n  },\n  {\n    \"id\": \"data/CD\",\n    \"key\": \"CD\",\n    \"name\": \"CONGO (DEM. REP.)\"\n  },\n  {\n    \"id\": \"data/CF\",\n    \"key\": \"CF\",\n    \"name\": \"CENTRAL AFRICAN REPUBLIC\"\n  },\n  {\n    \"id\": \"data/CG\",\n    \"key\": \"CG\",\n    \"name\": \"CONGO (REP.)\"\n  },\n  {\n    \"postprefix\": \"CH-\",\n    \"upper\": \"\",\n    \"zipex\": \"2544,1211,1556,3030\",\n    \"key\": \"CH\",\n    \"zip\": \"\\\\d{4}\",\n    \"require\": \"ACZ\",\n    \"id\": \"data/CH\",\n    \"posturl\": \"http://www.post.ch/db/owa/pv_plz_pack/pr_main\",\n    \"fmt\": \"%O%n%N%n%A%nCH-%Z %C\",\n    \"name\": \"SWITZERLAND\"\n  },\n  {\n    \"fmt\": \"%N%n%O%n%X %A %C %X\",\n    \"id\": \"data/CI\",\n    \"key\": \"CI\",\n    \"name\": \"COTE D'IVOIRE\"\n  },\n  {\n    \"id\": \"data/CK\",\n    \"key\": \"CK\",\n    \"name\": \"COOK ISLANDS\"\n  },\n  {\n    \"lang\": \"es\",\n    \"zipex\": \"8340457,8720019,1230000,8329100\",\n    \"posturl\": \"http://www.correos.cl/SitePages/home.aspx\",\n    \"zip\": \"\\\\d{7}\",\n    \"sub_mores\": \"true~true~true~true~true~true~true~true~true~true~true~true~true~true~true\",\n    \"fmt\": \"%N%n%O%n%A%n%Z %C%n%S\",\n    \"languages\": \"es\",\n    \"sub_keys\": \"Antofagasta~Araucanía~Arica y Parinacota~Atacama~Aysén~Biobío~Coquimbo~O'Higgins~Los Lagos~Los Ríos~Magallanes~Maule~Región Metropolitana~Tarapacá~Valparaíso\",\n    \"key\": \"CL\",\n    \"sub_isoids\": \"AN~AR~AP~AT~AI~BI~CO~LI~LL~LR~MA~ML~RM~TA~VS\",\n    \"id\": \"data/CL\",\n    \"sub_names\": \"Antofagasta~Araucanía~Arica y Parinacota~Atacama~Aysén del General Carlos Ibáñez del Campo~Biobío~Coquimbo~Libertador General Bernardo O'Higgins~Los Lagos~Los Ríos~Magallanes y de la Antártica Chilena~Maule~Metropolitana de Santiago~Tarapacá~Valparaíso\",\n    \"name\": \"CHILE\"\n  },\n  {\n    \"id\": \"data/CM\",\n    \"key\": \"CM\",\n    \"name\": \"CAMEROON\"\n  },\n  {\n    \"lang\": \"zh\",\n    \"sublocality_name_type\": \"district\",\n    \"sub_xrequires\": \"~A~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ACS~~~\",\n    \"zipex\": \"266033,317204,100096,100808\",\n    \"key\": \"CN\",\n    \"zip\": \"\\\\d{6}\",\n    \"upper\": \"S\",\n    \"sub_mores\": \"true~true~true~true~true~true~true~true~true~true~true~true~true~true~true~true~true~true~true~true~true~true~true~true~true~true~true~true~true~true~true~true~true~true\",\n    \"require\": \"ACSZ\",\n    \"id\": \"data/CN\",\n    \"languages\": \"zh\",\n    \"lfmt\": \"%N%n%O%n%A%n%D%n%C%n%S, %Z\",\n    \"sub_lnames\": \"Anhui Sheng~Macau~Beijing Shi~Chongqing Shi~Fujian Sheng~Gansu Sheng~Guangdong Sheng~Guangxi Zhuangzuzizhiqu~Guizhou Sheng~Hainan Sheng~Hebei Sheng~Henan Sheng~Heilongjiang Sheng~Hubei Sheng~Hunan Sheng~Jilin Sheng~Jiangsu Sheng~Jiangxi Sheng~Liaoning Sheng~Neimenggu Zizhiqu~Ningxia Huizuzizhiqu~Qinghai Sheng~Shandong Sheng~Shanxi Sheng~Shaanxi Sheng~Shanghai Shi~Sichuan Sheng~Taiwan~Tianjin Shi~Xizang Zizhiqu~Hong Kong~Xinjiang Weiwuerzizhiqu~Yunnan Sheng~Zhejiang Sheng\",\n    \"sub_keys\": \"安徽省~澳门~北京市~重庆市~福建省~甘肃省~广东省~广西壮族自治区~贵州省~海南省~河北省~河南省~黑龙江省~湖北省~湖南省~吉林省~江苏省~江西省~辽宁省~内蒙古自治区~宁夏回族自治区~青海省~山东省~山西省~陕西省~上海市~四川省~台湾~天津市~西藏自治区~香港~新疆维吾尔自治区~云南省~浙江省\",\n    \"sub_xzips\": \"~999078~~~~~~~~~~~~~~~~~~~~~~~~~~\\\\d{3}(\\\\d{2})?~~~999077~~~\",\n    \"sub_isoids\": \"34~92~11~50~35~62~44~45~52~46~13~41~23~42~43~22~32~36~21~15~64~63~37~14~61~31~51~71~12~54~91~65~53~33\",\n    \"posturl\": \"http://www.ems.com.cn/serviceguide/you_bian_cha_xun.html\",\n    \"fmt\": \"%Z%n%S%C%D%n%A%n%O%n%N\",\n    \"sub_names\": \"安徽省~澳门~北京市~重庆市~福建省~甘肃省~广东省~广西~贵州省~海南省~河北省~河南省~黑龙江省~湖北省~湖南省~吉林省~江苏省~江西省~辽宁省~内蒙古~宁夏~青海省~山东省~山西省~陕西省~上海市~四川省~台湾~天津市~西藏~香港~新疆~云南省~浙江省\",\n    \"name\": \"CHINA\"\n  },\n  {\n    \"zipex\": \"111221,130001,760011\",\n    \"key\": \"CO\",\n    \"zip\": \"\\\\d{6}\",\n    \"fmt\": \"%N%n%O%n%A%n%C, %S, %Z\",\n    \"state_name_type\": \"department\",\n    \"id\": \"data/CO\",\n    \"posturl\": \"http://www.codigopostal.gov.co/\",\n    \"require\": \"AS\",\n    \"name\": \"COLOMBIA\"\n  },\n  {\n    \"zipex\": \"1000,2010,1001\",\n    \"key\": \"CR\",\n    \"zip\": \"\\\\d{4,5}|\\\\d{3}-\\\\d{4}\",\n    \"fmt\": \"%N%n%O%n%A%n%S, %C%n%Z\",\n    \"id\": \"data/CR\",\n    \"posturl\": \"https://www.correos.go.cr/nosotros/codigopostal/busqueda.html\",\n    \"require\": \"ACS\",\n    \"name\": \"COSTA RICA\"\n  },\n  {\n    \"lang\": \"pt\",\n    \"zipex\": \"7600\",\n    \"name\": \"CAPE VERDE\",\n    \"zip\": \"\\\\d{4}\",\n    \"fmt\": \"%N%n%O%n%A%n%Z %C%n%S\",\n    \"state_name_type\": \"island\",\n    \"languages\": \"pt\",\n    \"sub_keys\": \"Boa Vista~Brava~Fogo~Maio~Sal~Santiago~Santo Antão~São Nicolau~São Vicente\",\n    \"key\": \"CV\",\n    \"sub_isoids\": \"BV~BR~~MA~SL~~~~SV\",\n    \"id\": \"data/CV\"\n  },\n  {\n    \"id\": \"data/CW\",\n    \"key\": \"CW\",\n    \"name\": \"CURACAO\"\n  },\n  {\n    \"upper\": \"CS\",\n    \"zipex\": \"6798\",\n    \"name\": \"CHRISTMAS ISLAND\",\n    \"zip\": \"6798\",\n    \"fmt\": \"%O%n%N%n%A%n%C %S %Z\",\n    \"key\": \"CX\",\n    \"id\": \"data/CX\"\n  },\n  {\n    \"zipex\": \"2008,3304,1900\",\n    \"name\": \"CYPRUS\",\n    \"zip\": \"\\\\d{4}\",\n    \"fmt\": \"%N%n%O%n%A%n%Z %C\",\n    \"key\": \"CY\",\n    \"id\": \"data/CY\"\n  },\n  {\n    \"zipex\": \"100 00,251 66,530 87,110 00,225 99\",\n    \"key\": \"CZ\",\n    \"zip\": \"\\\\d{3} ?\\\\d{2}\",\n    \"fmt\": \"%N%n%O%n%A%n%Z %C\",\n    \"posturl\": \"http://psc.ceskaposta.cz/CleanForm.action\",\n    \"id\": \"data/CZ\",\n    \"name\": \"CZECH REP.\"\n  },\n  {\n    \"zipex\": \"26133,53225\",\n    \"key\": \"DE\",\n    \"zip\": \"\\\\d{5}\",\n    \"fmt\": \"%N%n%O%n%A%n%Z %C\",\n    \"id\": \"data/DE\",\n    \"posturl\": \"http://www.postdirekt.de/plzserver/\",\n    \"require\": \"ACZ\",\n    \"name\": \"GERMANY\"\n  },\n  {\n    \"id\": \"data/DJ\",\n    \"key\": \"DJ\",\n    \"name\": \"DJIBOUTI\"\n  },\n  {\n    \"zipex\": \"8660,1566\",\n    \"key\": \"DK\",\n    \"zip\": \"\\\\d{4}\",\n    \"fmt\": \"%N%n%O%n%A%n%Z %C\",\n    \"id\": \"data/DK\",\n    \"posturl\": \"http://www.postdanmark.dk/da/Privat/Kundeservice/postnummerkort/Sider/Find-postnummer.aspx\",\n    \"require\": \"ACZ\",\n    \"name\": \"DENMARK\"\n  },\n  {\n    \"id\": \"data/DM\",\n    \"key\": \"DM\",\n    \"name\": \"DOMINICA\"\n  },\n  {\n    \"zipex\": \"11903,10101\",\n    \"key\": \"DO\",\n    \"zip\": \"\\\\d{5}\",\n    \"fmt\": \"%N%n%O%n%A%n%Z %C\",\n    \"posturl\": \"http://inposdom.gob.do/codigo-postal/\",\n    \"id\": \"data/DO\",\n    \"name\": \"DOMINICAN REP.\"\n  },\n  {\n    \"zipex\": \"40304,16027\",\n    \"name\": \"ALGERIA\",\n    \"zip\": \"\\\\d{5}\",\n    \"fmt\": \"%N%n%O%n%A%n%Z %C\",\n    \"key\": \"DZ\",\n    \"id\": \"data/DZ\"\n  },\n  {\n    \"upper\": \"CZ\",\n    \"zipex\": \"090105,092301\",\n    \"key\": \"EC\",\n    \"zip\": \"\\\\d{6}\",\n    \"fmt\": \"%N%n%O%n%A%n%Z%n%C\",\n    \"posturl\": \"http://www.codigopostal.gob.ec/\",\n    \"id\": \"data/EC\",\n    \"name\": \"ECUADOR\"\n  },\n  {\n    \"zipex\": \"69501,11212\",\n    \"key\": \"EE\",\n    \"zip\": \"\\\\d{5}\",\n    \"fmt\": \"%N%n%O%n%A%n%Z %C\",\n    \"posturl\": \"http://www.post.ee/?op=sihtnumbriotsing\",\n    \"id\": \"data/EE\",\n    \"name\": \"ESTONIA\"\n  },\n  {\n    \"lang\": \"ar\",\n    \"sub_zipexs\": \"81000~71000~21000,23000~41000~85000~84000~22000~12000~35000~43000~44000~31000~63000~11000~13000~32000~61000~72000~62000~42000~46000~34000~82000~45000~83000~33000~51000\",\n    \"zipex\": \"12411,11599\",\n    \"sub_zips\": \"81~71~2[13]~41~85~84~22~12~35~43~44~31~63~11~13~32~61~72~62~42~46~34~82~45~83~33~51\",\n    \"zip\": \"\\\\d{5}\",\n    \"fmt\": \"%N%n%O%n%A%n%C%n%S%n%Z\",\n    \"languages\": \"ar\",\n    \"lfmt\": \"%N%n%O%n%A%n%C%n%S%n%Z\",\n    \"sub_lnames\": \"Aswan Governorate~Asyut Governorate~Alexandria Governorate~Ismailia Governorate~Luxor Governorate~Red Sea Governorate~El Beheira Governorate~Giza Governorate~Dakahlia Governorate~Suez Governorate~Ash Sharqia Governorate~Gharbia Governorate~Faiyum Governorate~Cairo Governorate~Qalyubia Governorate~Menofia Governorate~Menia Governorate~New Valley Governorate~Beni Suef Governorate~Port Said Governorate~South Sinai Governorate~Damietta Governorate~Sohag Governorate~North Sinai Governorate~Qena Governorate~Kafr El Sheikh Governorate~Matrouh Governorate\",\n    \"sub_keys\": \"أسوان~أسيوط~الإسكندرية~الإسماعيلية~الأقصر~البحر الأحمر~البحيرة~الجيزة~الدقهلية~السويس~الشرقية~الغربية~الفيوم~القاهرة~القليوبية~المنوفية~المنيا~الوادي الجديد~بني سويف~بورسعيد~جنوب سيناء~دمياط~سوهاج~شمال سيناء~قنا~كفر الشيخ~مطروح\",\n    \"key\": \"EG\",\n    \"sub_isoids\": \"ASN~AST~ALX~IS~LX~BA~BH~GZ~DK~SUZ~SHR~GH~FYM~C~KB~MNF~MN~WAD~BNS~PTS~JS~DT~SHG~SIN~KN~KFS~MT\",\n    \"id\": \"data/EG\",\n    \"name\": \"EGYPT\"\n  },\n  {\n    \"zipex\": \"70000,72000\",\n    \"name\": \"WESTERN SAHARA\",\n    \"zip\": \"\\\\d{5}\",\n    \"fmt\": \"%N%n%O%n%A%n%Z %C\",\n    \"key\": \"EH\",\n    \"id\": \"data/EH\"\n  },\n  {\n    \"id\": \"data/ER\",\n    \"key\": \"ER\",\n    \"name\": \"ERITREA\"\n  },\n  {\n    \"lang\": \"es\",\n    \"upper\": \"CS\",\n    \"zipex\": \"28039,28300,28070\",\n    \"sub_zips\": \"15~01~02~03~04~33~05~06~08~09~10~11~39~12~51~13~14~16~17~18~19~20~21~22~07~23~26~35~24~25~27~28~29~52~30~31~32~34~36~37~38~40~41~42~43~44~45~46~47~48~49~50\",\n    \"zip\": \"\\\\d{5}\",\n    \"require\": \"ACSZ\",\n    \"id\": \"data/ES\",\n    \"languages\": \"es\",\n    \"sub_keys\": \"A Coruña~Álava~Albacete~Alicante~Almería~Asturias~Ávila~Badajoz~Barcelona~Burgos~Cáceres~Cádiz~Cantabria~Castellón~Ceuta~Ciudad Real~Córdoba~Cuenca~Girona~Granada~Guadalajara~Guipúzcoa~Huelva~Huesca~Islas Baleares~Jaén~La Rioja~Las Palmas~León~Lleida~Lugo~Madrid~Málaga~Melilla~Murcia~Navarra~Ourense~Palencia~Pontevedra~Salamanca~Santa Cruz de Tenerife~Segovia~Sevilla~Soria~Tarragona~Teruel~Toledo~Valencia~Valladolid~Vizcaya~Zamora~Zaragoza\",\n    \"key\": \"ES\",\n    \"sub_isoids\": \"C~VI~AB~A~AL~O~AV~BA~B~BU~CC~CA~S~CS~CE~CR~CO~CU~GI~GR~GU~SS~H~HU~PM~J~LO~GC~LE~L~LU~M~MA~ML~MU~NA~OR~P~PO~SA~TF~SG~SE~SO~T~TE~TO~V~VA~BI~ZA~Z\",\n    \"posturl\": \"http://www.correos.es/contenido/13-MenuRec2/04-MenuRec24/1010_s-CodPostal.asp\",\n    \"fmt\": \"%N%n%O%n%A%n%Z %C %S\",\n    \"name\": \"SPAIN\"\n  },\n  {\n    \"zipex\": \"1000\",\n    \"name\": \"ETHIOPIA\",\n    \"zip\": \"\\\\d{4}\",\n    \"fmt\": \"%N%n%O%n%A%n%Z %C\",\n    \"key\": \"ET\",\n    \"id\": \"data/ET\"\n  },\n  {\n    \"postprefix\": \"FI-\",\n    \"zipex\": \"00550,00011\",\n    \"key\": \"FI\",\n    \"zip\": \"\\\\d{5}\",\n    \"fmt\": \"%O%n%N%n%A%nFI-%Z %C\",\n    \"id\": \"data/FI\",\n    \"posturl\": \"http://www.verkkoposti.com/e3/postinumeroluettelo\",\n    \"require\": \"ACZ\",\n    \"name\": \"FINLAND\"\n  },\n  {\n    \"id\": \"data/FJ\",\n    \"key\": \"FJ\",\n    \"name\": \"FIJI\"\n  },\n  {\n    \"upper\": \"CZ\",\n    \"zipex\": \"FIQQ 1ZZ\",\n    \"name\": \"FALKLAND ISLANDS (MALVINAS)\",\n    \"zip\": \"FIQQ 1ZZ\",\n    \"require\": \"ACZ\",\n    \"id\": \"data/FK\",\n    \"key\": \"FK\",\n    \"fmt\": \"%N%n%O%n%A%n%C%n%Z\"\n  },\n  {\n    \"upper\": \"ACNOS\",\n    \"zipex\": \"96941,96944\",\n    \"key\": \"FM\",\n    \"zip\": \"(9694[1-4])(?:[ \\\\-](\\\\d{4}))?\",\n    \"zip_name_type\": \"zip\",\n    \"require\": \"ACSZ\",\n    \"state_name_type\": \"state\",\n    \"id\": \"data/FM\",\n    \"posturl\": \"http://zip4.usps.com/zip4/welcome.jsp\",\n    \"fmt\": \"%N%n%O%n%A%n%C %S %Z\",\n    \"name\": \"MICRONESIA (Federated State of)\"\n  },\n  {\n    \"postprefix\": \"FO\",\n    \"zipex\": \"100\",\n    \"key\": \"FO\",\n    \"zip\": \"\\\\d{3}\",\n    \"fmt\": \"%N%n%O%n%A%nFO%Z %C\",\n    \"posturl\": \"http://www.postur.fo/\",\n    \"id\": \"data/FO\",\n    \"name\": \"FAROE ISLANDS\"\n  },\n  {\n    \"upper\": \"CX\",\n    \"zipex\": \"33380,34092,33506\",\n    \"key\": \"FR\",\n    \"zip\": \"\\\\d{2} ?\\\\d{3}\",\n    \"require\": \"ACZ\",\n    \"id\": \"data/FR\",\n    \"posturl\": \"http://www.laposte.fr/Particulier/Utiliser-nos-outils-pratiques/Outils-et-documents/Trouvez-un-code-postal\",\n    \"fmt\": \"%O%n%N%n%A%n%Z %C %X\",\n    \"name\": \"FRANCE\"\n  },\n  {\n    \"id\": \"data/GA\",\n    \"key\": \"GA\",\n    \"name\": \"GABON\"\n  },\n  {\n    \"upper\": \"CZ\",\n    \"zipex\": \"EC1Y 8SY,GIR 0AA,M2 5BQ,M34 4AB,CR0 2YR,DN16 9AA,W1A 4ZZ,EC1A 1HQ,OX14 4PG,BS18 8HF,NR25 7HG,RH6 0NP,BH23 6AA,B6 5BA,SO23 9AP,PO1 3AX,BFPO 61\",\n    \"key\": \"GB\",\n    \"zip\": \"GIR ?0AA|(?:(?:AB|AL|B|BA|BB|BD|BH|BL|BN|BR|BS|BT|BX|CA|CB|CF|CH|CM|CO|CR|CT|CV|CW|DA|DD|DE|DG|DH|DL|DN|DT|DY|E|EC|EH|EN|EX|FK|FY|G|GL|GY|GU|HA|HD|HG|HP|HR|HS|HU|HX|IG|IM|IP|IV|JE|KA|KT|KW|KY|L|LA|LD|LE|LL|LN|LS|LU|M|ME|MK|ML|N|NE|NG|NN|NP|NR|NW|OL|OX|PA|PE|PH|PL|PO|PR|RG|RH|RM|S|SA|SE|SG|SK|SL|SM|SN|SO|SP|SR|SS|ST|SW|SY|TA|TD|TF|TN|TQ|TR|TS|TW|UB|W|WA|WC|WD|WF|WN|WR|WS|WV|YO|ZE)(?:\\\\d[\\\\dA-Z]? ?\\\\d[ABD-HJLN-UW-Z]{2}))|BFPO ?\\\\d{1,4}\",\n    \"require\": \"ACZ\",\n    \"id\": \"data/GB\",\n    \"posturl\": \"http://www.royalmail.com/postcode-finder\",\n    \"locality_name_type\": \"post_town\",\n    \"fmt\": \"%N%n%O%n%A%n%C%n%Z\",\n    \"name\": \"UNITED KINGDOM\"\n  },\n  {\n    \"id\": \"data/GD\",\n    \"key\": \"GD\",\n    \"name\": \"GRENADA (WEST INDIES)\"\n  },\n  {\n    \"zipex\": \"0101\",\n    \"key\": \"GE\",\n    \"zip\": \"\\\\d{4}\",\n    \"fmt\": \"%N%n%O%n%A%n%Z %C\",\n    \"posturl\": \"http://www.georgianpost.ge/index.php?page=10\",\n    \"id\": \"data/GE\",\n    \"name\": \"GEORGIA\"\n  },\n  {\n    \"upper\": \"ACX\",\n    \"zipex\": \"97300\",\n    \"key\": \"GF\",\n    \"zip\": \"9[78]3\\\\d{2}\",\n    \"require\": \"ACZ\",\n    \"id\": \"data/GF\",\n    \"posturl\": \"http://www.laposte.fr/Particulier/Utiliser-nos-outils-pratiques/Outils-et-documents/Trouvez-un-code-postal\",\n    \"fmt\": \"%O%n%N%n%A%n%Z %C %X\",\n    \"name\": \"FRENCH GUIANA\"\n  },\n  {\n    \"upper\": \"CZ\",\n    \"zipex\": \"GY1 1AA,GY2 2BT\",\n    \"key\": \"GG\",\n    \"zip\": \"GY\\\\d[\\\\dA-Z]? ?\\\\d[ABD-HJLN-UW-Z]{2}\",\n    \"require\": \"ACZ\",\n    \"id\": \"data/GG\",\n    \"posturl\": \"http://www.guernseypost.com/postcode_finder/\",\n    \"fmt\": \"%N%n%O%n%A%n%C%nGUERNSEY%n%Z\",\n    \"name\": \"CHANNEL ISLANDS\"\n  },\n  {\n    \"id\": \"data/GH\",\n    \"key\": \"GH\",\n    \"name\": \"GHANA\"\n  },\n  {\n    \"zipex\": \"GX11 1AA\",\n    \"name\": \"GIBRALTAR\",\n    \"zip\": \"GX11 1AA\",\n    \"require\": \"A\",\n    \"id\": \"data/GI\",\n    \"key\": \"GI\",\n    \"fmt\": \"%N%n%O%n%A%nGIBRALTAR%n%Z\"\n  },\n  {\n    \"zipex\": \"3900,3950,3911\",\n    \"name\": \"GREENLAND\",\n    \"zip\": \"39\\\\d{2}\",\n    \"require\": \"ACZ\",\n    \"id\": \"data/GL\",\n    \"key\": \"GL\",\n    \"fmt\": \"%N%n%O%n%A%n%Z %C\"\n  },\n  {\n    \"id\": \"data/GM\",\n    \"key\": \"GM\",\n    \"name\": \"GAMBIA\"\n  },\n  {\n    \"zipex\": \"001,200,100\",\n    \"name\": \"GUINEA\",\n    \"zip\": \"\\\\d{3}\",\n    \"fmt\": \"%N%n%O%n%Z %A %C\",\n    \"key\": \"GN\",\n    \"id\": \"data/GN\"\n  },\n  {\n    \"upper\": \"ACX\",\n    \"zipex\": \"97100\",\n    \"key\": \"GP\",\n    \"zip\": \"9[78][01]\\\\d{2}\",\n    \"require\": \"ACZ\",\n    \"id\": \"data/GP\",\n    \"posturl\": \"http://www.laposte.fr/Particulier/Utiliser-nos-outils-pratiques/Outils-et-documents/Trouvez-un-code-postal\",\n    \"fmt\": \"%O%n%N%n%A%n%Z %C %X\",\n    \"name\": \"GUADELOUPE\"\n  },\n  {\n    \"id\": \"data/GQ\",\n    \"key\": \"GQ\",\n    \"name\": \"EQUATORIAL GUINEA\"\n  },\n  {\n    \"zipex\": \"151 24,151 10,101 88\",\n    \"key\": \"GR\",\n    \"zip\": \"\\\\d{3} ?\\\\d{2}\",\n    \"fmt\": \"%N%n%O%n%A%n%Z %C\",\n    \"id\": \"data/GR\",\n    \"posturl\": \"http://www.elta.gr/findapostcode.aspx\",\n    \"require\": \"ACZ\",\n    \"name\": \"GREECE\"\n  },\n  {\n    \"upper\": \"CZ\",\n    \"zipex\": \"SIQQ 1ZZ\",\n    \"name\": \"SOUTH GEORGIA\",\n    \"zip\": \"SIQQ 1ZZ\",\n    \"require\": \"ACZ\",\n    \"id\": \"data/GS\",\n    \"key\": \"GS\",\n    \"fmt\": \"%N%n%O%n%A%n%n%C%n%Z\"\n  },\n  {\n    \"zipex\": \"09001,01501\",\n    \"name\": \"GUATEMALA\",\n    \"zip\": \"\\\\d{5}\",\n    \"fmt\": \"%N%n%O%n%A%n%Z- %C\",\n    \"key\": \"GT\",\n    \"id\": \"data/GT\"\n  },\n  {\n    \"upper\": \"ACNOS\",\n    \"zipex\": \"96910,96931\",\n    \"key\": \"GU\",\n    \"zip\": \"(969(?:[12]\\\\d|3[12]))(?:[ \\\\-](\\\\d{4}))?\",\n    \"zip_name_type\": \"zip\",\n    \"require\": \"ACSZ\",\n    \"state_name_type\": \"state\",\n    \"id\": \"data/GU\",\n    \"posturl\": \"http://zip4.usps.com/zip4/welcome.jsp\",\n    \"fmt\": \"%N%n%O%n%A%n%C %S %Z\",\n    \"name\": \"GUAM\"\n  },\n  {\n    \"zipex\": \"1000,1011\",\n    \"name\": \"GUINEA-BISSAU\",\n    \"zip\": \"\\\\d{4}\",\n    \"fmt\": \"%N%n%O%n%A%n%Z %C\",\n    \"key\": \"GW\",\n    \"id\": \"data/GW\"\n  },\n  {\n    \"id\": \"data/GY\",\n    \"key\": \"GY\",\n    \"name\": \"GUYANA\"\n  },\n  {\n    \"lang\": \"zh-Hant\",\n    \"upper\": \"S\",\n    \"sub_lnames\": \"Kowloon~Hong Kong Island~New Territories\",\n    \"name\": \"HONG KONG\",\n    \"sub_mores\": \"true~true~true\",\n    \"require\": \"AS\",\n    \"state_name_type\": \"area\",\n    \"id\": \"data/HK\",\n    \"languages\": \"zh-Hant~en\",\n    \"lfmt\": \"%N%n%O%n%A%n%C%n%S\",\n    \"sub_keys\": \"九龍~香港島~新界\",\n    \"key\": \"HK\",\n    \"locality_name_type\": \"district\",\n    \"fmt\": \"%S%n%C%n%A%n%O%n%N\"\n  },\n  {\n    \"upper\": \"CS\",\n    \"zipex\": \"7050\",\n    \"name\": \"HEARD AND MCDONALD ISLANDS\",\n    \"zip\": \"\\\\d{4}\",\n    \"fmt\": \"%O%n%N%n%A%n%C %S %Z\",\n    \"key\": \"HM\",\n    \"id\": \"data/HM\"\n  },\n  {\n    \"zipex\": \"31301\",\n    \"name\": \"HONDURAS\",\n    \"zip\": \"\\\\d{5}\",\n    \"require\": \"ACS\",\n    \"id\": \"data/HN\",\n    \"key\": \"HN\",\n    \"fmt\": \"%N%n%O%n%A%n%C, %S%n%Z\"\n  },\n  {\n    \"postprefix\": \"HR-\",\n    \"zipex\": \"10000,21001,10002\",\n    \"key\": \"HR\",\n    \"zip\": \"\\\\d{5}\",\n    \"fmt\": \"%N%n%O%n%A%nHR-%Z %C\",\n    \"posturl\": \"http://www.posta.hr/default.aspx?pretpum\",\n    \"id\": \"data/HR\",\n    \"name\": \"CROATIA\"\n  },\n  {\n    \"postprefix\": \"HT\",\n    \"zipex\": \"6120,5310,6110,8510\",\n    \"name\": \"HAITI\",\n    \"zip\": \"\\\\d{4}\",\n    \"fmt\": \"%N%n%O%n%A%nHT%Z %C\",\n    \"key\": \"HT\",\n    \"id\": \"data/HT\"\n  },\n  {\n    \"upper\": \"ACNO\",\n    \"zipex\": \"1037,2380,1540\",\n    \"key\": \"HU\",\n    \"zip\": \"\\\\d{4}\",\n    \"require\": \"ACZ\",\n    \"id\": \"data/HU\",\n    \"posturl\": \"http://posta.hu/ugyfelszolgalat/iranyitoszam_kereso\",\n    \"fmt\": \"%N%n%O%n%C%n%A%n%Z\",\n    \"name\": \"HUNGARY (Rep.)\"\n  },\n  {\n    \"lang\": \"id\",\n    \"zipex\": \"40115\",\n    \"name\": \"INDONESIA\",\n    \"zip\": \"\\\\d{5}\",\n    \"require\": \"AS\",\n    \"id\": \"data/ID\",\n    \"languages\": \"id\",\n    \"sub_keys\": \"Aceh~Bali~Banten~Bengkulu~Daerah Istimewa Yogyakarta~DKI Jakarta~Gorontalo~Jambi~Jawa Barat~Jawa Tengah~Jawa Timur~Kalimantan Barat~Kalimantan Selatan~Kalimantan Tengah~Kalimantan Timur~Kalimantan Utara~Kepulauan Bangka Belitung~Kepulauan Riau~Lampung~Maluku~Maluku Utara~Nusa Tenggara Barat~Nusa Tenggara Timur~Papua~Papua Barat~Riau~Sulawesi Barat~Sulawesi Selatan~Sulawesi Tengah~Sulawesi Tenggara~Sulawesi Utara~Sumatera Barat~Sumatera Selatan~Sumatera Utara\",\n    \"key\": \"ID\",\n    \"sub_isoids\": \"AC~BA~BT~BE~YO~JK~GO~JA~JB~JT~JI~KB~KS~KT~KI~KU~BB~KR~LA~MA~MU~NB~NT~PA~PB~RI~SR~SN~ST~SG~SA~SB~SS~SU\",\n    \"fmt\": \"%N%n%O%n%A%n%C%n%S %Z\"\n  },\n  {\n    \"lang\": \"en\",\n    \"sublocality_name_type\": \"townland\",\n    \"zipex\": \"A65 F4E2\",\n    \"posturl\": \"https://finder.eircode.ie\",\n    \"zip\": \"[\\\\dA-Z]{3} ?[\\\\dA-Z]{4}\",\n    \"zip_name_type\": \"eircode\",\n    \"fmt\": \"%N%n%O%n%A%n%D%n%C%n%S %Z\",\n    \"state_name_type\": \"county\",\n    \"languages\": \"en\",\n    \"sub_keys\": \"Co. Carlow~Co. Cavan~Co. Clare~Co. Cork~Co. Donegal~Co. Dublin~Co. Galway~Co. Kerry~Co. Kildare~Co. Kilkenny~Co. Laois~Co. Leitrim~Co. Limerick~Co. Longford~Co. Louth~Co. Mayo~Co. Meath~Co. Monaghan~Co. Offaly~Co. Roscommon~Co. Sligo~Co. Tipperary~Co. Waterford~Co. Westmeath~Co. Wexford~Co. Wicklow\",\n    \"key\": \"IE\",\n    \"sub_isoids\": \"CW~CN~CE~C~DL~D~G~KY~KE~KK~LS~LM~LK~LD~LH~MO~MH~MN~OY~RN~SO~TA~WD~WH~WX~WW\",\n    \"id\": \"data/IE\",\n    \"name\": \"IRELAND\"\n  },\n  {\n    \"zipex\": \"9614303\",\n    \"key\": \"IL\",\n    \"zip\": \"\\\\d{5}(?:\\\\d{2})?\",\n    \"fmt\": \"%N%n%O%n%A%n%C %Z\",\n    \"posturl\": \"http://www.israelpost.co.il/zipcode.nsf/demozip?openform\",\n    \"id\": \"data/IL\",\n    \"name\": \"ISRAEL\"\n  },\n  {\n    \"upper\": \"CZ\",\n    \"zipex\": \"IM2 1AA,IM99 1PS\",\n    \"key\": \"IM\",\n    \"zip\": \"IM\\\\d[\\\\dA-Z]? ?\\\\d[ABD-HJLN-UW-Z]{2}\",\n    \"require\": \"ACZ\",\n    \"id\": \"data/IM\",\n    \"posturl\": \"http://www.gov.im/post/postal/fr_main.asp\",\n    \"fmt\": \"%N%n%O%n%A%n%C%n%Z\",\n    \"name\": \"ISLE OF MAN\"\n  },\n  {\n    \"lang\": \"en\",\n    \"zipex\": \"110034,110001\",\n    \"sub_zips\": \"744~5[0-3]~79[0-2]~78~8[0-5]~16|1440[3-9]~49~396~396~11~403~3[6-9]~1[23]~17~1[89]~81[4-9]|82|83[0-5]~5[4-9]|53[7-9]~6[7-9]|6010|607008|777~673~4[5-8]|490~4[0-4]~79[56]~79[34]~796~79[78]~7[5-7]~605~1[456]~3[0-4]~737|750~6[0-6]|536~5[0-3]~799~2[0-35-8]|24[0-7]|26[12]~24[46-9]|254|26[23]~7[0-4]\",\n    \"zip\": \"\\\\d{6}\",\n    \"zip_name_type\": \"pin\",\n    \"require\": \"ACSZ\",\n    \"state_name_type\": \"state\",\n    \"id\": \"data/IN\",\n    \"languages\": \"en\",\n    \"sub_keys\": \"Andaman and Nicobar Islands~Andhra Pradesh~Arunachal Pradesh~Assam~Bihar~Chandigarh~Chhattisgarh~Dadra and Nagar Haveli~Daman and Diu~Delhi~Goa~Gujarat~Haryana~Himachal Pradesh~Jammu and Kashmir~Jharkhand~Karnataka~Kerala~Lakshadweep~Madhya Pradesh~Maharashtra~Manipur~Meghalaya~Mizoram~Nagaland~Odisha~Puducherry~Punjab~Rajasthan~Sikkim~Tamil Nadu~Telangana~Tripura~Uttar Pradesh~Uttarakhand~West Bengal\",\n    \"key\": \"IN\",\n    \"sub_isoids\": \"AN~AP~AR~AS~BR~CH~CT~DN~DD~DL~GA~GJ~HR~HP~JK~JH~KA~KL~LD~MP~MH~MN~ML~MZ~NL~OR~PY~PB~RJ~SK~TN~TG~TR~UP~UT~WB\",\n    \"posturl\": \"http://cept.gov.in/lbpsd/placesearch.aspx\",\n    \"fmt\": \"%N%n%O%n%A%n%C %Z%n%S\",\n    \"sub_names\": \"Andaman & Nicobar~Andhra Pradesh~Arunachal Pradesh~Assam~Bihar~Chandigarh~Chhattisgarh~Dadra & Nagar Haveli~Daman & Diu~Delhi~Goa~Gujarat~Haryana~Himachal Pradesh~Jammu & Kashmir~Jharkhand~Karnataka~Kerala~Lakshadweep~Madhya Pradesh~Maharashtra~Manipur~Meghalaya~Mizoram~Nagaland~Odisha~Puducherry~Punjab~Rajasthan~Sikkim~Tamil Nadu~Telangana~Tripura~Uttar Pradesh~Uttarakhand~West Bengal\",\n    \"name\": \"INDIA\"\n  },\n  {\n    \"upper\": \"CZ\",\n    \"zipex\": \"BBND 1ZZ\",\n    \"name\": \"BRITISH INDIAN OCEAN TERRITORY\",\n    \"zip\": \"BBND 1ZZ\",\n    \"require\": \"ACZ\",\n    \"id\": \"data/IO\",\n    \"key\": \"IO\",\n    \"fmt\": \"%N%n%O%n%A%n%C%n%Z\"\n  },\n  {\n    \"upper\": \"CS\",\n    \"zipex\": \"31001\",\n    \"name\": \"IRAQ\",\n    \"zip\": \"\\\\d{5}\",\n    \"require\": \"ACS\",\n    \"id\": \"data/IQ\",\n    \"key\": \"IQ\",\n    \"fmt\": \"%O%n%N%n%A%n%C, %S%n%Z\"\n  },\n  {\n    \"sublocality_name_type\": \"neighborhood\",\n    \"zipex\": \"11936-12345\",\n    \"name\": \"IRAN\",\n    \"zip\": \"\\\\d{5}-?\\\\d{5}\",\n    \"fmt\": \"%O%n%N%n%S%n%C, %D%n%A%n%Z\",\n    \"key\": \"IR\",\n    \"id\": \"data/IR\"\n  },\n  {\n    \"zipex\": \"320,121,220,110\",\n    \"key\": \"IS\",\n    \"zip\": \"\\\\d{3}\",\n    \"fmt\": \"%N%n%O%n%A%n%Z %C\",\n    \"posturl\": \"https://www.postur.is/um-postinn/posthus/gotuskra/\",\n    \"id\": \"data/IS\",\n    \"name\": \"ICELAND\"\n  },\n  {\n    \"lang\": \"it\",\n    \"upper\": \"CS\",\n    \"zipex\": \"00144,47037,39049\",\n    \"sub_zips\": \"92~15~60~11~52~63~14~83~70~76[01]~32~82~24~13[89]~40~39~25~72~0912[1-9]|0913[0-4]|0901[0289]|0902[03468]|0903[0234]|0904|0803[035]|08043~93~860[1-4]|86100~0901[013-7]~81~95~88[01]~66~22~87~26[01]~88[89]~12|18025~94~638|63900~44~50~71~47[015]~03~16~34[01]7~58~18~860[7-9]|86170~67~19~04~73~23[89]~57~26[89]~55~62~46~54~75~0902[012579]|0903[015-9]|09040~98~20~41~208|20900~80~28[01]~080[1-3]|08100~08037|0804[024-9]~08020|0702|0703[08]~090[7-9]|09170|0801[039]|0803[04]~35~90~43~27~06~61~65~29~56~51~330[7-9]|33170~85~59~97~48~89[01]~42~02~47[89]~00~45~84~070[14]|0703[0-79]|07100~17|12071~53~96~23[01]~74~64~05~10~91~38~31~3401|341[0-689]|34062~330[1-5]|33100~21~30~28[89]~13[01]~37~89[89]~36~01\",\n    \"zip\": \"\\\\d{5}\",\n    \"require\": \"ACSZ\",\n    \"id\": \"data/IT\",\n    \"languages\": \"it\",\n    \"sub_keys\": \"AG~AL~AN~AO~AR~AP~AT~AV~BA~BT~BL~BN~BG~BI~BO~BZ~BS~BR~CA~CL~CB~CI~CE~CT~CZ~CH~CO~CS~CR~KR~CN~EN~FM~FE~FI~FG~FC~FR~GE~GO~GR~IM~IS~AQ~SP~LT~LE~LC~LI~LO~LU~MC~MN~MS~MT~VS~ME~MI~MO~MB~NA~NO~NU~OG~OT~OR~PD~PA~PR~PV~PG~PU~PE~PC~PI~PT~PN~PZ~PO~RG~RA~RC~RE~RI~RN~RM~RO~SA~SS~SV~SI~SR~SO~TA~TE~TR~TO~TP~TN~TV~TS~UD~VA~VE~VB~VC~VR~VV~VI~VT\",\n    \"key\": \"IT\",\n    \"posturl\": \"http://www.poste.it/online/cercacap/\",\n    \"fmt\": \"%N%n%O%n%A%n%Z %C %S\",\n    \"sub_names\": \"Agrigento~Alessandria~Ancona~Aosta~Arezzo~Ascoli Piceno~Asti~Avellino~Bari~Barletta-Andria-Trani~Belluno~Benevento~Bergamo~Biella~Bologna~Bolzano~Brescia~Brindisi~Cagliari~Caltanissetta~Campobasso~Carbonia-Iglesias~Caserta~Catania~Catanzaro~Chieti~Como~Cosenza~Cremona~Crotone~Cuneo~Enna~Fermo~Ferrara~Firenze~Foggia~Forlì-Cesena~Frosinone~Genova~Gorizia~Grosseto~Imperia~Isernia~L'Aquila~La Spezia~Latina~Lecce~Lecco~Livorno~Lodi~Lucca~Macerata~Mantova~Massa-Carrara~Matera~Medio Campidano~Messina~Milano~Modena~Monza e Brianza~Napoli~Novara~Nuoro~Ogliastra~Olbia-Tempio~Oristano~Padova~Palermo~Parma~Pavia~Perugia~Pesaro e Urbino~Pescara~Piacenza~Pisa~Pistoia~Pordenone~Potenza~Prato~Ragusa~Ravenna~Reggio Calabria~Reggio Emilia~Rieti~Rimini~Roma~Rovigo~Salerno~Sassari~Savona~Siena~Siracusa~Sondrio~Taranto~Teramo~Terni~Torino~Trapani~Trento~Treviso~Trieste~Udine~Varese~Venezia~Verbano-Cusio-Ossola~Vercelli~Verona~Vibo Valentia~Vicenza~Viterbo\",\n    \"name\": \"ITALY\"\n  },\n  {\n    \"upper\": \"CZ\",\n    \"zipex\": \"JE1 1AA,JE2 2BT\",\n    \"key\": \"JE\",\n    \"zip\": \"JE\\\\d[\\\\dA-Z]? ?\\\\d[ABD-HJLN-UW-Z]{2}\",\n    \"require\": \"ACZ\",\n    \"id\": \"data/JE\",\n    \"posturl\": \"http://www.jerseypost.com/tools/postcode-address-finder/\",\n    \"fmt\": \"%N%n%O%n%A%n%C%nJERSEY%n%Z\",\n    \"name\": \"CHANNEL ISLANDS\"\n  },\n  {\n    \"lang\": \"en\",\n    \"name\": \"JAMAICA\",\n    \"require\": \"ACS\",\n    \"state_name_type\": \"parish\",\n    \"id\": \"data/JM\",\n    \"languages\": \"en\",\n    \"sub_keys\": \"Clarendon~Hanover~Kingston~Manchester~Portland~St. Andrew~St. Ann~St. Catherine~St. Elizabeth~St. James~St. Mary~St. Thomas~Trelawny~Westmoreland\",\n    \"key\": \"JM\",\n    \"sub_isoids\": \"13~09~01~12~04~02~06~14~11~08~05~03~07~10\",\n    \"fmt\": \"%N%n%O%n%A%n%C%n%S %X\"\n  },\n  {\n    \"zipex\": \"11937,11190\",\n    \"name\": \"JORDAN\",\n    \"zip\": \"\\\\d{5}\",\n    \"fmt\": \"%N%n%O%n%A%n%C %Z\",\n    \"key\": \"JO\",\n    \"id\": \"data/JO\"\n  },\n  {\n    \"lang\": \"ja\",\n    \"upper\": \"S\",\n    \"zipex\": \"154-0023,350-1106,951-8073,112-0001,208-0032,231-0012\",\n    \"sub_zips\": \"0[4-9]|00[1-7]~03|018~02~98~01~99~9[67]~3[01]~32|311|349~37|38[49]~3[3-6]~2[6-9]~1[0-8]|19[0-8]|20~2[1-5]|199~9[45]|389~93~92|939~91|922~40~3[89]|949~50~4[1-9]~4[4-9]|431~51|498|647~52~6[0-2]|520~5[3-9]|618|630~6[5-7]|563~63|64[78]~64|519~68~69|68[45]~7[01]~7[23]~7[45]~77~76~79~78~8[0-3]|871~84~85|81[17]|848~86~87|839~88~89~90\",\n    \"zip\": \"\\\\d{3}-?\\\\d{4}\",\n    \"require\": \"ACSZ\",\n    \"state_name_type\": \"prefecture\",\n    \"id\": \"data/JP\",\n    \"languages\": \"ja\",\n    \"lfmt\": \"%N%n%O%n%A%n%C, %S%n%Z\",\n    \"sub_lnames\": \"Hokkaido~Aomori~Iwate~Miyagi~Akita~Yamagata~Fukushima~Ibaraki~Tochigi~Gunma~Saitama~Chiba~Tokyo~Kanagawa~Niigata~Toyama~Ishikawa~Fukui~Yamanashi~Nagano~Gifu~Shizuoka~Aichi~Mie~Shiga~Kyoto~Osaka~Hyogo~Nara~Wakayama~Tottori~Shimane~Okayama~Hiroshima~Yamaguchi~Tokushima~Kagawa~Ehime~Kochi~Fukuoka~Saga~Nagasaki~Kumamoto~Oita~Miyazaki~Kagoshima~Okinawa\",\n    \"sub_keys\": \"北海道~青森県~岩手県~宮城県~秋田県~山形県~福島県~茨城県~栃木県~群馬県~埼玉県~千葉県~東京都~神奈川県~新潟県~富山県~石川県~福井県~山梨県~長野県~岐阜県~静岡県~愛知県~三重県~滋賀県~京都府~大阪府~兵庫県~奈良県~和歌山県~鳥取県~島根県~岡山県~広島県~山口県~徳島県~香川県~愛媛県~高知県~福岡県~佐賀県~長崎県~熊本県~大分県~宮崎県~鹿児島県~沖縄県\",\n    \"key\": \"JP\",\n    \"sub_isoids\": \"01~02~03~04~05~06~07~08~09~10~11~12~13~14~15~16~17~18~19~20~21~22~23~24~25~26~27~28~29~30~31~32~33~34~35~36~37~38~39~40~41~42~43~44~45~46~47\",\n    \"posturl\": \"http://search.post.japanpost.jp/zipcode/\",\n    \"fmt\": \"〒%Z%n%S%C%n%A%n%O%n%N\",\n    \"name\": \"JAPAN\"\n  },\n  {\n    \"zipex\": \"20100,00100\",\n    \"name\": \"KENYA\",\n    \"zip\": \"\\\\d{5}\",\n    \"fmt\": \"%N%n%O%n%A%n%C%n%Z\",\n    \"key\": \"KE\",\n    \"id\": \"data/KE\"\n  },\n  {\n    \"zipex\": \"720001\",\n    \"name\": \"KYRGYZSTAN\",\n    \"zip\": \"\\\\d{6}\",\n    \"fmt\": \"%N%n%O%n%A%n%Z %C\",\n    \"key\": \"KG\",\n    \"id\": \"data/KG\"\n  },\n  {\n    \"zipex\": \"12203,14206,12000\",\n    \"name\": \"CAMBODIA\",\n    \"zip\": \"\\\\d{5}\",\n    \"fmt\": \"%N%n%O%n%A%n%C %Z\",\n    \"key\": \"KH\",\n    \"id\": \"data/KH\"\n  },\n  {\n    \"upper\": \"ACNOS\",\n    \"name\": \"KIRIBATI\",\n    \"fmt\": \"%N%n%O%n%A%n%S%n%C\",\n    \"state_name_type\": \"island\",\n    \"key\": \"KI\",\n    \"id\": \"data/KI\"\n  },\n  {\n    \"upper\": \"AC\",\n    \"id\": \"data/KM\",\n    \"key\": \"KM\",\n    \"name\": \"COMOROS\"\n  },\n  {\n    \"lang\": \"en\",\n    \"name\": \"SAINT KITTS AND NEVIS\",\n    \"require\": \"ACS\",\n    \"state_name_type\": \"island\",\n    \"id\": \"data/KN\",\n    \"languages\": \"en\",\n    \"sub_keys\": \"Nevis~St. Kitts\",\n    \"key\": \"KN\",\n    \"sub_isoids\": \"N~K\",\n    \"fmt\": \"%N%n%O%n%A%n%C, %S\"\n  },\n  {\n    \"lang\": \"ko\",\n    \"sublocality_name_type\": \"district\",\n    \"sub_zipexs\": \"25627~12410~53286~38540~62394~42456~34316~46706~06321~30065~44782~23024~59222~56445~63563~32832~28006\",\n    \"zipex\": \"03051\",\n    \"sub_zips\": \"2[456]\\\\d{2}~1[0-8]\\\\d{2}~5[0-3]\\\\d{2}~(?:3[6-9]|40)\\\\d{2}~6[12]\\\\d{2}~4[12]\\\\d{2}~3[45]\\\\d{2}~4[6-9]\\\\d{2}~0[1-8]\\\\d{2}~30[01]\\\\d~4[45]\\\\d{2}~2[1-3]\\\\d{2}~5[7-9]\\\\d{2}~5[4-6]\\\\d{2}~63[0-356]\\\\d~3[1-3]\\\\d{2}~2[789]\\\\d{2}\",\n    \"zip\": \"\\\\d{5}\",\n    \"upper\": \"Z\",\n    \"sub_mores\": \"true~true~true~true~true~true~true~true~true~true~true~true~true~true~true~true~true\",\n    \"require\": \"ACSZ\",\n    \"state_name_type\": \"do_si\",\n    \"id\": \"data/KR\",\n    \"languages\": \"ko\",\n    \"lfmt\": \"%N%n%O%n%A%n%D%n%C%n%S%n%Z\",\n    \"sub_lnames\": \"Gangwon-do~Gyeonggi-do~Gyeongsangnam-do~Gyeongsangbuk-do~Gwangju~Daegu~Daejeon~Busan~Seoul~Sejong~Ulsan~Incheon~Jeollanam-do~Jeollabuk-do~Jeju-do~Chungcheongnam-do~Chungcheongbuk-do\",\n    \"sub_keys\": \"강원도~경기도~경상남도~경상북도~광주광역시~대구광역시~대전광역시~부산광역시~서울특별시~세종특별자치시~울산광역시~인천광역시~전라남도~전라북도~제주특별자치도~충청남도~충청북도\",\n    \"key\": \"KR\",\n    \"sub_isoids\": \"42~41~48~47~29~27~30~26~11~50~31~28~46~45~49~44~43\",\n    \"posturl\": \"http://www.epost.go.kr/search/zipcode/search5.jsp\",\n    \"fmt\": \"%S %C%D%n%A%n%O%n%N%n%Z\",\n    \"sub_names\": \"강원~경기~경남~경북~광주~대구~대전~부산~서울~세종~울산~인천~전남~전북~제주~충남~충북\",\n    \"name\": \"SOUTH KOREA\"\n  },\n  {\n    \"zipex\": \"54541,54551,54404,13009\",\n    \"name\": \"KUWAIT\",\n    \"zip\": \"\\\\d{5}\",\n    \"fmt\": \"%N%n%O%n%A%n%Z %C\",\n    \"key\": \"KW\",\n    \"id\": \"data/KW\"\n  },\n  {\n    \"lang\": \"en\",\n    \"zipex\": \"KY1-1100,KY1-1702,KY2-2101\",\n    \"posturl\": \"http://www.caymanpost.gov.ky/\",\n    \"zip\": \"KY\\\\d-\\\\d{4}\",\n    \"require\": \"AS\",\n    \"state_name_type\": \"island\",\n    \"id\": \"data/KY\",\n    \"languages\": \"en\",\n    \"sub_keys\": \"Cayman Brac~Grand Cayman~Little Cayman\",\n    \"key\": \"KY\",\n    \"fmt\": \"%N%n%O%n%A%n%S %Z\",\n    \"name\": \"CAYMAN ISLANDS\"\n  },\n  {\n    \"zipex\": \"040900,050012\",\n    \"name\": \"KAZAKHSTAN\",\n    \"zip\": \"\\\\d{6}\",\n    \"fmt\": \"%Z%n%S%n%C%n%A%n%O%n%N\",\n    \"key\": \"KZ\",\n    \"id\": \"data/KZ\"\n  },\n  {\n    \"zipex\": \"01160,01000\",\n    \"name\": \"LAO (PEOPLE'S DEM. REP.)\",\n    \"zip\": \"\\\\d{5}\",\n    \"fmt\": \"%N%n%O%n%A%n%Z %C\",\n    \"key\": \"LA\",\n    \"id\": \"data/LA\"\n  },\n  {\n    \"zipex\": \"2038 3054,1107 2810,1000\",\n    \"name\": \"LEBANON\",\n    \"zip\": \"(?:\\\\d{4})(?: ?(?:\\\\d{4}))?\",\n    \"fmt\": \"%N%n%O%n%A%n%C %Z\",\n    \"key\": \"LB\",\n    \"id\": \"data/LB\"\n  },\n  {\n    \"id\": \"data/LC\",\n    \"key\": \"LC\",\n    \"name\": \"SAINT LUCIA\"\n  },\n  {\n    \"postprefix\": \"FL-\",\n    \"zipex\": \"9496,9491,9490,9485\",\n    \"key\": \"LI\",\n    \"zip\": \"948[5-9]|949[0-7]\",\n    \"fmt\": \"%O%n%N%n%A%nFL-%Z %C\",\n    \"id\": \"data/LI\",\n    \"posturl\": \"http://www.post.ch/db/owa/pv_plz_pack/pr_main\",\n    \"require\": \"ACZ\",\n    \"name\": \"LIECHTENSTEIN\"\n  },\n  {\n    \"zipex\": \"20000,00100\",\n    \"key\": \"LK\",\n    \"zip\": \"\\\\d{5}\",\n    \"fmt\": \"%N%n%O%n%A%n%C%n%Z\",\n    \"posturl\": \"http://www.slpost.gov.lk/\",\n    \"id\": \"data/LK\",\n    \"name\": \"SRI LANKA\"\n  },\n  {\n    \"zipex\": \"1000\",\n    \"name\": \"LIBERIA\",\n    \"zip\": \"\\\\d{4}\",\n    \"fmt\": \"%N%n%O%n%A%n%Z %C\",\n    \"key\": \"LR\",\n    \"id\": \"data/LR\"\n  },\n  {\n    \"zipex\": \"100\",\n    \"name\": \"LESOTHO\",\n    \"zip\": \"\\\\d{3}\",\n    \"fmt\": \"%N%n%O%n%A%n%C %Z\",\n    \"key\": \"LS\",\n    \"id\": \"data/LS\"\n  },\n  {\n    \"postprefix\": \"LT-\",\n    \"zipex\": \"04340,03500\",\n    \"key\": \"LT\",\n    \"zip\": \"\\\\d{5}\",\n    \"fmt\": \"%O%n%N%n%A%nLT-%Z %C\",\n    \"posturl\": \"http://www.post.lt/lt/?id=316\",\n    \"id\": \"data/LT\",\n    \"name\": \"LITHUANIA\"\n  },\n  {\n    \"postprefix\": \"L-\",\n    \"zipex\": \"4750,2998\",\n    \"key\": \"LU\",\n    \"zip\": \"\\\\d{4}\",\n    \"fmt\": \"%O%n%N%n%A%nL-%Z %C\",\n    \"id\": \"data/LU\",\n    \"posturl\": \"https://www.post.lu/fr/grandes-entreprises/solutions-postales/rechercher-un-code-postal\",\n    \"require\": \"ACZ\",\n    \"name\": \"LUXEMBOURG\"\n  },\n  {\n    \"zipex\": \"LV-1073,LV-1000\",\n    \"key\": \"LV\",\n    \"zip\": \"LV-\\\\d{4}\",\n    \"fmt\": \"%N%n%O%n%A%n%C, %Z\",\n    \"posturl\": \"http://www.pasts.lv/lv/uzzinas/nodalas/\",\n    \"id\": \"data/LV\",\n    \"name\": \"LATVIA\"\n  },\n  {\n    \"id\": \"data/LY\",\n    \"key\": \"LY\",\n    \"name\": \"LIBYA\"\n  },\n  {\n    \"zipex\": \"53000,10000,20050,16052\",\n    \"name\": \"MOROCCO\",\n    \"zip\": \"\\\\d{5}\",\n    \"fmt\": \"%N%n%O%n%A%n%Z %C\",\n    \"key\": \"MA\",\n    \"id\": \"data/MA\"\n  },\n  {\n    \"postprefix\": \"MC-\",\n    \"zipex\": \"98000,98020,98011,98001\",\n    \"name\": \"MONACO\",\n    \"zip\": \"980\\\\d{2}\",\n    \"fmt\": \"%N%n%O%n%A%nMC-%Z %C %X\",\n    \"key\": \"MC\",\n    \"id\": \"data/MC\"\n  },\n  {\n    \"postprefix\": \"MD-\",\n    \"zipex\": \"2012,2019\",\n    \"name\": \"Rep. MOLDOVA\",\n    \"zip\": \"\\\\d{4}\",\n    \"fmt\": \"%N%n%O%n%A%nMD-%Z %C\",\n    \"key\": \"MD\",\n    \"id\": \"data/MD\"\n  },\n  {\n    \"zipex\": \"81257,81258,81217,84314,85366\",\n    \"name\": \"MONTENEGRO\",\n    \"zip\": \"8\\\\d{4}\",\n    \"fmt\": \"%N%n%O%n%A%n%Z %C\",\n    \"key\": \"ME\",\n    \"id\": \"data/ME\"\n  },\n  {\n    \"upper\": \"ACX\",\n    \"zipex\": \"97100\",\n    \"key\": \"MF\",\n    \"zip\": \"9[78][01]\\\\d{2}\",\n    \"require\": \"ACZ\",\n    \"id\": \"data/MF\",\n    \"posturl\": \"http://www.laposte.fr/Particulier/Utiliser-nos-outils-pratiques/Outils-et-documents/Trouvez-un-code-postal\",\n    \"fmt\": \"%O%n%N%n%A%n%Z %C %X\",\n    \"name\": \"SAINT MARTIN\"\n  },\n  {\n    \"zipex\": \"501,101\",\n    \"name\": \"MADAGASCAR\",\n    \"zip\": \"\\\\d{3}\",\n    \"fmt\": \"%N%n%O%n%A%n%Z %C\",\n    \"key\": \"MG\",\n    \"id\": \"data/MG\"\n  },\n  {\n    \"upper\": \"ACNOS\",\n    \"zipex\": \"96960,96970\",\n    \"key\": \"MH\",\n    \"zip\": \"(969[67]\\\\d)(?:[ \\\\-](\\\\d{4}))?\",\n    \"zip_name_type\": \"zip\",\n    \"require\": \"ACSZ\",\n    \"state_name_type\": \"state\",\n    \"id\": \"data/MH\",\n    \"posturl\": \"http://zip4.usps.com/zip4/welcome.jsp\",\n    \"fmt\": \"%N%n%O%n%A%n%C %S %Z\",\n    \"name\": \"MARSHALL ISLANDS\"\n  },\n  {\n    \"zipex\": \"1314,1321,1443,1062\",\n    \"name\": \"MACEDONIA\",\n    \"zip\": \"\\\\d{4}\",\n    \"fmt\": \"%N%n%O%n%A%n%Z %C\",\n    \"key\": \"MK\",\n    \"id\": \"data/MK\"\n  },\n  {\n    \"id\": \"data/ML\",\n    \"key\": \"ML\",\n    \"name\": \"MALI\"\n  },\n  {\n    \"zipex\": \"11181\",\n    \"name\": \"MYANMAR\",\n    \"zip\": \"\\\\d{5}\",\n    \"fmt\": \"%N%n%O%n%A%n%C, %Z\",\n    \"key\": \"MM\",\n    \"id\": \"data/MM\"\n  },\n  {\n    \"zipex\": \"65030,65270\",\n    \"key\": \"MN\",\n    \"zip\": \"\\\\d{5}\",\n    \"fmt\": \"%N%n%O%n%A%n%C%n%S %Z\",\n    \"posturl\": \"http://www.zipcode.mn/\",\n    \"id\": \"data/MN\",\n    \"name\": \"MONGOLIA\"\n  },\n  {\n    \"name\": \"MACAO\",\n    \"require\": \"A\",\n    \"id\": \"data/MO\",\n    \"lfmt\": \"%N%n%O%n%A\",\n    \"key\": \"MO\",\n    \"fmt\": \"%A%n%O%n%N\"\n  },\n  {\n    \"upper\": \"ACNOS\",\n    \"zipex\": \"96950,96951,96952\",\n    \"key\": \"MP\",\n    \"zip\": \"(9695[012])(?:[ \\\\-](\\\\d{4}))?\",\n    \"zip_name_type\": \"zip\",\n    \"require\": \"ACSZ\",\n    \"state_name_type\": \"state\",\n    \"id\": \"data/MP\",\n    \"posturl\": \"http://zip4.usps.com/zip4/welcome.jsp\",\n    \"fmt\": \"%N%n%O%n%A%n%C %S %Z\",\n    \"name\": \"NORTHERN MARIANA ISLANDS\"\n  },\n  {\n    \"upper\": \"ACX\",\n    \"zipex\": \"97220\",\n    \"key\": \"MQ\",\n    \"zip\": \"9[78]2\\\\d{2}\",\n    \"require\": \"ACZ\",\n    \"id\": \"data/MQ\",\n    \"posturl\": \"http://www.laposte.fr/Particulier/Utiliser-nos-outils-pratiques/Outils-et-documents/Trouvez-un-code-postal\",\n    \"fmt\": \"%O%n%N%n%A%n%Z %C %X\",\n    \"name\": \"MARTINIQUE\"\n  },\n  {\n    \"upper\": \"AC\",\n    \"id\": \"data/MR\",\n    \"key\": \"MR\",\n    \"name\": \"MAURITANIA\"\n  },\n  {\n    \"id\": \"data/MS\",\n    \"key\": \"MS\",\n    \"name\": \"MONTSERRAT\"\n  },\n  {\n    \"upper\": \"CZ\",\n    \"zipex\": \"NXR 01,ZTN 05,GPO 01,BZN 1130,SPB 6031,VCT 1753\",\n    \"key\": \"MT\",\n    \"zip\": \"[A-Z]{3} ?\\\\d{2,4}\",\n    \"fmt\": \"%N%n%O%n%A%n%C %Z\",\n    \"posturl\": \"http://postcodes.maltapost.com/\",\n    \"id\": \"data/MT\",\n    \"name\": \"MALTA\"\n  },\n  {\n    \"upper\": \"CZ\",\n    \"zipex\": \"42602\",\n    \"name\": \"MAURITIUS\",\n    \"zip\": \"\\\\d{3}(?:\\\\d{2}|[A-Z]{2}\\\\d{3})\",\n    \"fmt\": \"%N%n%O%n%A%n%Z%n%C\",\n    \"key\": \"MU\",\n    \"id\": \"data/MU\"\n  },\n  {\n    \"zipex\": \"20026\",\n    \"key\": \"MV\",\n    \"zip\": \"\\\\d{5}\",\n    \"fmt\": \"%N%n%O%n%A%n%C %Z\",\n    \"posturl\": \"http://www.maldivespost.com/?lid=10\",\n    \"id\": \"data/MV\",\n    \"name\": \"MALDIVES\"\n  },\n  {\n    \"fmt\": \"%N%n%O%n%A%n%C %X\",\n    \"id\": \"data/MW\",\n    \"key\": \"MW\",\n    \"name\": \"MALAWI\"\n  },\n  {\n    \"lang\": \"es\",\n    \"sublocality_name_type\": \"neighborhood\",\n    \"sub_zipexs\": \"20000,20999~21000,22999~23000,23999~24000,24999~29000,30999~31000,33999~00000,16999~25000,27999~28000,28999~34000,35999~50000,57999~36000,38999~39000,41999~42000,43999~44000,49999~58000,61999~62000,62999~63000,63999~64000,67999~68000,71999~72000,75999~76000,76999~77000,77999~78000,79999~80000,82999~83000,85999~86000,86999~87000,89999~90000,90999~91000,96999~97000,97999~98000,99999\",\n    \"zipex\": \"02860,77520,06082\",\n    \"sub_zips\": \"20~2[12]~23~24~29|30~3[1-3]~0|1[0-6]~2[5-7]~28~3[45]~5[0-7]~3[6-8]~39|4[01]~4[23]~4[4-9]~5[89]|6[01]~62~63~6[4-7]~6[89]|7[01]~7[2-5]~76~77~7[89]~8[0-2]~8[3-5]~86~8[7-9]~90~9[1-6]~97~9[89]\",\n    \"zip\": \"\\\\d{5}\",\n    \"upper\": \"CSZ\",\n    \"require\": \"ACZ\",\n    \"state_name_type\": \"state\",\n    \"id\": \"data/MX\",\n    \"languages\": \"es\",\n    \"sub_keys\": \"AGS~BC~BCS~CAMP~CHIS~CHIH~CDMX~COAH~COL~DGO~MEX~GTO~GRO~HGO~JAL~MICH~MOR~NAY~NL~OAX~PUE~QRO~QROO~SLP~SIN~SON~TAB~TAMPS~TLAX~VER~YUC~ZAC\",\n    \"key\": \"MX\",\n    \"sub_isoids\": \"AGU~BCN~BCS~CAM~CHP~CHH~DIF~COA~COL~DUR~MEX~GUA~GRO~HID~JAL~MIC~MOR~NAY~NLE~OAX~PUE~QUE~ROO~SLP~SIN~SON~TAB~TAM~TLA~VER~YUC~ZAC\",\n    \"posturl\": \"http://www.correosdemexico.gob.mx/ServiciosLinea/Paginas/ccpostales.aspx\",\n    \"fmt\": \"%N%n%O%n%A%n%D%n%Z %C, %S\",\n    \"sub_names\": \"Aguascalientes~Baja California~Baja California Sur~Campeche~Chiapas~Chihuahua~Ciudad de México~Coahuila~Colima~Durango~Estado de México~Guanajuato~Guerrero~Hidalgo~Jalisco~Michoacán~Morelos~Nayarit~Nuevo León~Oaxaca~Puebla~Querétaro~Quintana Roo~San Luís Potosí~Sinalóa~Sonora~Tabasco~Tamaulipas~Tlaxcala~Veracruz~Yucatán~Zacatecas\",\n    \"name\": \"MEXICO\"\n  },\n  {\n    \"lang\": \"ms\",\n    \"sublocality_name_type\": \"village_township\",\n    \"sub_zipexs\": \"79000,86999~05000,09999,34950~15000,18599~50000,60000~87000,87999~75000,78399~70000,73599~25000,28999,39000,49000,69000~30000,36899,39000~01000,02799~10000,14999~62000,62999~88000,91999~93000,98999~40000,48999,63000,68199~20000,24999\",\n    \"zipex\": \"43000,50754,88990,50670\",\n    \"sub_zips\": \"79|8[0-6]~0[5-9]|34950~1[5-9]~5|60~87~7[5-8]~7[0-4]~2[5-8]|[346]9~3[0-6]|39000~0[12]~1[0-4]~62~8[89]|9[01]~9[3-8]~4[0-8]|6[3-8]~2[0-4]\",\n    \"zip\": \"\\\\d{5}\",\n    \"upper\": \"CS\",\n    \"require\": \"ACZ\",\n    \"state_name_type\": \"state\",\n    \"id\": \"data/MY\",\n    \"languages\": \"ms\",\n    \"sub_keys\": \"Johor~Kedah~Kelantan~Kuala Lumpur~Labuan~Melaka~Negeri Sembilan~Pahang~Perak~Perlis~Pulau Pinang~Putrajaya~Sabah~Sarawak~Selangor~Terengganu\",\n    \"key\": \"MY\",\n    \"sub_isoids\": \"01~02~03~14~15~04~05~06~08~09~07~16~12~13~10~11\",\n    \"posturl\": \"http://www.pos.com.my\",\n    \"fmt\": \"%N%n%O%n%A%n%D%n%Z %C%n%S\",\n    \"name\": \"MALAYSIA\"\n  },\n  {\n    \"zipex\": \"1102,1119,3212\",\n    \"name\": \"MOZAMBIQUE\",\n    \"zip\": \"\\\\d{4}\",\n    \"fmt\": \"%N%n%O%n%A%n%Z %C\",\n    \"key\": \"MZ\",\n    \"id\": \"data/MZ\"\n  },\n  {\n    \"id\": \"data/NA\",\n    \"key\": \"NA\",\n    \"name\": \"NAMIBIA\"\n  },\n  {\n    \"upper\": \"ACX\",\n    \"zipex\": \"98814,98800,98810\",\n    \"key\": \"NC\",\n    \"zip\": \"988\\\\d{2}\",\n    \"require\": \"ACZ\",\n    \"id\": \"data/NC\",\n    \"posturl\": \"http://poste.opt.nc/index.php?option=com_content&view=article&id=80&Itemid=131\",\n    \"fmt\": \"%O%n%N%n%A%n%Z %C %X\",\n    \"name\": \"NEW CALEDONIA\"\n  },\n  {\n    \"zipex\": \"8001\",\n    \"name\": \"NIGER\",\n    \"zip\": \"\\\\d{4}\",\n    \"fmt\": \"%N%n%O%n%A%n%Z %C\",\n    \"key\": \"NE\",\n    \"id\": \"data/NE\"\n  },\n  {\n    \"upper\": \"CS\",\n    \"zipex\": \"2899\",\n    \"name\": \"NORFOLK ISLAND\",\n    \"zip\": \"2899\",\n    \"fmt\": \"%O%n%N%n%A%n%C %S %Z\",\n    \"key\": \"NF\",\n    \"id\": \"data/NF\"\n  },\n  {\n    \"lang\": \"en\",\n    \"upper\": \"CS\",\n    \"zipex\": \"930283,300001,931104\",\n    \"posturl\": \"http://www.nigeriapostcodes.com/\",\n    \"zip\": \"\\\\d{6}\",\n    \"fmt\": \"%N%n%O%n%A%n%C %Z%n%S\",\n    \"state_name_type\": \"state\",\n    \"languages\": \"en\",\n    \"sub_keys\": \"Abia~Adamawa~Akwa Ibom~Anambra~Bauchi~Bayelsa~Benue~Borno~Cross River~Delta~Ebonyi~Edo~Ekiti~Enugu~Federal Capital Territory~Gombe~Imo~Jigawa~Kaduna~Kano~Katsina~Kebbi~Kogi~Kwara~Lagos~Nasarawa~Niger~Ogun State~Ondo~Osun~Oyo~Plateau~Rivers~Sokoto~Taraba~Yobe~Zamfara\",\n    \"key\": \"NG\",\n    \"sub_isoids\": \"AB~AD~AK~AN~BA~BY~BE~BO~CR~DE~EB~ED~EK~EN~FC~GO~IM~JI~KD~KN~KT~KE~KO~KW~LA~NA~NI~OG~ON~OS~OY~PL~RI~SO~TA~YO~ZA\",\n    \"id\": \"data/NG\",\n    \"name\": \"NIGERIA\"\n  },\n  {\n    \"lang\": \"es\",\n    \"upper\": \"CS\",\n    \"zipex\": \"52000\",\n    \"sub_zips\": \"5[12]~4[56]~2[5-7]~5[56]~3[12]~4[34]~6[56]~2[12]~3[45]~1[0-6]~4[12]~6[1-3]~3[7-9]~7[12]~8[1-3]~9[12]~4[78]\",\n    \"zip\": \"\\\\d{5}\",\n    \"fmt\": \"%N%n%O%n%A%n%Z%n%C, %S\",\n    \"state_name_type\": \"department\",\n    \"languages\": \"es\",\n    \"sub_keys\": \"Boaco~Carazo~Chinandega~Chontales~Esteli~Granada~Jinotega~Leon~Madriz~Managua~Masaya~Matagalpa~Nueva Segovia~Raan~Raas~Rio San Juan~Rivas\",\n    \"key\": \"NI\",\n    \"sub_isoids\": \"BO~CA~CI~CO~ES~GR~JI~LE~MD~MN~MS~MT~NS~AN~AS~SJ~RI\",\n    \"posturl\": \"http://www.correos.gob.ni/index.php/codigo-postal-2\",\n    \"id\": \"data/NI\",\n    \"name\": \"NICARAGUA\"\n  },\n  {\n    \"zipex\": \"1234 AB,2490 AA\",\n    \"key\": \"NL\",\n    \"zip\": \"\\\\d{4} ?[A-Z]{2}\",\n    \"fmt\": \"%O%n%N%n%A%n%Z %C\",\n    \"id\": \"data/NL\",\n    \"posturl\": \"http://www.postnl.nl/voorthuis/\",\n    \"require\": \"ACZ\",\n    \"name\": \"NETHERLANDS\"\n  },\n  {\n    \"zipex\": \"0025,0107,6631\",\n    \"key\": \"NO\",\n    \"zip\": \"\\\\d{4}\",\n    \"fmt\": \"%N%n%O%n%A%n%Z %C\",\n    \"id\": \"data/NO\",\n    \"posturl\": \"http://adressesok.posten.no/nb/postal_codes/search\",\n    \"locality_name_type\": \"post_town\",\n    \"require\": \"ACZ\",\n    \"name\": \"NORWAY\"\n  },\n  {\n    \"zipex\": \"44601\",\n    \"key\": \"NP\",\n    \"zip\": \"\\\\d{5}\",\n    \"fmt\": \"%N%n%O%n%A%n%C %Z\",\n    \"posturl\": \"http://www.gpo.gov.np/postalcode.aspx\",\n    \"id\": \"data/NP\",\n    \"name\": \"NEPAL\"\n  },\n  {\n    \"lang\": \"en\",\n    \"name\": \"NAURU CENTRAL PACIFIC\",\n    \"require\": \"AS\",\n    \"state_name_type\": \"district\",\n    \"id\": \"data/NR\",\n    \"languages\": \"en\",\n    \"sub_keys\": \"Aiwo District~Anabar District~Anetan District~Anibare District~Baiti District~Boe District~Buada District~Denigomodu District~Ewa District~Ijuw District~Meneng District~Nibok District~Uaboe District~Yaren District\",\n    \"key\": \"NR\",\n    \"sub_isoids\": \"01~02~03~04~05~06~07~08~09~10~11~12~13~14\",\n    \"fmt\": \"%N%n%O%n%A%n%S\"\n  },\n  {\n    \"id\": \"data/NU\",\n    \"key\": \"NU\",\n    \"name\": \"NIUE\"\n  },\n  {\n    \"zipex\": \"6001,6015,6332,8252,1030\",\n    \"key\": \"NZ\",\n    \"zip\": \"\\\\d{4}\",\n    \"fmt\": \"%N%n%O%n%A%n%D%n%C %Z\",\n    \"id\": \"data/NZ\",\n    \"posturl\": \"http://www.nzpost.co.nz/Cultures/en-NZ/OnlineTools/PostCodeFinder/\",\n    \"require\": \"ACZ\",\n    \"name\": \"NEW ZEALAND\"\n  },\n  {\n    \"zipex\": \"133,112,111\",\n    \"name\": \"OMAN\",\n    \"zip\": \"(?:PC )?\\\\d{3}\",\n    \"fmt\": \"%N%n%O%n%A%n%Z%n%C\",\n    \"key\": \"OM\",\n    \"id\": \"data/OM\"\n  },\n  {\n    \"upper\": \"CS\",\n    \"fmt\": \"%N%n%O%n%A%n%C%n%S\",\n    \"id\": \"data/PA\",\n    \"key\": \"PA\",\n    \"name\": \"PANAMA (REP.)\"\n  },\n  {\n    \"zipex\": \"LIMA 23,LIMA 42,CALLAO 2,02001\",\n    \"key\": \"PE\",\n    \"zip\": \"(?:LIMA \\\\d{1,2}|CALLAO 0?\\\\d)|[0-2]\\\\d{4}\",\n    \"fmt\": \"%N%n%O%n%A%n%C %Z%n%S\",\n    \"posturl\": \"http://www.serpost.com.pe/cpostal/codigo\",\n    \"id\": \"data/PE\",\n    \"name\": \"PERU\"\n  },\n  {\n    \"upper\": \"CS\",\n    \"zipex\": \"98709\",\n    \"name\": \"FRENCH POLYNESIA\",\n    \"zip\": \"987\\\\d{2}\",\n    \"require\": \"ACSZ\",\n    \"state_name_type\": \"island\",\n    \"id\": \"data/PF\",\n    \"key\": \"PF\",\n    \"fmt\": \"%N%n%O%n%A%n%Z %C %S\"\n  },\n  {\n    \"zipex\": \"111\",\n    \"name\": \"PAPUA NEW GUINEA\",\n    \"zip\": \"\\\\d{3}\",\n    \"require\": \"ACS\",\n    \"id\": \"data/PG\",\n    \"key\": \"PG\",\n    \"fmt\": \"%N%n%O%n%A%n%C %Z %S\"\n  },\n  {\n    \"lang\": \"en\",\n    \"sub_zipexs\": \"2800,2826~8600,8611~8500,8513~5600,5616~4500,4517~5700,5717~3800,3806,3808~3200,3207~7300,7306~2100,2114~3900,3905~4200,4234~2600,2615~6543,6550~6300,6337~8700,8723~3000,3024~3500,3528~4600,4612~4400,4436~9100,9104~5800,5816~4800,4810~4100,4126~6000,6053~8800,8810~9400,9417~8100,8120~8000,8015~~8200,8210~~6800,6822~5044,5046~3600,3610~2900,2922~2700,2733~5000,5043~3300,3336~3807,3809,3814~2500,2520~4000,4033~9200,9223~9300,9321,9700,9716~6500,6542~9600,9619~4900,4905~5400,5421~~5100,5111~5200,5214~7200,7215~9000,9025~2616,2625~6100,6132~6200,6224~6400,6423~3100,3133~3700,3714~5300,5322~2000,2022~2400,2447~4300,4342~3400,3405~1850,1990~5500,5516~6700,6725~8015~6225,6230~4700,4715~9500,9513~~9800,9811~7400,7416~8400,8427~8300,8319~2300,2318~7500,7509~2200,2213~7100,7124~7000,7043~7000,7043\",\n    \"zipex\": \"1008,1050,1135,1207,2000,1000\",\n    \"sub_zips\": \"28[0-2]~86[01]~85[01]~56[01]~45[01]~57[01]~380[0-68]~320~730~21[01]~390~42[0-3]~26(0|1[0-5])~65(4[3-9]|5)~63[0-3]~87[0-2]~30[0-2]~35[0-2]~46[01]~44[0-3]~910~58[01]~48[01]~41[0-2]~60[0-5]~88[01]~94[01]~81[0-2]~80[01]~~82[01]~~68[0-2]~504[4-6]~36[01]~29[0-2]~27[0-3]~50([0-3]|4[0-3])~33[0-3]~38(0[79]|1[0-4])~25[0-2]~40[0-3]~92[0-2]~9(3[0-2]|7[01])~65([0-3]|4[0-2])~96[01]~490~54[0-2]~~51[01]~52[01]~72[01]~90[0-2]~26(1[6-9]|2[0-5])~61[0-3]~62[0-2]~64[0-2]~31[0-3]~37[01]~53[0-2]~20[0-2]~24[0-4]~43[0-4]~340~1[89]~55[01]~67[0-2]~8015~62(2[5-9]|30)~47[01]~95[01]~~98[01]~74[01]~84[02]~83[01]~23[01]~750~22[01]~71[0-2]~70[0-4]~70[0-4]\",\n    \"zip\": \"\\\\d{4}\",\n    \"fmt\": \"%N%n%O%n%A%n%D, %C%n%Z %S\",\n    \"languages\": \"en\",\n    \"sub_keys\": \"Abra~Agusan del Norte~Agusan del Sur~Aklan~Albay~Antique~Apayao~Aurora~Basilan~Bataan~Batanes~Batangas~Benguet~Biliran~Bohol~Bukidnon~Bulacan~Cagayan~Camarines Norte~Camarines Sur~Camiguin~Capiz~Catanduanes~Cavite~Cebu~Compostela Valley~Cotabato~Davao del Norte~Davao del Sur~Davao Occidental~Davao Oriental~Dinagat Islands~Eastern Samar~Guimaras~Ifugao~Ilocos Norte~Ilocos Sur~Iloilo~Isabela~Kalinga~La Union~Laguna~Lanao del Norte~Lanao del Sur~Leyte~Maguindanao~Marinduque~Masbate~Metro Manila~Mindoro Occidental~Mindoro Oriental~Misamis Occidental~Misamis Oriental~Mountain Province~Negros Occidental~Negros Oriental~Northern Samar~Nueva Ecija~Nueva Vizcaya~Palawan~Pampanga~Pangasinan~Quezon Province~Quirino~Rizal~Romblon~Samar~Sarangani~Siquijor~Sorsogon~South Cotabato~Southern Leyte~Sultan Kudarat~Sulu~Surigao del Norte~Surigao del Sur~Tarlac~Tawi-Tawi~Zambales~Zamboanga del Norte~Zamboanga del Sur~Zamboanga Sibuguey\",\n    \"key\": \"PH\",\n    \"sub_isoids\": \"ABR~AGN~AGS~AKL~ALB~ANT~APA~AUR~BAS~BAN~BTN~BTG~BEN~BIL~BOH~BUK~BUL~CAG~CAN~CAS~CAM~CAP~CAT~CAV~CEB~COM~NCO~DAV~DAS~~DAO~DIN~EAS~GUI~IFU~ILN~ILS~ILI~ISA~KAL~LUN~LAG~LAN~LAS~LEY~MAG~MAD~MAS~00~MDC~MDR~MSC~MSR~MOU~NEC~NER~NSA~NUE~NUV~PLW~PAM~PAN~QUE~QUI~RIZ~ROM~WSA~SAR~SIG~SOR~SCO~SLE~SUK~SLU~SUN~SUR~TAR~TAW~ZMB~ZAN~ZAS~ZSI\",\n    \"posturl\": \"http://www.philpost.gov.ph/\",\n    \"id\": \"data/PH\",\n    \"name\": \"PHILIPPINES\"\n  },\n  {\n    \"zipex\": \"44000\",\n    \"key\": \"PK\",\n    \"zip\": \"\\\\d{5}\",\n    \"fmt\": \"%N%n%O%n%A%n%C-%Z\",\n    \"posturl\": \"http://www.pakpost.gov.pk/postcode/postcode.html\",\n    \"id\": \"data/PK\",\n    \"name\": \"PAKISTAN\"\n  },\n  {\n    \"zipex\": \"00-950,05-470,48-300,32-015,00-940\",\n    \"key\": \"PL\",\n    \"zip\": \"\\\\d{2}-\\\\d{3}\",\n    \"fmt\": \"%N%n%O%n%A%n%Z %C\",\n    \"id\": \"data/PL\",\n    \"posturl\": \"http://kody.poczta-polska.pl/\",\n    \"require\": \"ACZ\",\n    \"name\": \"POLAND\"\n  },\n  {\n    \"upper\": \"ACX\",\n    \"zipex\": \"97500\",\n    \"name\": \"ST. PIERRE AND MIQUELON\",\n    \"zip\": \"9[78]5\\\\d{2}\",\n    \"require\": \"ACZ\",\n    \"id\": \"data/PM\",\n    \"key\": \"PM\",\n    \"fmt\": \"%O%n%N%n%A%n%Z %C %X\"\n  },\n  {\n    \"upper\": \"CZ\",\n    \"zipex\": \"PCRN 1ZZ\",\n    \"name\": \"PITCAIRN\",\n    \"zip\": \"PCRN 1ZZ\",\n    \"require\": \"ACZ\",\n    \"id\": \"data/PN\",\n    \"key\": \"PN\",\n    \"fmt\": \"%N%n%O%n%A%n%C%n%Z\"\n  },\n  {\n    \"postprefix\": \"PR\",\n    \"upper\": \"ACNO\",\n    \"zipex\": \"00930\",\n    \"key\": \"PR\",\n    \"zip\": \"(00[679]\\\\d{2})(?:[ \\\\-](\\\\d{4}))?\",\n    \"zip_name_type\": \"zip\",\n    \"require\": \"ACZ\",\n    \"id\": \"data/PR\",\n    \"posturl\": \"http://zip4.usps.com/zip4/welcome.jsp\",\n    \"fmt\": \"%N%n%O%n%A%n%C PR %Z\",\n    \"name\": \"PUERTO RICO\"\n  },\n  {\n    \"id\": \"data/PS\",\n    \"key\": \"PS\",\n    \"name\": \"PALESTINIAN TERRITORY\"\n  },\n  {\n    \"zipex\": \"2725-079,1250-096,1201-950,2860-571,1208-148\",\n    \"key\": \"PT\",\n    \"zip\": \"\\\\d{4}-\\\\d{3}\",\n    \"fmt\": \"%N%n%O%n%A%n%Z %C\",\n    \"id\": \"data/PT\",\n    \"posturl\": \"http://www.ctt.pt/feapl_2/app/open/tools.jspx?tool=1\",\n    \"require\": \"ACZ\",\n    \"name\": \"PORTUGAL\"\n  },\n  {\n    \"upper\": \"ACNOS\",\n    \"zipex\": \"96940\",\n    \"key\": \"PW\",\n    \"zip\": \"(969(?:39|40))(?:[ \\\\-](\\\\d{4}))?\",\n    \"zip_name_type\": \"zip\",\n    \"require\": \"ACSZ\",\n    \"state_name_type\": \"state\",\n    \"id\": \"data/PW\",\n    \"posturl\": \"http://zip4.usps.com/zip4/welcome.jsp\",\n    \"fmt\": \"%N%n%O%n%A%n%C %S %Z\",\n    \"name\": \"PALAU\"\n  },\n  {\n    \"zipex\": \"1536,1538,1209\",\n    \"name\": \"PARAGUAY\",\n    \"zip\": \"\\\\d{4}\",\n    \"fmt\": \"%N%n%O%n%A%n%Z %C\",\n    \"key\": \"PY\",\n    \"id\": \"data/PY\"\n  },\n  {\n    \"upper\": \"AC\",\n    \"id\": \"data/QA\",\n    \"key\": \"QA\",\n    \"name\": \"QATAR\"\n  },\n  {\n    \"upper\": \"ACX\",\n    \"zipex\": \"97400\",\n    \"key\": \"RE\",\n    \"zip\": \"9[78]4\\\\d{2}\",\n    \"require\": \"ACZ\",\n    \"id\": \"data/RE\",\n    \"posturl\": \"http://www.laposte.fr/Particulier/Utiliser-nos-outils-pratiques/Outils-et-documents/Trouvez-un-code-postal\",\n    \"fmt\": \"%O%n%N%n%A%n%Z %C %X\",\n    \"name\": \"REUNION\"\n  },\n  {\n    \"upper\": \"AC\",\n    \"zipex\": \"060274,061357,200716\",\n    \"key\": \"RO\",\n    \"zip\": \"\\\\d{6}\",\n    \"fmt\": \"%N%n%O%n%A%n%Z %C\",\n    \"posturl\": \"http://www.posta-romana.ro/zip_codes\",\n    \"id\": \"data/RO\",\n    \"name\": \"ROMANIA\"\n  },\n  {\n    \"zipex\": \"106314\",\n    \"key\": \"RS\",\n    \"zip\": \"\\\\d{5,6}\",\n    \"fmt\": \"%N%n%O%n%A%n%Z %C\",\n    \"posturl\": \"http://www.posta.rs/struktura/lat/aplikacije/pronadji/nadji-postu.asp\",\n    \"id\": \"data/RS\",\n    \"name\": \"REPUBLIC OF SERBIA\"\n  },\n  {\n    \"lang\": \"ru\",\n    \"upper\": \"AC\",\n    \"zipex\": \"247112,103375,188300\",\n    \"sub_zips\": \"65[6-9]~67[56]~16[3-5]~41[4-6]~30[89]~24[1-3]~60[0-2]~40[0-4]~16[0-2]~39[4-7]~679~6(?:7[2-4]|87)~15[3-5]~66[4-9]~36[01]~23[6-8]~24[89]~68[348]~369~65[0-4]~61[0-3]~15[67]~35[0-4]~6(?:6[0-3]|4[78])~64[01]~30[5-7]~18[78]~39[89]~68[56]~1(?:0[1-9]|1|2|3[0-5]|4[0-4])~14[0-4]~18[34]~166~60[3-7]~17[3-5]~63[0-3]~64[4-6]~46[0-2]~30[23]~44[0-2]~61[4-9]~69[0-2]~18[0-2]~385~649~45[0-3]~67[01]~36[78]~386~35[89]~18[56]~16[7-9]~29[5-8]~42[45]~43[01]~67[78]~36[23]~42[0-3]~66[78]~42[67]~655~34[4-7]~39[01]~44[3-6]~19~41[0-3]~69[34]~62[0-4]~299~21[4-6]~35[5-7]~39[23]~17[0-2]~63[4-6]~30[01]~62[5-7]~43[23]~68[0-2]~628~45[4-7]~36[4-6]~42[89]~689~629~15[0-2]\",\n    \"zip\": \"\\\\d{6}\",\n    \"require\": \"ACSZ\",\n    \"state_name_type\": \"oblast\",\n    \"id\": \"data/RU\",\n    \"languages\": \"ru\",\n    \"lfmt\": \"%N%n%O%n%A%n%C%n%S%n%Z\",\n    \"sub_lnames\": \"Altayskiy kray~Amurskaya oblast'~Arkhangelskaya oblast'~Astrakhanskaya oblast'~Belgorodskaya oblast'~Bryanskaya oblast'~Vladimirskaya oblast'~Volgogradskaya oblast'~Vologodskaya oblast'~Voronezhskaya oblast'~Evreyskaya avtonomnaya oblast'~Zabaykalskiy kray~Ivanovskaya oblast'~Irkutskaya oblast'~Kabardino-Balkarskaya Republits~Kaliningradskaya oblast'~Kaluzhskaya oblast'~Kamchatskiy kray~Karachaevo-Cherkesskaya Republits~Kemerovskaya oblast'~Kirovskaya oblast'~Kostromskaya oblast'~Krasnodarskiy kray~Krasnoyarskiy kray~Kurganskaya oblast'~Kurskaya oblast'~Leningradskaya oblast'~Lipetskaya oblast'~Magadanskaya oblast'~gorod Moskva~Moskovskaya oblast'~Murmanskaya oblast'~Nenetskiy~Nizhegorodskaya oblast'~Novgorodskaya oblast'~Novosibirskaya oblast'~Omskaya oblast'~Orenburgskaya oblast'~Orlovskaya oblast'~Penzenskaya oblast'~Permskiy kray~Primorskiy kray~Pskovskaya oblast'~Respublika Adygeya~Altay Republits~Bashkortostan Republits~Buryatiya Republits~Dagestan Republits~Ingushetiya Republits~Respublika Kalmykiya~Kareliya Republits~Komi Republits~Respublika Krym~Respublika Mariy El~Respublika Mordoviya~Sakha (Yakutiya) Republits~Respublika Severnaya Osetiya-Alaniya~Respublika Tatarstan~Tyva Republits~Respublika Udmurtiya~Khakasiya Republits~Rostovskaya oblast'~Ryazanskaya oblast'~Samarskaya oblast'~gorod Sankt-Peterburg~Saratovskaya oblast'~Sakhalinskaya oblast'~Sverdlovskaya oblast'~gorod Sevastopol'~Smolenskaya oblast'~Stavropolskiy kray~Tambovskaya oblast'~Tverskaya oblast'~Tomskaya oblast'~Tulskaya oblast'~Tyumenskaya oblast'~Ulyanovskaya oblast'~Khabarovskiy kray~Khanty-Mansiyskiy avtonomnyy okrug~Chelyabinskaya oblast'~Chechenskaya Republits~Chuvashia~Chukotskiy~Yamalo-Nenetskiy~Yaroslavskaya oblast'\",\n    \"sub_keys\": \"Алтайский край~Амурская область~Архангельская область~Астраханская область~Белгородская область~Брянская область~Владимирская область~Волгоградская область~Вологодская область~Воронежская область~Еврейская автономная область~Забайкальский край~Ивановская область~Иркутская область~Кабардино-Балкарская Республика~Калининградская область~Калужская область~Камчатский край~Карачаево-Черкесская Республика~Кемеровская область~Кировская область~Костромская область~Краснодарский край~Красноярский край~Курганская область~Курская область~Ленинградская область~Липецкая область~Магаданская область~город Москва~Московская область~Мурманская область~Ненецкий автономный округ~Нижегородская область~Новгородская область~Новосибирская область~Омская область~Оренбургская область~Орловская область~Пензенская область~Пермский край~Приморский край~Псковская область~Республика Адыгея~Республика Алтай~Республика Башкортостан~Республика Бурятия~Республика Дагестан~Республика Ингушетия~Республика Калмыкия~Республика Карелия~Республика Коми~Автономна Республіка Крим~Республика Марий Эл~Республика Мордовия~Республика Саха (Якутия)~Республика Северная Осетия-Алания~Республика Татарстан~Республика Тыва~Республика Удмуртия~Республика Хакасия~Ростовская область~Рязанская область~Самарская область~город Санкт-Петербург~Саратовская область~Сахалинская область~Свердловская область~город Севастополь~Смоленская область~Ставропольский край~Тамбовская область~Тверская область~Томская область~Тульская область~Тюменская область~Ульяновская область~Хабаровский край~Ханты-Мансийский автономный округ~Челябинская область~Чеченская Республика~Чувашская Республика~Чукотский автономный округ~Ямало-Ненецкий автономный округ~Ярославская область\",\n    \"key\": \"RU\",\n    \"sub_isoids\": \"ALT~AMU~ARK~AST~BEL~BRY~VLA~VGG~VLG~VOR~YEV~ZAB~IVA~IRK~KB~KGD~KLU~KAM~KC~KEM~KIR~KOS~KDA~KYA~KGN~KRS~LEN~LIP~MAG~MOW~MOS~MUR~NEN~NIZ~NGR~NVS~OMS~ORE~ORL~PNZ~PER~PRI~PSK~AD~AL~BA~BU~DA~IN~KL~KR~KO~~ME~MO~SA~SE~TA~TY~UD~KK~ROS~RYA~SAM~SPE~SAR~SAK~SVE~~SMO~STA~TAM~TVE~TOM~TUL~TYU~ULY~KHA~KHM~CHE~CE~CU~CHU~YAN~YAR\",\n    \"posturl\": \"http://info.russianpost.ru/servlet/department\",\n    \"fmt\": \"%N%n%O%n%A%n%C%n%S%n%Z\",\n    \"sub_names\": \"Алтайский край~Амурская область~Архангельская область~Астраханская область~Белгородская область~Брянская область~Владимирская область~Волгоградская область~Вологодская область~Воронежская область~Еврейская автономная область~Забайкальский край~Ивановская область~Иркутская область~Кабардино-Балкарская Республика~Калининградская область~Калужская область~Камчатский край~Карачаево-Черкесская Республика~Кемеровская область~Кировская область~Костромская область~Краснодарский край~Красноярский край~Курганская область~Курская область~Ленинградская область~Липецкая область~Магаданская область~Москва~Московская область~Мурманская область~Ненецкий автономный округ~Нижегородская область~Новгородская область~Новосибирская область~Омская область~Оренбургская область~Орловская область~Пензенская область~Пермский край~Приморский край~Псковская область~Республика Адыгея~Республика Алтай~Республика Башкортостан~Республика Бурятия~Республика Дагестан~Республика Ингушетия~Республика Калмыкия~Республика Карелия~Республика Коми~Республика Крым~Республика Марий Эл~Республика Мордовия~Республика Саха (Якутия)~Республика Северная Осетия-Алания~Республика Татарстан~Республика Тыва~Республика Удмуртия~Республика Хакасия~Ростовская область~Рязанская область~Самарская область~Санкт-Петербург~Саратовская область~Сахалинская область~Свердловская область~Севастополь~Смоленская область~Ставропольский край~Тамбовская область~Тверская область~Томская область~Тульская область~Тюменская область~Ульяновская область~Хабаровский край~Ханты-Мансийский автономный округ~Челябинская область~Чеченская Республика~Чувашская Республика~Чукотский автономный округ~Ямало-Ненецкий автономный округ~Ярославская область\",\n    \"name\": \"RUSSIAN FEDERATION\"\n  },\n  {\n    \"upper\": \"AC\",\n    \"id\": \"data/RW\",\n    \"key\": \"RW\",\n    \"name\": \"RWANDA\"\n  },\n  {\n    \"zipex\": \"11564,11187,11142\",\n    \"name\": \"SAUDI ARABIA\",\n    \"zip\": \"\\\\d{5}\",\n    \"fmt\": \"%N%n%O%n%A%n%C %Z\",\n    \"key\": \"SA\",\n    \"id\": \"data/SA\"\n  },\n  {\n    \"id\": \"data/SB\",\n    \"key\": \"SB\",\n    \"name\": \"SOLOMON ISLANDS\"\n  },\n  {\n    \"upper\": \"S\",\n    \"name\": \"SEYCHELLES\",\n    \"fmt\": \"%N%n%O%n%A%n%C%n%S\",\n    \"state_name_type\": \"island\",\n    \"key\": \"SC\",\n    \"id\": \"data/SC\"\n  },\n  {\n    \"postprefix\": \"SE-\",\n    \"zipex\": \"11455,12345,10500\",\n    \"key\": \"SE\",\n    \"zip\": \"\\\\d{3} ?\\\\d{2}\",\n    \"require\": \"ACZ\",\n    \"id\": \"data/SE\",\n    \"posturl\": \"http://www.posten.se/sv/Kundservice/Sidor/Sok-postnummer-resultat.aspx\",\n    \"locality_name_type\": \"post_town\",\n    \"fmt\": \"%O%n%N%n%A%nSE-%Z %C\",\n    \"name\": \"SWEDEN\"\n  },\n  {\n    \"zipex\": \"546080,308125,408600\",\n    \"key\": \"SG\",\n    \"zip\": \"\\\\d{6}\",\n    \"fmt\": \"%N%n%O%n%A%nSINGAPORE %Z\",\n    \"id\": \"data/SG\",\n    \"posturl\": \"https://www.singpost.com/find-postal-code\",\n    \"require\": \"AZ\",\n    \"name\": \"REP. OF SINGAPORE\"\n  },\n  {\n    \"upper\": \"CZ\",\n    \"zipex\": \"STHL 1ZZ\",\n    \"name\": \"SAINT HELENA\",\n    \"zip\": \"(?:ASCN|STHL) 1ZZ\",\n    \"require\": \"ACZ\",\n    \"id\": \"data/SH\",\n    \"key\": \"SH\",\n    \"fmt\": \"%N%n%O%n%A%n%C%n%Z\"\n  },\n  {\n    \"postprefix\": \"SI-\",\n    \"zipex\": \"4000,1001,2500\",\n    \"name\": \"SLOVENIA\",\n    \"zip\": \"\\\\d{4}\",\n    \"fmt\": \"%N%n%O%n%A%nSI- %Z %C\",\n    \"key\": \"SI\",\n    \"id\": \"data/SI\"\n  },\n  {\n    \"zipex\": \"9170\",\n    \"key\": \"SJ\",\n    \"zip\": \"\\\\d{4}\",\n    \"fmt\": \"%N%n%O%n%A%n%Z %C\",\n    \"id\": \"data/SJ\",\n    \"posturl\": \"http://epab.posten.no/\",\n    \"locality_name_type\": \"post_town\",\n    \"require\": \"ACZ\",\n    \"name\": \"SVALBARD AND JAN MAYEN ISLANDS\"\n  },\n  {\n    \"zipex\": \"010 01,023 14,972 48,921 01,975 99\",\n    \"key\": \"SK\",\n    \"zip\": \"\\\\d{3} ?\\\\d{2}\",\n    \"fmt\": \"%N%n%O%n%A%n%Z %C\",\n    \"posturl\": \"http://psc.posta.sk\",\n    \"id\": \"data/SK\",\n    \"name\": \"SLOVAKIA\"\n  },\n  {\n    \"id\": \"data/SL\",\n    \"key\": \"SL\",\n    \"name\": \"SIERRA LEONE\"\n  },\n  {\n    \"zipex\": \"47890,47891,47895,47899\",\n    \"key\": \"SM\",\n    \"zip\": \"4789\\\\d\",\n    \"fmt\": \"%N%n%O%n%A%n%Z %C\",\n    \"id\": \"data/SM\",\n    \"posturl\": \"http://www.poste.it/online/cercacap/\",\n    \"require\": \"AZ\",\n    \"name\": \"SAN MARINO\"\n  },\n  {\n    \"zipex\": \"12500,46024,16556,10000\",\n    \"name\": \"SENEGAL\",\n    \"zip\": \"\\\\d{5}\",\n    \"fmt\": \"%N%n%O%n%A%n%Z %C\",\n    \"key\": \"SN\",\n    \"id\": \"data/SN\"\n  },\n  {\n    \"lang\": \"so\",\n    \"upper\": \"ACS\",\n    \"zipex\": \"JH 09010,AD 11010\",\n    \"name\": \"SOMALIA\",\n    \"zip\": \"[A-Z]{2} ?\\\\d{5}\",\n    \"require\": \"ACS\",\n    \"id\": \"data/SO\",\n    \"languages\": \"so\",\n    \"sub_keys\": \"AD~BK~BN~BR~BY~GG~GD~HR~JD~JH~MD~NG~SG~SD~SH~SL~TG~WG\",\n    \"key\": \"SO\",\n    \"sub_isoids\": \"AW~BK~BN~BR~BY~GA~GE~HI~JD~JH~MU~NU~SA~SD~SH~SO~TO~WO\",\n    \"fmt\": \"%N%n%O%n%A%n%C, %S %Z\",\n    \"sub_names\": \"Awdal~Bakool~Banaadir~Bari~Bay~Galguduud~Gedo~Hiiraan~Jubbada Dhexe~Jubbada Hoose~Mudug~Nugaal~Sanaag~Shabeellaha Dhexe~Shabeellaha Hoose~Sool~Togdheer~Woqooyi Galbeed\"\n  },\n  {\n    \"lang\": \"nl\",\n    \"upper\": \"AS\",\n    \"name\": \"SURINAME\",\n    \"fmt\": \"%N%n%O%n%A%n%C%n%S\",\n    \"languages\": \"nl\",\n    \"sub_keys\": \"Brokopondo~Commewijne~Coronie~Marowijne~Nickerie~Para~Paramaribo~Saramacca~Sipaliwini~Wanica\",\n    \"key\": \"SR\",\n    \"sub_isoids\": \"BR~CM~CR~MA~NI~PR~PM~SA~SI~WA\",\n    \"id\": \"data/SR\"\n  },\n  {\n    \"id\": \"data/SS\",\n    \"key\": \"SS\",\n    \"name\": \"SOUTH SUDAN\"\n  },\n  {\n    \"id\": \"data/ST\",\n    \"key\": \"ST\",\n    \"name\": \"SAO TOME AND PRINCIPE\"\n  },\n  {\n    \"lang\": \"es\",\n    \"upper\": \"CSZ\",\n    \"sub_zipexs\": \"CP 2101~CP 1201~CP 1301~CP 1401~CP 1501~CP 1601~CP 3101~CP 3201~CP 3301~CP 1101~CP 1701~CP 2201~CP 2301~CP 3401\",\n    \"zipex\": \"CP 1101\",\n    \"sub_zips\": \"CP 21~CP 12~CP 13~CP 14~CP 15~CP 16~CP 31~CP 32~CP 33~CP 11~CP 17~CP 22~CP 23~CP 34\",\n    \"zip\": \"CP [1-3][1-7][0-2]\\\\d\",\n    \"require\": \"ACS\",\n    \"id\": \"data/SV\",\n    \"languages\": \"es\",\n    \"sub_keys\": \"Ahuachapan~Cabanas~Calatenango~Cuscatlan~La Libertad~La Paz~La Union~Morazan~San Miguel~San Salvador~San Vicente~Santa Ana~Sonsonate~Usulutan\",\n    \"key\": \"SV\",\n    \"sub_isoids\": \"AH~CA~CH~CU~LI~PA~UN~MO~SM~SS~SV~SA~SO~US\",\n    \"fmt\": \"%N%n%O%n%A%n%Z-%C%n%S\",\n    \"sub_names\": \"Ahuachapán~Cabañas~Chalatenango~Cuscatlán~La Libertad~La Paz~La Unión~Morazán~San Miguel~San Salvador~San Vicente~Santa Ana~Sonsonate~Usulután\",\n    \"name\": \"EL SALVADOR\"\n  },\n  {\n    \"id\": \"data/SX\",\n    \"key\": \"SX\",\n    \"name\": \"SINT MAARTEN\"\n  },\n  {\n    \"upper\": \"ACZ\",\n    \"zipex\": \"H100\",\n    \"key\": \"SZ\",\n    \"zip\": \"[HLMS]\\\\d{3}\",\n    \"fmt\": \"%N%n%O%n%A%n%C%n%Z\",\n    \"posturl\": \"http://www.sptc.co.sz/swazipost/codes/index.php\",\n    \"id\": \"data/SZ\",\n    \"name\": \"SWAZILAND\"\n  },\n  {\n    \"zipex\": \"TDCU 1ZZ\",\n    \"name\": \"TRISTAN DA CUNHA\",\n    \"zip\": \"TDCU 1ZZ\",\n    \"fmt\": \"%N%n%O%n%A%n%C%n%Z\",\n    \"key\": \"TA\",\n    \"id\": \"data/TA\"\n  },\n  {\n    \"upper\": \"CZ\",\n    \"zipex\": \"TKCA 1ZZ\",\n    \"name\": \"TURKS AND CAICOS ISLANDS\",\n    \"zip\": \"TKCA 1ZZ\",\n    \"require\": \"ACZ\",\n    \"id\": \"data/TC\",\n    \"key\": \"TC\",\n    \"fmt\": \"%N%n%O%n%A%n%C%n%Z\"\n  },\n  {\n    \"id\": \"data/TD\",\n    \"key\": \"TD\",\n    \"name\": \"CHAD\"\n  },\n  {\n    \"id\": \"data/TF\",\n    \"key\": \"TF\",\n    \"name\": \"FRENCH SOUTHERN TERRITORIES\"\n  },\n  {\n    \"id\": \"data/TG\",\n    \"key\": \"TG\",\n    \"name\": \"TOGO\"\n  },\n  {\n    \"lang\": \"th\",\n    \"upper\": \"S\",\n    \"zipex\": \"10150,10210\",\n    \"sub_zips\": \"81~10~71~46~62~40~~22~24~20~17~36~86~57~50~92~23~63~26~73~48~30~80~60~11~96~55~31~12~77~25~94~13~56~82~93~66~65~76~67~54~83~44~49~58~35~95~45~85~21~70~15~52~51~42~33~47~90~91~10~75~74~27~18~16~64~72~84~32~43~39~14~37~41~53~61~34\",\n    \"zip\": \"\\\\d{5}\",\n    \"fmt\": \"%N%n%O%n%A%n%D %C%n%S %Z\",\n    \"languages\": \"th\",\n    \"lfmt\": \"%N%n%O%n%A%n%D, %C%n%S %Z\",\n    \"sub_lnames\": \"Krabi~Bangkok~Kanchanaburi~Kalasin~Kamphaeng Phet~Khon Kaen~Bueng Kan~Chanthaburi~Chachoengsao~Chon Buri~Chai Nat~Chaiyaphum~Chumpon~Chiang Rai~Chiang Mai~Trang~Trat~Tak~Nakhon Nayok~Nakhon Pathom~Nakhon Phanom~Nakhon Ratchasima~Nakhon Si Thammarat~Nakhon Sawan~Nonthaburi~Narathiwat~Nan~Buri Ram~Pathum Thani~Prachuap Khiri Khan~Prachin Buri~Pattani~Phra Nakhon Si Ayutthaya~Phayao~Phang Nga~Phattalung~Phichit~Phitsanulok~Phetchaburi~Phetchabun~Phrae~Phuket~Maha Sarakham~Mukdahan~Mae Hong Son~Yasothon~Yala~Roi Et~Ranong~Rayong~Ratchaburi~Lop Buri~Lampang~Lamphun~Loei~Si Sa Ket~Sakon Nakhon~Songkhla~Satun~Samut Prakan~Samut Songkhram~Samut Sakhon~Sa Kaeo~Saraburi~Sing Buri~Sukhothai~Suphanburi~Surat Thani~Surin~Nong Khai~Nong Bua Lam Phu~Ang Thong~Amnat Charoen~Udon Thani~Uttaradit~Uthai Thani~Ubon Ratchathani\",\n    \"sub_keys\": \"กระบี่~กรุงเทพมหานคร~กาญจนบุรี~กาฬสินธุ์~กำแพงเพชร~ขอนแก่น~จังหวัด บึงกาฬ~จันทบุรี~ฉะเชิงเทรา~ชลบุรี~ชัยนาท~ชัยภูมิ~ชุมพร~เชียงราย~เชียงใหม่~ตรัง~ตราด~ตาก~นครนายก~นครปฐม~นครพนม~นครราชสีมา~นครศรีธรรมราช~นครสวรรค์~นนทบุรี~นราธิวาส~น่าน~บุรีรัมย์~ปทุมธานี~ประจวบคีรีขันธ์~ปราจีนบุรี~ปัตตานี~พระนครศรีอยุธยา~พะเยา~พังงา~พัทลุง~พิจิตร~พิษณุโลก~เพชรบุรี~เพชรบูรณ์~แพร่~ภูเก็ต~มหาสารคาม~มุกดาหาร~แม่ฮ่องสอน~ยโสธร~ยะลา~ร้อยเอ็ด~ระนอง~ระยอง~ราชบุรี~ลพบุรี~ลำปาง~ลำพูน~เลย~ศรีสะเกษ~สกลนคร~สงขลา~สตูล~สมุทรปราการ~สมุทรสงคราม~สมุทรสาคร~สระแก้ว~สระบุรี~สิงห์บุรี~สุโขทัย~สุพรรณบุรี~สุราษฎร์ธานี~สุรินทร์~หนองคาย~หนองบัวลำภู~อ่างทอง~อำนาจเจริญ~อุดรธานี~อุตรดิตถ์~อุทัยธานี~อุบลราชธานี\",\n    \"key\": \"TH\",\n    \"sub_isoids\": \"81~10~71~46~62~40~38~22~24~20~18~36~86~57~50~92~23~63~26~73~48~30~80~60~12~96~55~31~13~77~25~94~14~56~82~93~66~65~76~67~54~83~44~49~58~35~95~45~85~21~70~16~52~51~42~33~47~90~91~11~75~74~27~19~17~64~72~84~32~43~39~15~37~41~53~61~34\",\n    \"id\": \"data/TH\",\n    \"name\": \"THAILAND\"\n  },\n  {\n    \"zipex\": \"735450,734025\",\n    \"name\": \"TAJIKISTAN\",\n    \"zip\": \"\\\\d{6}\",\n    \"fmt\": \"%N%n%O%n%A%n%Z %C\",\n    \"key\": \"TJ\",\n    \"id\": \"data/TJ\"\n  },\n  {\n    \"id\": \"data/TK\",\n    \"key\": \"TK\",\n    \"name\": \"TOKELAU\"\n  },\n  {\n    \"id\": \"data/TL\",\n    \"key\": \"TL\",\n    \"name\": \"TIMOR-LESTE\"\n  },\n  {\n    \"zipex\": \"744000\",\n    \"name\": \"TURKMENISTAN\",\n    \"zip\": \"\\\\d{6}\",\n    \"fmt\": \"%N%n%O%n%A%n%Z %C\",\n    \"key\": \"TM\",\n    \"id\": \"data/TM\"\n  },\n  {\n    \"zipex\": \"1002,8129,3100,1030\",\n    \"key\": \"TN\",\n    \"zip\": \"\\\\d{4}\",\n    \"fmt\": \"%N%n%O%n%A%n%Z %C\",\n    \"posturl\": \"http://www.poste.tn/codes.php\",\n    \"id\": \"data/TN\",\n    \"name\": \"TUNISIA\"\n  },\n  {\n    \"id\": \"data/TO\",\n    \"key\": \"TO\",\n    \"name\": \"TONGA\"\n  },\n  {\n    \"lang\": \"tr\",\n    \"zipex\": \"01960,06101\",\n    \"posturl\": \"http://postakodu.ptt.gov.tr/\",\n    \"zip\": \"\\\\d{5}\",\n    \"require\": \"ACZ\",\n    \"id\": \"data/TR\",\n    \"languages\": \"tr\",\n    \"locality_name_type\": \"district\",\n    \"sub_keys\": \"Adana~Adıyaman~Afyon~Ağrı~Aksaray~Amasya~Ankara~Antalya~Ardahan~Artvin~Aydın~Balıkesir~Bartın~Batman~Bayburt~Bilecik~Bingöl~Bitlis~Bolu~Burdur~Bursa~Çanakkale~Çankırı~Çorum~Denizli~Diyarbakır~Düzce~Edirne~Elazığ~Erzincan~Erzurum~Eskişehir~Gaziantep~Giresun~Gümüşhane~Hakkari~Hatay~Iğdır~Isparta~İstanbul~İzmir~Kahramanmaraş~Karabük~Karaman~Kars~Kastamonu~Kayseri~Kırıkkale~Kırklareli~Kırşehir~Kilis~Kocaeli~Konya~Kütahya~Malatya~Manisa~Mardin~Mersin~Muğla~Muş~Nevşehir~Niğde~Ordu~Osmaniye~Rize~Sakarya~Samsun~Siirt~Sinop~Sivas~Şanlıurfa~Şırnak~Tekirdağ~Tokat~Trabzon~Tunceli~Uşak~Van~Yalova~Yozgat~Zonguldak\",\n    \"key\": \"TR\",\n    \"sub_isoids\": \"01~02~03~04~68~05~06~07~75~08~09~10~74~72~69~11~12~13~14~15~16~17~18~19~20~21~81~22~23~24~25~26~27~28~29~30~31~76~32~34~35~46~78~70~36~37~38~71~39~40~79~41~42~43~44~45~47~33~48~49~50~51~52~80~53~54~55~56~57~58~63~73~59~60~61~62~64~65~77~66~67\",\n    \"fmt\": \"%N%n%O%n%A%n%Z %C/%S\",\n    \"name\": \"TURKEY\"\n  },\n  {\n    \"id\": \"data/TT\",\n    \"key\": \"TT\",\n    \"name\": \"TRINIDAD AND TOBAGO\"\n  },\n  {\n    \"lang\": \"tyv\",\n    \"upper\": \"ACS\",\n    \"name\": \"TUVALU\",\n    \"fmt\": \"%N%n%O%n%A%n%C%n%S\",\n    \"state_name_type\": \"island\",\n    \"languages\": \"tyv\",\n    \"sub_keys\": \"Funafuti~Nanumanga~Nanumea~Niulakita~Niutao~Nui~Nukufetau~Nukulaelae~Vaitupu\",\n    \"key\": \"TV\",\n    \"sub_isoids\": \"FUN~NMG~NMA~~NIT~NUI~NKF~NKL~VAI\",\n    \"id\": \"data/TV\"\n  },\n  {\n    \"lang\": \"zh-Hant\",\n    \"sub_zipexs\": \"400,408,411,439~100,119~950,966~700,745~260,272~970,983~890,896~540,558~900,947~350,369~320,338~800,815,817,852~200,206~209,212~630,655~207,208,220,253~~302,315~~602,625~500,530~880,885\",\n    \"zipex\": \"104,106,10603,40867\",\n    \"sub_zips\": \"4[0-3]~1[01]~9[56]~7[0-4]~2[67]~9[78]~89~5[45]~9[0-4]~3[56]~3[23]~8[02-5]|81[1-579]~20[0-6]~209|21[012]~6[3-5]~20[78]|2[2345]~300~30[2-8]|31~600~60[1-9]|6[12]~5[0123]~88\",\n    \"zip\": \"\\\\d{3}(?:\\\\d{2})?\",\n    \"sub_mores\": \"true~true~true~true~true~true~true~true~true~true~true~true~true~true~true~true~true~true~true~true~true~true\",\n    \"require\": \"ACSZ\",\n    \"state_name_type\": \"county\",\n    \"id\": \"data/TW\",\n    \"languages\": \"zh-Hant\",\n    \"lfmt\": \"%N%n%O%n%A%n%C, %S %Z\",\n    \"sub_lnames\": \"Taichung City~Taipei City~Taitung County~Tainan City~Yilan County~Hualien County~Kinmen County~Nantou County~Pingtung County~Miaoli County~Taoyuan City~Kaohsiung City~Keelung City~Lienchiang County~Yunlin County~New Taipei City~Hsinchu City~Hsinchu County~Chiayi City~Chiayi County~Changhua County~Penghu County\",\n    \"sub_keys\": \"台中市~台北市~台東縣~台南市~宜蘭縣~花蓮縣~金門縣~南投縣~屏東縣~苗栗縣~桃園市~高雄市~基隆市~連江縣~雲林縣~新北市~新竹市~新竹縣~嘉義市~嘉義縣~彰化縣~澎湖縣\",\n    \"key\": \"TW\",\n    \"sub_isoids\": \"TXG~TPE~TTT~TNN~ILA~HUA~~NAN~PIF~MIA~TAO~KHH~KEE~~YUN~NWT~HSZ~HSQ~CYI~CYQ~CHA~PEN\",\n    \"posturl\": \"http://www.post.gov.tw/post/internet/f_searchzone/index.jsp?ID=190102\",\n    \"fmt\": \"%Z%n%S%C%n%A%n%O%n%N\",\n    \"name\": \"TAIWAN\"\n  },\n  {\n    \"zipex\": \"6090,34413\",\n    \"name\": \"TANZANIA (UNITED REP.)\",\n    \"zip\": \"\\\\d{4,5}\",\n    \"fmt\": \"%N%n%O%n%A%n%Z %C\",\n    \"key\": \"TZ\",\n    \"id\": \"data/TZ\"\n  },\n  {\n    \"lang\": \"uk\",\n    \"zipex\": \"15432,01055,01001\",\n    \"sub_zips\": \"9[5-8]~2[1-4]~4[3-5]~49|5[0-3]~8[3-7]~1[0-3]~8[89]|90~69|7[0-2]~7[6-8]~0[1-6]~0[7-9]~2[5-8]~9[1-4]~79|8[0-2]~5[4-7]~6[5-8]~3[6-9]~3[3-5]~99~4[0-2]~4[6-8]~6[1-4]~7[3-5]~29|3[0-2]~1[89]|20~5[89]|60~1[4-7]\",\n    \"zip\": \"\\\\d{5}\",\n    \"require\": \"ACSZ\",\n    \"state_name_type\": \"oblast\",\n    \"id\": \"data/UA\",\n    \"languages\": \"uk\",\n    \"lfmt\": \"%N%n%O%n%A%n%C%n%S%n%Z\",\n    \"sub_lnames\": \"Crimea~Vinnyts'ka oblast~Volyns'ka oblast~Dnipropetrovsk oblast~Donetsk oblast~Zhytomyrs'ka oblast~Zakarpats'ka oblast~Zaporiz'ka oblast~Ivano-Frankivs'ka oblast~Kyiv city~Kiev oblast~Kirovohrads'ka oblast~Luhans'ka oblast~Lviv oblast~Mykolaivs'ka oblast~Odessa oblast~Poltavs'ka oblast~Rivnens'ka oblast~Sevastopol' city~Sums'ka oblast~Ternopil's'ka oblast~Kharkiv oblast~Khersons'ka oblast~Khmel'nyts'ka oblast~Cherkas'ka oblast~Chernivets'ka oblast~Chernihivs'ka oblast\",\n    \"sub_keys\": \"Автономна Республіка Крим~Вінницька область~Волинська область~Дніпропетровська область~Донецька область~Житомирська область~Закарпатська область~Запорізька область~Івано-Франківська область~місто Київ~Київська область~Кіровоградська область~Луганська область~Львівська область~Миколаївська область~Одеська область~Полтавська область~Рівненська область~місто Севастополь~Сумська область~Тернопільська область~Харківська область~Херсонська область~Хмельницька область~Черкаська область~Чернівецька область~Чернігівська область\",\n    \"key\": \"UA\",\n    \"posturl\": \"http://services.ukrposhta.com/postindex_new/\",\n    \"fmt\": \"%N%n%O%n%A%n%C%n%S%n%Z\",\n    \"sub_names\": \"Автономна Республіка Крим~Вінницька область~Волинська область~Дніпропетровська область~Донецька область~Житомирська область~Закарпатська область~Запорізька область~Івано-Франківська область~Київ~Київська область~Кіровоградська область~Луганська область~Львівська область~Миколаївська область~Одеська область~Полтавська область~Рівненська область~Севастополь~Сумська область~Тернопільська область~Харківська область~Херсонська область~Хмельницька область~Черкаська область~Чернівецька область~Чернігівська область\",\n    \"name\": \"UKRAINE\"\n  },\n  {\n    \"id\": \"data/UG\",\n    \"key\": \"UG\",\n    \"name\": \"UGANDA\"\n  },\n  {\n    \"upper\": \"ACNOS\",\n    \"zipex\": \"96898\",\n    \"key\": \"UM\",\n    \"zip\": \"96898\",\n    \"zip_name_type\": \"zip\",\n    \"require\": \"ACS\",\n    \"state_name_type\": \"state\",\n    \"id\": \"data/UM\",\n    \"posturl\": \"http://zip4.usps.com/zip4/welcome.jsp\",\n    \"fmt\": \"%N%n%O%n%A%n%C %S %Z\",\n    \"name\": \"UNITED STATES MINOR OUTLYING ISLANDS\"\n  },\n  {\n    \"lang\": \"en\",\n    \"upper\": \"CS\",\n    \"sub_zipexs\": \"35000,36999~99500,99999~96799~85000,86999~71600,72999~34000,34099~09000,09999~96200,96699~90000,96199~80000,81999~06000,06999~19700,19999~20000,56999~32000,34999~30000,39901~96910,96932~96700,96899~83200,83999~60000,62999~46000,47999~50000,52999~66000,67999~40000,42799~70000,71599~03900,04999~96960,96979~20600,21999~01000,05544~48000,49999~96941,96944~55000,56799~38600,39799~63000,65999~59000,59999~68000,69999~88900,89999~03000,03899~07000,08999~87000,88499~10000,00544~27000,28999~58000,58999~96950,96952~43000,45999~73000,74999~97000,97999~96940~15000,19699~00600,00999~02800,02999~29000,29999~57000,57999~37000,38599~75000,73344~84000,84999~05000,05999~00800,00899~20100,24699~98000,99499~24700,26999~53000,54999~82000,83414\",\n    \"zipex\": \"95014,22162-1010\",\n    \"sub_zips\": \"3[56]~99[5-9]~96799~8[56]~71[6-9]|72~340~09~96[2-6]~9[0-5]|96[01]~8[01]~06~19[7-9]~20[02-5]|569~3[23]|34[1-9]~3[01]|398|39901~969([1-2]\\\\d|3[12])~967[0-8]|9679[0-8]|968~83[2-9]~6[0-2]~4[67]~5[0-2]~6[67]~4[01]|42[0-7]~70|71[0-5]~039|04~969[67]~20[6-9]|21~01|02[0-7]|05501|05544~4[89]~9694[1-4]~55|56[0-7]~38[6-9]|39[0-7]~6[3-5]~59~6[89]~889|89~03[0-8]~0[78]~87|88[0-4]~1[0-4]|06390|00501|00544~2[78]~58~9695[0-2]~4[3-5]~7[34]~97~969(39|40)~1[5-8]|19[0-6]~00[679]~02[89]~29~57~37|38[0-5]~7[5-9]|885|73301|73344~84~05~008~201|2[23]|24[0-6]~98|99[0-4]~24[7-9]|2[56]~5[34]~82|83[01]|83414\",\n    \"zip\": \"(\\\\d{5})(?:[ \\\\-](\\\\d{4}))?\",\n    \"zip_name_type\": \"zip\",\n    \"require\": \"ACSZ\",\n    \"state_name_type\": \"state\",\n    \"id\": \"data/US\",\n    \"languages\": \"en\",\n    \"sub_keys\": \"AL~AK~AS~AZ~AR~AA~AE~AP~CA~CO~CT~DE~DC~FL~GA~GU~HI~ID~IL~IN~IA~KS~KY~LA~ME~MH~MD~MA~MI~FM~MN~MS~MO~MT~NE~NV~NH~NJ~NM~NY~NC~ND~MP~OH~OK~OR~PW~PA~PR~RI~SC~SD~TN~TX~UT~VT~VI~VA~WA~WV~WI~WY\",\n    \"key\": \"US\",\n    \"posturl\": \"https://tools.usps.com/go/ZipLookupAction!input.action\",\n    \"fmt\": \"%N%n%O%n%A%n%C, %S %Z\",\n    \"sub_names\": \"Alabama~Alaska~American Samoa~Arizona~Arkansas~Armed Forces (AA)~Armed Forces (AE)~Armed Forces (AP)~California~Colorado~Connecticut~Delaware~District of Columbia~Florida~Georgia~Guam~Hawaii~Idaho~Illinois~Indiana~Iowa~Kansas~Kentucky~Louisiana~Maine~Marshall Islands~Maryland~Massachusetts~Michigan~Micronesia~Minnesota~Mississippi~Missouri~Montana~Nebraska~Nevada~New Hampshire~New Jersey~New Mexico~New York~North Carolina~North Dakota~Northern Mariana Islands~Ohio~Oklahoma~Oregon~Palau~Pennsylvania~Puerto Rico~Rhode Island~South Carolina~South Dakota~Tennessee~Texas~Utah~Vermont~Virgin Islands~Virginia~Washington~West Virginia~Wisconsin~Wyoming\",\n    \"name\": \"UNITED STATES\"\n  },\n  {\n    \"lang\": \"es\",\n    \"upper\": \"CS\",\n    \"zipex\": \"11600\",\n    \"sub_zips\": \"55~9[01]|1[456]~37~70|75204~97~85~94|9060|97005~30~20~1|91600~60~65|60002~40~27~50~80~75|70003~45~33|30203|30204|30302|37007\",\n    \"zip\": \"\\\\d{5}\",\n    \"fmt\": \"%N%n%O%n%A%n%Z %C %S\",\n    \"languages\": \"es\",\n    \"sub_keys\": \"Artigas~Canelones~Cerro Largo~Colonia~Durazno~Flores~Florida~Lavalleja~Maldonado~Montevideo~Paysandú~Río Negro~Rivera~Rocha~Salto~San José~Soriano~Tacuarembó~Treinta y Tres\",\n    \"key\": \"UY\",\n    \"sub_isoids\": \"AR~CA~CL~CO~DU~FS~FD~LA~MA~MO~PA~RN~RV~RO~SA~SJ~SO~TA~TT\",\n    \"posturl\": \"http://www.correo.com.uy/index.asp?codPag=codPost&switchMapa=codPost\",\n    \"id\": \"data/UY\",\n    \"name\": \"URUGUAY\"\n  },\n  {\n    \"upper\": \"CS\",\n    \"zipex\": \"702100,700000\",\n    \"key\": \"UZ\",\n    \"zip\": \"\\\\d{6}\",\n    \"fmt\": \"%N%n%O%n%A%n%Z %C%n%S\",\n    \"posturl\": \"http://www.pochta.uz/ru/uslugi/indexsearch.html\",\n    \"id\": \"data/UZ\",\n    \"name\": \"UZBEKISTAN\"\n  },\n  {\n    \"zipex\": \"00120\",\n    \"name\": \"VATICAN\",\n    \"zip\": \"00120\",\n    \"fmt\": \"%N%n%O%n%A%n%Z %C\",\n    \"key\": \"VA\",\n    \"id\": \"data/VA\"\n  },\n  {\n    \"zipex\": \"VC0100,VC0110,VC0400\",\n    \"key\": \"VC\",\n    \"zip\": \"VC\\\\d{4}\",\n    \"fmt\": \"%N%n%O%n%A%n%C %Z\",\n    \"posturl\": \"http://www.svgpost.gov.vc/?option=com_content&view=article&id=3&Itemid=16\",\n    \"id\": \"data/VC\",\n    \"name\": \"SAINT VINCENT AND THE GRENADINES (ANTILLES)\"\n  },\n  {\n    \"lang\": \"es\",\n    \"upper\": \"CS\",\n    \"zipex\": \"1010,3001,8011,1020\",\n    \"posturl\": \"http://www.ipostel.gob.ve/index.php/oficinas-postales\",\n    \"zip\": \"\\\\d{4}\",\n    \"require\": \"ACS\",\n    \"state_name_type\": \"state\",\n    \"id\": \"data/VE\",\n    \"languages\": \"es\",\n    \"sub_keys\": \"Amazonas~Anzoátegui~Apure~Aragua~Barinas~Bolívar~Carabobo~Cojedes~Delta Amacuro~Dependencias Federales~Distrito Federal~Falcón~Guárico~Lara~Mérida~Miranda~Monagas~Nueva Esparta~Portuguesa~Sucre~Táchira~Trujillo~Vargas~Yaracuy~Zulia\",\n    \"key\": \"VE\",\n    \"sub_isoids\": \"Z~B~C~D~E~F~G~H~Y~W~A~I~J~K~L~M~N~O~P~R~S~T~X~U~V\",\n    \"fmt\": \"%N%n%O%n%A%n%C %Z, %S\",\n    \"name\": \"VENEZUELA\"\n  },\n  {\n    \"zipex\": \"VG1110,VG1150,VG1160\",\n    \"name\": \"VIRGIN ISLANDS (BRITISH)\",\n    \"zip\": \"VG\\\\d{4}\",\n    \"require\": \"A\",\n    \"id\": \"data/VG\",\n    \"key\": \"VG\",\n    \"fmt\": \"%N%n%O%n%A%n%C%n%Z\"\n  },\n  {\n    \"upper\": \"ACNOS\",\n    \"zipex\": \"00802-1222,00850-9802\",\n    \"key\": \"VI\",\n    \"zip\": \"(008(?:(?:[0-4]\\\\d)|(?:5[01])))(?:[ \\\\-](\\\\d{4}))?\",\n    \"zip_name_type\": \"zip\",\n    \"require\": \"ACSZ\",\n    \"state_name_type\": \"state\",\n    \"id\": \"data/VI\",\n    \"posturl\": \"http://zip4.usps.com/zip4/welcome.jsp\",\n    \"fmt\": \"%N%n%O%n%A%n%C %S %Z\",\n    \"name\": \"VIRGIN ISLANDS (U.S.)\"\n  },\n  {\n    \"lang\": \"vi\",\n    \"zipex\": \"119415,136065,720344\",\n    \"posturl\": \"http://postcode.vnpost.vn/services/search.aspx\",\n    \"zip\": \"\\\\d{6}\",\n    \"fmt\": \"%N%n%O%n%A%n%C%n%S %Z\",\n    \"languages\": \"vi\",\n    \"lfmt\": \"%N%n%O%n%A%n%C%n%S %Z\",\n    \"sub_lnames\": \"An Giang Province~Ba Ria-Vung Tau Province~Bac Lieu Province~Bac Giang Province~Bac Kan Province~Bac Ninh Province~Ben Tre Province~Binh Duong Province~Binh Dinh Province~Binh Phuoc Province~Binh Thuan Province~Ca Mau Province~Cao Bang Province~Can Tho City~Da Nang City~Dak Lak Province~Dak Nong Province~Dien Bien Province~Dong Nai Province~Dong Thap Province~Gia Lai Province~Ha Giang Province~Ha Nam Province~Hanoi City~Ha Tinh Province~Hai Duong Province~Haiphong City~Hau Giang Province~Hoa Binh Province~Hung Yen Province~Khanh Hoa Province~Kien Giang Province~Kon Tum Province~Lai Chau Province~Lang Song Province~Lao Cai Province~Lam Dong Province~Long An Province~Nam Dinh Province~Nghe An Province~Nanh Binh Province~Ninh Thuan Province~Phu Tho Province~Phu Yen Province~Quang Binh Province~Quang Nam Province~Quang Ngai Province~Quang Ninh Province~Quang Tri Province~Soc Trang Province~Son La Province~Tay Ninh Province~Thai Binh Province~Thai Nguyen Province~Thanh Hoa Province~Ho Chi Minh City~Thua Thien-Hue Province~Tien Giang Province~Tra Vinh Province~Tuyen Quang Province~Vinh Long Province~Vinh Phuc Province~Yen Bai Province\",\n    \"sub_keys\": \"An Giang~Bà Rịa–Vũng Tàu~Bạc Liêu~Bắc Giang~Bắc Kạn~Bắc Ninh~Bến Tre~Bình Dương~Bình Định~Bình Phước~Bình Thuận~Cà Mau~Cao Bằng~Cần Thơ~Đà Nẵng~Đắk Lắk~Đăk Nông~Điện Biên~Đồng Nai~Đồng Tháp~Gia Lai~Hà Giang~Hà Nam~Hà Nội~Hà Tĩnh~Hải Dương~Hải Phòng~Hậu Giang~Hòa Bình~Hưng Yên~Khánh Hòa~Kiên Giang~Kon Tum~Lai Châu~Lạng Sơn~Lào Cai~Lâm Đồng~Long An~Nam Định~Nghệ An~Ninh Bình~Ninh Thuận~Phú Thọ~Phú Yên~Quảng Bình~Quảng Nam~Quảng Ngãi~Quảng Ninh~Quảng Trị~Sóc Trăng~Sơn La~Tây Ninh~Thái Bình~Thái Nguyên~Thanh Hóa~Thành phố Hồ Chí Minh~Thừa Thiên–Huế~Tiền Giang~Trà Vinh~Tuyên Quang~Vĩnh Long~Vĩnh Phúc~Yên Bái\",\n    \"key\": \"VN\",\n    \"sub_isoids\": \"44~43~55~54~53~56~50~57~31~58~40~59~04~CT~DN~33~72~71~39~45~30~03~63~HN~23~61~HP~73~14~66~34~47~28~01~09~02~35~41~67~22~18~36~68~32~24~27~29~13~25~52~05~37~20~69~21~SG~26~46~51~07~49~70~06\",\n    \"id\": \"data/VN\",\n    \"name\": \"VIET NAM\"\n  },\n  {\n    \"id\": \"data/VU\",\n    \"key\": \"VU\",\n    \"name\": \"VANUATU\"\n  },\n  {\n    \"upper\": \"ACX\",\n    \"zipex\": \"98600\",\n    \"name\": \"WALLIS AND FUTUNA ISLANDS\",\n    \"zip\": \"986\\\\d{2}\",\n    \"require\": \"ACZ\",\n    \"id\": \"data/WF\",\n    \"key\": \"WF\",\n    \"fmt\": \"%O%n%N%n%A%n%Z %C %X\"\n  },\n  {\n    \"id\": \"data/WS\",\n    \"key\": \"WS\",\n    \"name\": \"SAMOA\"\n  },\n  {\n    \"zipex\": \"10000\",\n    \"name\": \"KOSOVO\",\n    \"zip\": \"[1-7]\\\\d{4}\",\n    \"fmt\": \"%N%n%O%n%A%n%Z %C\",\n    \"key\": \"XK\",\n    \"id\": \"data/XK\"\n  },\n  {\n    \"id\": \"data/YE\",\n    \"key\": \"YE\",\n    \"name\": \"YEMEN\"\n  },\n  {\n    \"upper\": \"ACX\",\n    \"zipex\": \"97600\",\n    \"name\": \"MAYOTTE\",\n    \"zip\": \"976\\\\d{2}\",\n    \"require\": \"ACZ\",\n    \"id\": \"data/YT\",\n    \"key\": \"YT\",\n    \"fmt\": \"%O%n%N%n%A%n%Z %C %X\"\n  },\n  {\n    \"zipex\": \"0083,1451,0001\",\n    \"key\": \"ZA\",\n    \"zip\": \"\\\\d{4}\",\n    \"fmt\": \"%N%n%O%n%A%n%D%n%C%n%Z\",\n    \"id\": \"data/ZA\",\n    \"posturl\": \"https://www.postoffice.co.za/contactus/postalcode.html\",\n    \"require\": \"ACZ\",\n    \"name\": \"SOUTH AFRICA\"\n  },\n  {\n    \"zipex\": \"50100,50101\",\n    \"name\": \"ZAMBIA\",\n    \"zip\": \"\\\\d{5}\",\n    \"fmt\": \"%N%n%O%n%A%n%Z %C\",\n    \"key\": \"ZM\",\n    \"id\": \"data/ZM\"\n  },\n  {\n    \"id\": \"data/ZW\",\n    \"key\": \"ZW\",\n    \"name\": \"ZIMBABWE\"\n  }\n]\n"
  },
  {
    "path": "Scripts/Regions.swift",
    "content": "import Foundation\n\nprint(Locale.isoRegionCodes.joined(separator: \"\\n\"))\n"
  },
  {
    "path": "Sources/PostalCodeValidator/PostalCodeValidator.swift",
    "content": "// This file was automatically generated and should not be edited.\nimport Foundation\n\n/// A validator for postal codes.\npublic final class PostalCodeValidator {\n    /**\n     * A set of available region codes.\n     *\n     * Each element of the returned set is an two-letter\n     * ISO 3166-2 region code\n     * (for example, \"US\" for the United States of America).\n    */\n    public class var isoRegionCodes: Set<String> {\n        return Set(patternsByRegion.keys)\n    }\n\n    private static let patternsByRegion: [String: String] = [\n        \"AC\": #\"ASCN 1ZZ\"#,\n        \"AD\": #\"AD[1-7]0\\d\"#,\n        \"AE\": #\"AD[1-7]0\\d\"#,\n        \"AF\": #\"\\d{4}\"#,\n        \"AG\": #\"\\d{4}\"#,\n        \"AI\": #\"(?:AI-)?2640\"#,\n        \"AL\": #\"\\d{4}\"#,\n        \"AM\": #\"(?:37)?\\d{4}\"#,\n        \"AO\": #\"(?:37)?\\d{4}\"#,\n        \"AQ\": #\"(?:37)?\\d{4}\"#,\n        \"AR\": #\"((?:[A-HJ-NP-Z])?\\d{4})([A-Z]{3})?\"#,\n        \"AS\": #\"(96799)(?:[ \\-](\\d{4}))?\"#,\n        \"AT\": #\"\\d{4}\"#,\n        \"AU\": #\"\\d{4}\"#,\n        \"AW\": #\"\\d{4}\"#,\n        \"AX\": #\"22\\d{3}\"#,\n        \"AZ\": #\"\\d{4}\"#,\n        \"BA\": #\"\\d{5}\"#,\n        \"BB\": #\"BB\\d{5}\"#,\n        \"BD\": #\"\\d{4}\"#,\n        \"BE\": #\"\\d{4}\"#,\n        \"BF\": #\"\\d{4}\"#,\n        \"BG\": #\"\\d{4}\"#,\n        \"BH\": #\"(?:\\d|1[0-2])\\d{2}\"#,\n        \"BI\": #\"(?:\\d|1[0-2])\\d{2}\"#,\n        \"BJ\": #\"(?:\\d|1[0-2])\\d{2}\"#,\n        \"BL\": #\"9[78][01]\\d{2}\"#,\n        \"BM\": #\"[A-Z]{2} ?[A-Z0-9]{2}\"#,\n        \"BN\": #\"[A-Z]{2} ?\\d{4}\"#,\n        \"BO\": #\"[A-Z]{2} ?\\d{4}\"#,\n        \"BQ\": #\"[A-Z]{2} ?\\d{4}\"#,\n        \"BR\": #\"\\d{5}-?\\d{3}\"#,\n        \"BS\": #\"\\d{5}-?\\d{3}\"#,\n        \"BT\": #\"\\d{5}\"#,\n        \"BV\": #\"\\d{5}\"#,\n        \"BW\": #\"\\d{5}\"#,\n        \"BY\": #\"\\d{6}\"#,\n        \"BZ\": #\"\\d{6}\"#,\n        \"CA\": #\"[ABCEGHJKLMNPRSTVXY]\\d[ABCEGHJ-NPRSTV-Z] ?\\d[ABCEGHJ-NPRSTV-Z]\\d\"#,\n        \"CC\": #\"6799\"#,\n        \"CD\": #\"6799\"#,\n        \"CF\": #\"6799\"#,\n        \"CG\": #\"6799\"#,\n        \"CH\": #\"\\d{4}\"#,\n        \"CI\": #\"\\d{4}\"#,\n        \"CK\": #\"\\d{4}\"#,\n        \"CL\": #\"\\d{7}\"#,\n        \"CM\": #\"\\d{7}\"#,\n        \"CN\": #\"\\d{6}\"#,\n        \"CO\": #\"\\d{6}\"#,\n        \"CR\": #\"\\d{4,5}|\\d{3}-\\d{4}\"#,\n        \"CV\": #\"\\d{4}\"#,\n        \"CW\": #\"\\d{4}\"#,\n        \"CX\": #\"6798\"#,\n        \"CY\": #\"\\d{4}\"#,\n        \"CZ\": #\"\\d{3} ?\\d{2}\"#,\n        \"DE\": #\"\\d{5}\"#,\n        \"DJ\": #\"\\d{5}\"#,\n        \"DK\": #\"\\d{4}\"#,\n        \"DM\": #\"\\d{4}\"#,\n        \"DO\": #\"\\d{5}\"#,\n        \"DZ\": #\"\\d{5}\"#,\n        \"EC\": #\"\\d{6}\"#,\n        \"EE\": #\"\\d{5}\"#,\n        \"EG\": #\"\\d{5}\"#,\n        \"EH\": #\"\\d{5}\"#,\n        \"ER\": #\"\\d{5}\"#,\n        \"ES\": #\"\\d{5}\"#,\n        \"ET\": #\"\\d{4}\"#,\n        \"FI\": #\"\\d{5}\"#,\n        \"FJ\": #\"\\d{5}\"#,\n        \"FK\": #\"FIQQ 1ZZ\"#,\n        \"FM\": #\"(9694[1-4])(?:[ \\-](\\d{4}))?\"#,\n        \"FO\": #\"\\d{3}\"#,\n        \"FR\": #\"\\d{2} ?\\d{3}\"#,\n        \"GA\": #\"\\d{2} ?\\d{3}\"#,\n        \"GB\": #\"GIR ?0AA|(?:(?:AB|AL|B|BA|BB|BD|BH|BL|BN|BR|BS|BT|BX|CA|CB|CF|CH|CM|CO|CR|CT|CV|CW|DA|DD|DE|DG|DH|DL|DN|DT|DY|E|EC|EH|EN|EX|FK|FY|G|GL|GY|GU|HA|HD|HG|HP|HR|HS|HU|HX|IG|IM|IP|IV|JE|KA|KT|KW|KY|L|LA|LD|LE|LL|LN|LS|LU|M|ME|MK|ML|N|NE|NG|NN|NP|NR|NW|OL|OX|PA|PE|PH|PL|PO|PR|RG|RH|RM|S|SA|SE|SG|SK|SL|SM|SN|SO|SP|SR|SS|ST|SW|SY|TA|TD|TF|TN|TQ|TR|TS|TW|UB|W|WA|WC|WD|WF|WN|WR|WS|WV|YO|ZE)(?:\\d[\\dA-Z]? ?\\d[ABD-HJLN-UW-Z]{2}))|BFPO ?\\d{1,4}\"#,\n        \"GD\": #\"GIR ?0AA|(?:(?:AB|AL|B|BA|BB|BD|BH|BL|BN|BR|BS|BT|BX|CA|CB|CF|CH|CM|CO|CR|CT|CV|CW|DA|DD|DE|DG|DH|DL|DN|DT|DY|E|EC|EH|EN|EX|FK|FY|G|GL|GY|GU|HA|HD|HG|HP|HR|HS|HU|HX|IG|IM|IP|IV|JE|KA|KT|KW|KY|L|LA|LD|LE|LL|LN|LS|LU|M|ME|MK|ML|N|NE|NG|NN|NP|NR|NW|OL|OX|PA|PE|PH|PL|PO|PR|RG|RH|RM|S|SA|SE|SG|SK|SL|SM|SN|SO|SP|SR|SS|ST|SW|SY|TA|TD|TF|TN|TQ|TR|TS|TW|UB|W|WA|WC|WD|WF|WN|WR|WS|WV|YO|ZE)(?:\\d[\\dA-Z]? ?\\d[ABD-HJLN-UW-Z]{2}))|BFPO ?\\d{1,4}\"#,\n        \"GE\": #\"\\d{4}\"#,\n        \"GF\": #\"9[78]3\\d{2}\"#,\n        \"GG\": #\"GY\\d[\\dA-Z]? ?\\d[ABD-HJLN-UW-Z]{2}\"#,\n        \"GH\": #\"GY\\d[\\dA-Z]? ?\\d[ABD-HJLN-UW-Z]{2}\"#,\n        \"GI\": #\"GX11 1AA\"#,\n        \"GL\": #\"39\\d{2}\"#,\n        \"GM\": #\"39\\d{2}\"#,\n        \"GN\": #\"\\d{3}\"#,\n        \"GP\": #\"9[78][01]\\d{2}\"#,\n        \"GQ\": #\"9[78][01]\\d{2}\"#,\n        \"GR\": #\"\\d{3} ?\\d{2}\"#,\n        \"GS\": #\"SIQQ 1ZZ\"#,\n        \"GT\": #\"\\d{5}\"#,\n        \"GU\": #\"(969(?:[12]\\d|3[12]))(?:[ \\-](\\d{4}))?\"#,\n        \"GW\": #\"\\d{4}\"#,\n        \"GY\": #\"\\d{4}\"#,\n        \"HK\": #\"\\d{4}\"#,\n        \"HM\": #\"\\d{4}\"#,\n        \"HN\": #\"\\d{5}\"#,\n        \"HR\": #\"\\d{5}\"#,\n        \"HT\": #\"\\d{4}\"#,\n        \"HU\": #\"\\d{4}\"#,\n        \"ID\": #\"\\d{5}\"#,\n        \"IE\": #\"[\\dA-Z]{3} ?[\\dA-Z]{4}\"#,\n        \"IL\": #\"\\d{5}(?:\\d{2})?\"#,\n        \"IM\": #\"IM\\d[\\dA-Z]? ?\\d[ABD-HJLN-UW-Z]{2}\"#,\n        \"IN\": #\"\\d{6}\"#,\n        \"IO\": #\"BBND 1ZZ\"#,\n        \"IQ\": #\"\\d{5}\"#,\n        \"IR\": #\"\\d{5}-?\\d{5}\"#,\n        \"IS\": #\"\\d{3}\"#,\n        \"IT\": #\"\\d{5}\"#,\n        \"JE\": #\"JE\\d[\\dA-Z]? ?\\d[ABD-HJLN-UW-Z]{2}\"#,\n        \"JM\": #\"JE\\d[\\dA-Z]? ?\\d[ABD-HJLN-UW-Z]{2}\"#,\n        \"JO\": #\"\\d{5}\"#,\n        \"JP\": #\"\\d{3}-?\\d{4}\"#,\n        \"KE\": #\"\\d{5}\"#,\n        \"KG\": #\"\\d{6}\"#,\n        \"KH\": #\"\\d{5}\"#,\n        \"KI\": #\"\\d{5}\"#,\n        \"KM\": #\"\\d{5}\"#,\n        \"KN\": #\"\\d{5}\"#,\n        \"KR\": #\"\\d{5}\"#,\n        \"KW\": #\"\\d{5}\"#,\n        \"KY\": #\"KY\\d-\\d{4}\"#,\n        \"KZ\": #\"\\d{6}\"#,\n        \"LA\": #\"\\d{5}\"#,\n        \"LB\": #\"(?:\\d{4})(?: ?(?:\\d{4}))?\"#,\n        \"LC\": #\"(?:\\d{4})(?: ?(?:\\d{4}))?\"#,\n        \"LI\": #\"948[5-9]|949[0-7]\"#,\n        \"LK\": #\"\\d{5}\"#,\n        \"LR\": #\"\\d{4}\"#,\n        \"LS\": #\"\\d{3}\"#,\n        \"LT\": #\"\\d{5}\"#,\n        \"LU\": #\"\\d{4}\"#,\n        \"LV\": #\"LV-\\d{4}\"#,\n        \"LY\": #\"LV-\\d{4}\"#,\n        \"MA\": #\"\\d{5}\"#,\n        \"MC\": #\"980\\d{2}\"#,\n        \"MD\": #\"\\d{4}\"#,\n        \"ME\": #\"8\\d{4}\"#,\n        \"MF\": #\"9[78][01]\\d{2}\"#,\n        \"MG\": #\"\\d{3}\"#,\n        \"MH\": #\"(969[67]\\d)(?:[ \\-](\\d{4}))?\"#,\n        \"MK\": #\"\\d{4}\"#,\n        \"ML\": #\"\\d{4}\"#,\n        \"MM\": #\"\\d{5}\"#,\n        \"MN\": #\"\\d{5}\"#,\n        \"MO\": #\"\\d{5}\"#,\n        \"MP\": #\"(9695[012])(?:[ \\-](\\d{4}))?\"#,\n        \"MQ\": #\"9[78]2\\d{2}\"#,\n        \"MR\": #\"9[78]2\\d{2}\"#,\n        \"MS\": #\"9[78]2\\d{2}\"#,\n        \"MT\": #\"[A-Z]{3} ?\\d{2,4}\"#,\n        \"MU\": #\"\\d{3}(?:\\d{2}|[A-Z]{2}\\d{3})\"#,\n        \"MV\": #\"\\d{5}\"#,\n        \"MW\": #\"\\d{5}\"#,\n        \"MX\": #\"\\d{5}\"#,\n        \"MY\": #\"\\d{5}\"#,\n        \"MZ\": #\"\\d{4}\"#,\n        \"NA\": #\"\\d{4}\"#,\n        \"NC\": #\"988\\d{2}\"#,\n        \"NE\": #\"\\d{4}\"#,\n        \"NF\": #\"2899\"#,\n        \"NG\": #\"\\d{6}\"#,\n        \"NI\": #\"\\d{5}\"#,\n        \"NL\": #\"\\d{4} ?[A-Z]{2}\"#,\n        \"NO\": #\"\\d{4}\"#,\n        \"NP\": #\"\\d{5}\"#,\n        \"NR\": #\"\\d{5}\"#,\n        \"NU\": #\"\\d{5}\"#,\n        \"NZ\": #\"\\d{4}\"#,\n        \"OM\": #\"(?:PC )?\\d{3}\"#,\n        \"PA\": #\"(?:PC )?\\d{3}\"#,\n        \"PE\": #\"(?:LIMA \\d{1,2}|CALLAO 0?\\d)|[0-2]\\d{4}\"#,\n        \"PF\": #\"987\\d{2}\"#,\n        \"PG\": #\"\\d{3}\"#,\n        \"PH\": #\"\\d{4}\"#,\n        \"PK\": #\"\\d{5}\"#,\n        \"PL\": #\"\\d{2}-\\d{3}\"#,\n        \"PM\": #\"9[78]5\\d{2}\"#,\n        \"PN\": #\"PCRN 1ZZ\"#,\n        \"PR\": #\"(00[679]\\d{2})(?:[ \\-](\\d{4}))?\"#,\n        \"PS\": #\"(00[679]\\d{2})(?:[ \\-](\\d{4}))?\"#,\n        \"PT\": #\"\\d{4}-\\d{3}\"#,\n        \"PW\": #\"(969(?:39|40))(?:[ \\-](\\d{4}))?\"#,\n        \"PY\": #\"\\d{4}\"#,\n        \"QA\": #\"\\d{4}\"#,\n        \"RE\": #\"9[78]4\\d{2}\"#,\n        \"RO\": #\"\\d{6}\"#,\n        \"RS\": #\"\\d{5,6}\"#,\n        \"RU\": #\"\\d{6}\"#,\n        \"RW\": #\"\\d{6}\"#,\n        \"SA\": #\"\\d{5}\"#,\n        \"SB\": #\"\\d{5}\"#,\n        \"SC\": #\"\\d{5}\"#,\n        \"SE\": #\"\\d{3} ?\\d{2}\"#,\n        \"SG\": #\"\\d{6}\"#,\n        \"SH\": #\"(?:ASCN|STHL) 1ZZ\"#,\n        \"SI\": #\"\\d{4}\"#,\n        \"SJ\": #\"\\d{4}\"#,\n        \"SK\": #\"\\d{3} ?\\d{2}\"#,\n        \"SL\": #\"\\d{3} ?\\d{2}\"#,\n        \"SM\": #\"4789\\d\"#,\n        \"SN\": #\"\\d{5}\"#,\n        \"SO\": #\"[A-Z]{2} ?\\d{5}\"#,\n        \"SR\": #\"[A-Z]{2} ?\\d{5}\"#,\n        \"SS\": #\"[A-Z]{2} ?\\d{5}\"#,\n        \"ST\": #\"[A-Z]{2} ?\\d{5}\"#,\n        \"SV\": #\"CP [1-3][1-7][0-2]\\d\"#,\n        \"SX\": #\"CP [1-3][1-7][0-2]\\d\"#,\n        \"SZ\": #\"[HLMS]\\d{3}\"#,\n        \"TA\": #\"TDCU 1ZZ\"#,\n        \"TC\": #\"TKCA 1ZZ\"#,\n        \"TD\": #\"TKCA 1ZZ\"#,\n        \"TF\": #\"TKCA 1ZZ\"#,\n        \"TG\": #\"TKCA 1ZZ\"#,\n        \"TH\": #\"\\d{5}\"#,\n        \"TJ\": #\"\\d{6}\"#,\n        \"TK\": #\"\\d{6}\"#,\n        \"TL\": #\"\\d{6}\"#,\n        \"TM\": #\"\\d{6}\"#,\n        \"TN\": #\"\\d{4}\"#,\n        \"TO\": #\"\\d{4}\"#,\n        \"TR\": #\"\\d{5}\"#,\n        \"TT\": #\"\\d{5}\"#,\n        \"TV\": #\"\\d{5}\"#,\n        \"TW\": #\"\\d{3}(?:\\d{2})?\"#,\n        \"TZ\": #\"\\d{4,5}\"#,\n        \"UA\": #\"\\d{5}\"#,\n        \"UG\": #\"\\d{5}\"#,\n        \"UM\": #\"96898\"#,\n        \"US\": #\"(\\d{5})(?:[ \\-](\\d{4}))?\"#,\n        \"UY\": #\"\\d{5}\"#,\n        \"UZ\": #\"\\d{6}\"#,\n        \"VA\": #\"00120\"#,\n        \"VC\": #\"VC\\d{4}\"#,\n        \"VE\": #\"\\d{4}\"#,\n        \"VG\": #\"VG\\d{4}\"#,\n        \"VI\": #\"(008(?:(?:[0-4]\\d)|(?:5[01])))(?:[ \\-](\\d{4}))?\"#,\n        \"VN\": #\"\\d{6}\"#,\n        \"VU\": #\"\\d{6}\"#,\n        \"WF\": #\"986\\d{2}\"#,\n        \"WS\": #\"986\\d{2}\"#,\n        \"XK\": #\"[1-7]\\d{4}\"#,\n        \"YE\": #\"[1-7]\\d{4}\"#,\n        \"YT\": #\"976\\d{2}\"#,\n        \"ZA\": #\"\\d{4}\"#,\n        \"ZM\": #\"\\d{5}\"#,\n        \"ZW\": #\"\\d{5}\"#,\n    ]\n\n    /**\n     *  The two-letter ISO 3166-2 region code\n     *  (for example, \"US\" for the United States of America).\n     */\n    var regionCode: String\n\n    private var regularExpression: NSRegularExpression\n\n    /**\n     * Creates a postal code validator for the specified region.\n     *\n     * Returns `nil` if the region isn't supported.\n     *\n     * - Parameters:\n     *   - region: A two-letter ISO 3166-2 region code\n     *             (for example, \"US\" for the United States of America).\n     */\n    public init?(regionCode: String) {\n        guard let pattern = PostalCodeValidator.patternsByRegion[regionCode],\n            let regex = try? NSRegularExpression(pattern: #\"\\A\\#(pattern)\\Z\"#, options: [])\n        else { return nil }\n\n        self.regionCode = regionCode\n        self.regularExpression = regex\n    }\n\n    /**\n     * Creates a postal code validator for the region of the specified locale.\n     *\n     * Returns `nil` if the locale doesn't have a valid region,\n     * or the region isn't supported.\n     *\n     * - Parameters:\n     *   - locale: The locale whose `regionCode` property is used to determine\n     *             the appropriate postal code validation rules.\n     */\n    public convenience init?(locale: Locale) {\n        guard let regionCode = locale.regionCode else { return nil }\n\n        self.init(regionCode: regionCode)\n    }\n\n    /**\n     * Returns whether a postal code is valid for the configured region.\n     *\n     * - Parameters:\n     *   - postalCode: The postal code.\n     * - Returns: `true` if valid, otherwise `false`.\n     */\n    public func validate(postalCode: String) -> Bool {\n        return regularExpression.rangeOfFirstMatch(in: postalCode, options: [], range: NSRange(postalCode.startIndex..<postalCode.endIndex, in: postalCode)).location != NSNotFound\n    }\n}\n"
  },
  {
    "path": "Sources/PostalCodeValidator/PostalCodeValidator.swift.gyb",
    "content": "% warning = \"This file was automatically generated and should not be edited.\"\n// ${warning}\nimport Foundation\n\n%{\n# encoding=utf8\nimport os\nimport sys\nimport json\nreload(sys)\nsys.setdefaultencoding('utf8')\n}%\n% with open(os.getcwd() + \"/../../Resources/postalData.json\") as file:\n    %{ data = json.load(file) }%\n/// A validator for postal codes.\npublic final class PostalCodeValidator {\n    /**\n     * A set of available region codes.\n     *\n     * Each element of the returned set is an two-letter\n     * ISO 3166-2 region code\n     * (for example, \"US\" for the United States of America).\n    */\n    public class var isoRegionCodes: Set<String> {\n        return Set(patternsByRegion.keys)\n    }\n\n    private static let patternsByRegion: [String: String] = [\n    % for region in data:\n        % if region:\n            %{\n               try:\n                  code = region['key']\n                  pattern = region['zip']\n               except KeyError:\n                  pass }%\n        \"${code}\": #\"${pattern}\"#,\n        % end\n    % end\n% end\n    ]\n\n    /**\n     *  The two-letter ISO 3166-2 region code\n     *  (for example, \"US\" for the United States of America).\n     */\n    var regionCode: String\n\n    private var regularExpression: NSRegularExpression\n\n    /**\n     * Creates a postal code validator for the specified region.\n     *\n     * Returns `nil` if the region isn't supported.\n     *\n     * - Parameters:\n     *   - region: A two-letter ISO 3166-2 region code\n     *             (for example, \"US\" for the United States of America).\n     */\n    public init?(regionCode: String) {\n        guard let pattern = PostalCodeValidator.patternsByRegion[regionCode],\n            let regex = try? NSRegularExpression(pattern: #\"\\A\\#(pattern)\\Z\"#, options: [])\n        else { return nil }\n\n        self.regionCode = regionCode\n        self.regularExpression = regex\n    }\n\n    /**\n     * Creates a postal code validator for the region of the specified locale.\n     *\n     * Returns `nil` if the locale doesn't have a valid region,\n     * or the region isn't supported.\n     *\n     * - Parameters:\n     *   - locale: The locale whose `regionCode` property is used to determine\n     *             the appropriate postal code validation rules.\n     */\n    public convenience init?(locale: Locale) {\n        guard let regionCode = locale.regionCode else { return nil }\n\n        self.init(regionCode: regionCode)\n    }\n\n    /**\n     * Returns whether a postal code is valid for the configured region.\n     *\n     * - Parameters:\n     *   - postalCode: The postal code.\n     * - Returns: `true` if valid, otherwise `false`.\n     */\n    public func validate(postalCode: String) -> Bool {\n        return regularExpression.rangeOfFirstMatch(in: postalCode, options: [], range: NSRange(postalCode.startIndex..<postalCode.endIndex, in: postalCode)).location != NSNotFound\n    }\n}\n"
  },
  {
    "path": "Tests/LinuxMain.swift",
    "content": "import XCTest\n\nimport PostalCodeValidatorTests\n\nvar tests = [XCTestCaseEntry]()\ntests += PostalCodeValidatorTests.allTests()\nXCTMain(tests)\n"
  },
  {
    "path": "Tests/PostalCodeValidatorTests/PostalCodeValidatorTests.swift",
    "content": "// This file was automatically generated and should not be edited.\nimport Foundation\n@testable import PostalCodeValidator\nimport XCTest\n\nfinal class PostalCodeValidatorTests: XCTestCase {\n    func testValidateACPostalCode() { // ASCENSION ISLAND\n        let locale = Locale(identifier: \"und-AC\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"ASCN 1ZZ\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateADPostalCode() { // ANDORRA\n        let locale = Locale(identifier: \"und-AD\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"AD100\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"AD501\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"AD700\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateAEPostalCode() { // UNITED ARAB EMIRATES\n        let locale = Locale(identifier: \"und-AE\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateAFPostalCode() { // AFGHANISTAN\n        let locale = Locale(identifier: \"und-AF\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"1001\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"2601\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"3801\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateAGPostalCode() { // ANTIGUA AND BARBUDA\n        let locale = Locale(identifier: \"und-AG\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateAIPostalCode() { // ANGUILLA\n        let locale = Locale(identifier: \"und-AI\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"2640\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateALPostalCode() { // ALBANIA\n        let locale = Locale(identifier: \"und-AL\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"1001\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"1017\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"3501\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateAMPostalCode() { // ARMENIA\n        let locale = Locale(identifier: \"und-AM\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"375010\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"0002\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"0010\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateAOPostalCode() { // ANGOLA\n        let locale = Locale(identifier: \"und-AO\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateAQPostalCode() { // ANTARCTICA\n        let locale = Locale(identifier: \"und-AQ\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateARPostalCode() { // ARGENTINA\n        let locale = Locale(identifier: \"und-AR\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"C1070AAM\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"C1000WAM\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"B1000TBU\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"X5187XAB\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateASPostalCode() { // AMERICAN SAMOA\n        let locale = Locale(identifier: \"und-AS\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"96799\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateATPostalCode() { // AUSTRIA\n        let locale = Locale(identifier: \"und-AT\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"1010\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"3741\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateAUPostalCode() { // AUSTRALIA\n        let locale = Locale(identifier: \"und-AU\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"2060\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"3171\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"6430\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"4000\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"4006\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"3001\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateAWPostalCode() { // ARUBA\n        let locale = Locale(identifier: \"und-AW\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateAXPostalCode() { // FINLAND\n        let locale = Locale(identifier: \"und-AX\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"22150\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"22550\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"22240\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"22710\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"22270\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"22730\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"22430\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateAZPostalCode() { // AZERBAIJAN\n        let locale = Locale(identifier: \"und-AZ\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"1000\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateBAPostalCode() { // BOSNIA AND HERZEGOVINA\n        let locale = Locale(identifier: \"und-BA\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"71000\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateBBPostalCode() { // BARBADOS\n        let locale = Locale(identifier: \"und-BB\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"BB23026\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"BB22025\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateBDPostalCode() { // BANGLADESH\n        let locale = Locale(identifier: \"und-BD\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"1340\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"1000\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateBEPostalCode() { // BELGIUM\n        let locale = Locale(identifier: \"und-BE\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"4000\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"1000\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateBFPostalCode() { // BURKINA FASO\n        let locale = Locale(identifier: \"und-BF\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateBGPostalCode() { // BULGARIA (REP.)\n        let locale = Locale(identifier: \"und-BG\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"1000\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"1700\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateBHPostalCode() { // BAHRAIN\n        let locale = Locale(identifier: \"und-BH\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"317\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateBIPostalCode() { // BURUNDI\n        let locale = Locale(identifier: \"und-BI\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateBJPostalCode() { // BENIN\n        let locale = Locale(identifier: \"und-BJ\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateBLPostalCode() { // SAINT BARTHELEMY\n        let locale = Locale(identifier: \"und-BL\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"97100\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateBMPostalCode() { // BERMUDA\n        let locale = Locale(identifier: \"und-BM\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"FL 07\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"HM GX\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"HM 12\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateBNPostalCode() { // BRUNEI DARUSSALAM\n        let locale = Locale(identifier: \"und-BN\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"BT2328\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"KA1131\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"BA1511\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateBOPostalCode() { // BOLIVIA\n        let locale = Locale(identifier: \"und-BO\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateBQPostalCode() { // BONAIRE, SINT EUSTATIUS, AND SABA\n        let locale = Locale(identifier: \"und-BQ\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateBRPostalCode() { // BRAZIL\n        let locale = Locale(identifier: \"und-BR\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"40301-110\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"70002-900\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateBSPostalCode() { // BAHAMAS\n        let locale = Locale(identifier: \"und-BS\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateBTPostalCode() { // BHUTAN\n        let locale = Locale(identifier: \"und-BT\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"11001\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"31101\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"35003\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateBVPostalCode() { // BOUVET ISLAND\n        let locale = Locale(identifier: \"und-BV\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateBWPostalCode() { // BOTSWANA\n        let locale = Locale(identifier: \"und-BW\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateBYPostalCode() { // BELARUS\n        let locale = Locale(identifier: \"und-BY\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"223016\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"225860\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"220050\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateBZPostalCode() { // BELIZE\n        let locale = Locale(identifier: \"und-BZ\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateCAPostalCode() { // CANADA\n        let locale = Locale(identifier: \"und-CA\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"H3Z 2Y7\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"V8X 3X4\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"T0L 1K0\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"T0H 1A0\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"K1A 0B1\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateCCPostalCode() { // COCOS (KEELING) ISLANDS\n        let locale = Locale(identifier: \"und-CC\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"6799\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateCDPostalCode() { // CONGO (DEM. REP.)\n        let locale = Locale(identifier: \"und-CD\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateCFPostalCode() { // CENTRAL AFRICAN REPUBLIC\n        let locale = Locale(identifier: \"und-CF\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateCGPostalCode() { // CONGO (REP.)\n        let locale = Locale(identifier: \"und-CG\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateCHPostalCode() { // SWITZERLAND\n        let locale = Locale(identifier: \"und-CH\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"2544\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"1211\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"1556\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"3030\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateCIPostalCode() { // COTE D'IVOIRE\n        let locale = Locale(identifier: \"und-CI\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateCKPostalCode() { // COOK ISLANDS\n        let locale = Locale(identifier: \"und-CK\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateCLPostalCode() { // CHILE\n        let locale = Locale(identifier: \"und-CL\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"8340457\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"8720019\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"1230000\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"8329100\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateCMPostalCode() { // CAMEROON\n        let locale = Locale(identifier: \"und-CM\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateCNPostalCode() { // CHINA\n        let locale = Locale(identifier: \"und-CN\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"266033\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"317204\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"100096\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"100808\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateCOPostalCode() { // COLOMBIA\n        let locale = Locale(identifier: \"und-CO\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"111221\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"130001\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"760011\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateCRPostalCode() { // COSTA RICA\n        let locale = Locale(identifier: \"und-CR\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"1000\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"2010\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"1001\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateCVPostalCode() { // CAPE VERDE\n        let locale = Locale(identifier: \"und-CV\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"7600\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateCWPostalCode() { // CURACAO\n        let locale = Locale(identifier: \"und-CW\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateCXPostalCode() { // CHRISTMAS ISLAND\n        let locale = Locale(identifier: \"und-CX\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"6798\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateCYPostalCode() { // CYPRUS\n        let locale = Locale(identifier: \"und-CY\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"2008\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"3304\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"1900\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateCZPostalCode() { // CZECH REP.\n        let locale = Locale(identifier: \"und-CZ\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"100 00\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"251 66\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"530 87\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"110 00\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"225 99\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateDEPostalCode() { // GERMANY\n        let locale = Locale(identifier: \"und-DE\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"26133\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"53225\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateDJPostalCode() { // DJIBOUTI\n        let locale = Locale(identifier: \"und-DJ\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateDKPostalCode() { // DENMARK\n        let locale = Locale(identifier: \"und-DK\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"8660\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"1566\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateDMPostalCode() { // DOMINICA\n        let locale = Locale(identifier: \"und-DM\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateDOPostalCode() { // DOMINICAN REP.\n        let locale = Locale(identifier: \"und-DO\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"11903\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"10101\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateDZPostalCode() { // ALGERIA\n        let locale = Locale(identifier: \"und-DZ\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"40304\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"16027\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateECPostalCode() { // ECUADOR\n        let locale = Locale(identifier: \"und-EC\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"090105\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"092301\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateEEPostalCode() { // ESTONIA\n        let locale = Locale(identifier: \"und-EE\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"69501\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"11212\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateEGPostalCode() { // EGYPT\n        let locale = Locale(identifier: \"und-EG\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"12411\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"11599\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateEHPostalCode() { // WESTERN SAHARA\n        let locale = Locale(identifier: \"und-EH\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"70000\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"72000\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateERPostalCode() { // ERITREA\n        let locale = Locale(identifier: \"und-ER\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateESPostalCode() { // SPAIN\n        let locale = Locale(identifier: \"und-ES\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"28039\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"28300\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"28070\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateETPostalCode() { // ETHIOPIA\n        let locale = Locale(identifier: \"und-ET\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"1000\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateFIPostalCode() { // FINLAND\n        let locale = Locale(identifier: \"und-FI\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"00550\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"00011\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateFJPostalCode() { // FIJI\n        let locale = Locale(identifier: \"und-FJ\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateFKPostalCode() { // FALKLAND ISLANDS (MALVINAS)\n        let locale = Locale(identifier: \"und-FK\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"FIQQ 1ZZ\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateFMPostalCode() { // MICRONESIA (Federated State of)\n        let locale = Locale(identifier: \"und-FM\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"96941\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"96944\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateFOPostalCode() { // FAROE ISLANDS\n        let locale = Locale(identifier: \"und-FO\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"100\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateFRPostalCode() { // FRANCE\n        let locale = Locale(identifier: \"und-FR\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"33380\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"34092\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"33506\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateGAPostalCode() { // GABON\n        let locale = Locale(identifier: \"und-GA\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateGBPostalCode() { // UNITED KINGDOM\n        let locale = Locale(identifier: \"und-GB\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"EC1Y 8SY\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"GIR 0AA\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"M2 5BQ\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"M34 4AB\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"CR0 2YR\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"DN16 9AA\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"W1A 4ZZ\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"EC1A 1HQ\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"OX14 4PG\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"BS18 8HF\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"NR25 7HG\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"RH6 0NP\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"BH23 6AA\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"B6 5BA\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"SO23 9AP\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"PO1 3AX\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"BFPO 61\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateGDPostalCode() { // GRENADA (WEST INDIES)\n        let locale = Locale(identifier: \"und-GD\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateGEPostalCode() { // GEORGIA\n        let locale = Locale(identifier: \"und-GE\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"0101\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateGFPostalCode() { // FRENCH GUIANA\n        let locale = Locale(identifier: \"und-GF\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"97300\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateGGPostalCode() { // CHANNEL ISLANDS\n        let locale = Locale(identifier: \"und-GG\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"GY1 1AA\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"GY2 2BT\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateGHPostalCode() { // GHANA\n        let locale = Locale(identifier: \"und-GH\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateGIPostalCode() { // GIBRALTAR\n        let locale = Locale(identifier: \"und-GI\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"GX11 1AA\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateGLPostalCode() { // GREENLAND\n        let locale = Locale(identifier: \"und-GL\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"3900\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"3950\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"3911\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateGMPostalCode() { // GAMBIA\n        let locale = Locale(identifier: \"und-GM\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateGNPostalCode() { // GUINEA\n        let locale = Locale(identifier: \"und-GN\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"001\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"200\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"100\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateGPPostalCode() { // GUADELOUPE\n        let locale = Locale(identifier: \"und-GP\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"97100\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateGQPostalCode() { // EQUATORIAL GUINEA\n        let locale = Locale(identifier: \"und-GQ\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateGRPostalCode() { // GREECE\n        let locale = Locale(identifier: \"und-GR\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"151 24\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"151 10\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"101 88\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateGSPostalCode() { // SOUTH GEORGIA\n        let locale = Locale(identifier: \"und-GS\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"SIQQ 1ZZ\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateGTPostalCode() { // GUATEMALA\n        let locale = Locale(identifier: \"und-GT\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"09001\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"01501\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateGUPostalCode() { // GUAM\n        let locale = Locale(identifier: \"und-GU\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"96910\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"96931\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateGWPostalCode() { // GUINEA-BISSAU\n        let locale = Locale(identifier: \"und-GW\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"1000\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"1011\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateGYPostalCode() { // GUYANA\n        let locale = Locale(identifier: \"und-GY\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateHKPostalCode() { // HONG KONG\n        let locale = Locale(identifier: \"und-HK\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateHMPostalCode() { // HEARD AND MCDONALD ISLANDS\n        let locale = Locale(identifier: \"und-HM\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"7050\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateHNPostalCode() { // HONDURAS\n        let locale = Locale(identifier: \"und-HN\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"31301\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateHRPostalCode() { // CROATIA\n        let locale = Locale(identifier: \"und-HR\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"10000\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"21001\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"10002\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateHTPostalCode() { // HAITI\n        let locale = Locale(identifier: \"und-HT\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"6120\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"5310\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"6110\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"8510\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateHUPostalCode() { // HUNGARY (Rep.)\n        let locale = Locale(identifier: \"und-HU\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"1037\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"2380\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"1540\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateIDPostalCode() { // INDONESIA\n        let locale = Locale(identifier: \"und-ID\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"40115\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateIEPostalCode() { // IRELAND\n        let locale = Locale(identifier: \"und-IE\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"A65 F4E2\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateILPostalCode() { // ISRAEL\n        let locale = Locale(identifier: \"und-IL\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"9614303\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateIMPostalCode() { // ISLE OF MAN\n        let locale = Locale(identifier: \"und-IM\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"IM2 1AA\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"IM99 1PS\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateINPostalCode() { // INDIA\n        let locale = Locale(identifier: \"und-IN\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"110034\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"110001\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateIOPostalCode() { // BRITISH INDIAN OCEAN TERRITORY\n        let locale = Locale(identifier: \"und-IO\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"BBND 1ZZ\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateIQPostalCode() { // IRAQ\n        let locale = Locale(identifier: \"und-IQ\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"31001\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateIRPostalCode() { // IRAN\n        let locale = Locale(identifier: \"und-IR\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"11936-12345\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateISPostalCode() { // ICELAND\n        let locale = Locale(identifier: \"und-IS\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"320\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"121\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"220\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"110\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateITPostalCode() { // ITALY\n        let locale = Locale(identifier: \"und-IT\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"00144\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"47037\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"39049\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateJEPostalCode() { // CHANNEL ISLANDS\n        let locale = Locale(identifier: \"und-JE\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"JE1 1AA\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"JE2 2BT\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateJMPostalCode() { // JAMAICA\n        let locale = Locale(identifier: \"und-JM\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateJOPostalCode() { // JORDAN\n        let locale = Locale(identifier: \"und-JO\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"11937\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"11190\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateJPPostalCode() { // JAPAN\n        let locale = Locale(identifier: \"und-JP\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"154-0023\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"350-1106\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"951-8073\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"112-0001\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"208-0032\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"231-0012\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateKEPostalCode() { // KENYA\n        let locale = Locale(identifier: \"und-KE\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"20100\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"00100\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateKGPostalCode() { // KYRGYZSTAN\n        let locale = Locale(identifier: \"und-KG\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"720001\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateKHPostalCode() { // CAMBODIA\n        let locale = Locale(identifier: \"und-KH\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"12203\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"14206\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"12000\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateKIPostalCode() { // KIRIBATI\n        let locale = Locale(identifier: \"und-KI\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateKMPostalCode() { // COMOROS\n        let locale = Locale(identifier: \"und-KM\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateKNPostalCode() { // SAINT KITTS AND NEVIS\n        let locale = Locale(identifier: \"und-KN\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateKRPostalCode() { // SOUTH KOREA\n        let locale = Locale(identifier: \"und-KR\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"03051\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateKWPostalCode() { // KUWAIT\n        let locale = Locale(identifier: \"und-KW\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"54541\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"54551\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"54404\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"13009\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateKYPostalCode() { // CAYMAN ISLANDS\n        let locale = Locale(identifier: \"und-KY\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"KY1-1100\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"KY1-1702\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"KY2-2101\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateKZPostalCode() { // KAZAKHSTAN\n        let locale = Locale(identifier: \"und-KZ\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"040900\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"050012\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateLAPostalCode() { // LAO (PEOPLE'S DEM. REP.)\n        let locale = Locale(identifier: \"und-LA\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"01160\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"01000\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateLBPostalCode() { // LEBANON\n        let locale = Locale(identifier: \"und-LB\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"2038 3054\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"1107 2810\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"1000\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateLCPostalCode() { // SAINT LUCIA\n        let locale = Locale(identifier: \"und-LC\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateLIPostalCode() { // LIECHTENSTEIN\n        let locale = Locale(identifier: \"und-LI\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"9496\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"9491\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"9490\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"9485\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateLKPostalCode() { // SRI LANKA\n        let locale = Locale(identifier: \"und-LK\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"20000\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"00100\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateLRPostalCode() { // LIBERIA\n        let locale = Locale(identifier: \"und-LR\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"1000\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateLSPostalCode() { // LESOTHO\n        let locale = Locale(identifier: \"und-LS\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"100\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateLTPostalCode() { // LITHUANIA\n        let locale = Locale(identifier: \"und-LT\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"04340\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"03500\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateLUPostalCode() { // LUXEMBOURG\n        let locale = Locale(identifier: \"und-LU\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"4750\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"2998\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateLVPostalCode() { // LATVIA\n        let locale = Locale(identifier: \"und-LV\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"LV-1073\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"LV-1000\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateLYPostalCode() { // LIBYA\n        let locale = Locale(identifier: \"und-LY\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateMAPostalCode() { // MOROCCO\n        let locale = Locale(identifier: \"und-MA\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"53000\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"10000\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"20050\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"16052\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateMCPostalCode() { // MONACO\n        let locale = Locale(identifier: \"und-MC\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"98000\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"98020\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"98011\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"98001\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateMDPostalCode() { // Rep. MOLDOVA\n        let locale = Locale(identifier: \"und-MD\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"2012\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"2019\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateMEPostalCode() { // MONTENEGRO\n        let locale = Locale(identifier: \"und-ME\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"81257\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"81258\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"81217\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"84314\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"85366\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateMFPostalCode() { // SAINT MARTIN\n        let locale = Locale(identifier: \"und-MF\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"97100\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateMGPostalCode() { // MADAGASCAR\n        let locale = Locale(identifier: \"und-MG\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"501\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"101\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateMHPostalCode() { // MARSHALL ISLANDS\n        let locale = Locale(identifier: \"und-MH\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"96960\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"96970\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateMKPostalCode() { // MACEDONIA\n        let locale = Locale(identifier: \"und-MK\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"1314\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"1321\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"1443\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"1062\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateMLPostalCode() { // MALI\n        let locale = Locale(identifier: \"und-ML\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateMMPostalCode() { // MYANMAR\n        let locale = Locale(identifier: \"und-MM\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"11181\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateMNPostalCode() { // MONGOLIA\n        let locale = Locale(identifier: \"und-MN\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"65030\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"65270\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateMOPostalCode() { // MACAO\n        let locale = Locale(identifier: \"und-MO\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateMPPostalCode() { // NORTHERN MARIANA ISLANDS\n        let locale = Locale(identifier: \"und-MP\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"96950\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"96951\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"96952\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateMQPostalCode() { // MARTINIQUE\n        let locale = Locale(identifier: \"und-MQ\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"97220\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateMRPostalCode() { // MAURITANIA\n        let locale = Locale(identifier: \"und-MR\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateMSPostalCode() { // MONTSERRAT\n        let locale = Locale(identifier: \"und-MS\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateMTPostalCode() { // MALTA\n        let locale = Locale(identifier: \"und-MT\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"NXR 01\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"ZTN 05\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"GPO 01\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"BZN 1130\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"SPB 6031\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"VCT 1753\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateMUPostalCode() { // MAURITIUS\n        let locale = Locale(identifier: \"und-MU\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"42602\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateMVPostalCode() { // MALDIVES\n        let locale = Locale(identifier: \"und-MV\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"20026\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateMWPostalCode() { // MALAWI\n        let locale = Locale(identifier: \"und-MW\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateMXPostalCode() { // MEXICO\n        let locale = Locale(identifier: \"und-MX\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"02860\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"77520\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"06082\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateMYPostalCode() { // MALAYSIA\n        let locale = Locale(identifier: \"und-MY\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"43000\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"50754\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"88990\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"50670\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateMZPostalCode() { // MOZAMBIQUE\n        let locale = Locale(identifier: \"und-MZ\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"1102\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"1119\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"3212\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateNAPostalCode() { // NAMIBIA\n        let locale = Locale(identifier: \"und-NA\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateNCPostalCode() { // NEW CALEDONIA\n        let locale = Locale(identifier: \"und-NC\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"98814\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"98800\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"98810\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateNEPostalCode() { // NIGER\n        let locale = Locale(identifier: \"und-NE\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"8001\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateNFPostalCode() { // NORFOLK ISLAND\n        let locale = Locale(identifier: \"und-NF\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"2899\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateNGPostalCode() { // NIGERIA\n        let locale = Locale(identifier: \"und-NG\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"930283\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"300001\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"931104\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateNIPostalCode() { // NICARAGUA\n        let locale = Locale(identifier: \"und-NI\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"52000\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateNLPostalCode() { // NETHERLANDS\n        let locale = Locale(identifier: \"und-NL\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"1234 AB\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"2490 AA\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateNOPostalCode() { // NORWAY\n        let locale = Locale(identifier: \"und-NO\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"0025\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"0107\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"6631\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateNPPostalCode() { // NEPAL\n        let locale = Locale(identifier: \"und-NP\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"44601\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateNRPostalCode() { // NAURU CENTRAL PACIFIC\n        let locale = Locale(identifier: \"und-NR\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateNUPostalCode() { // NIUE\n        let locale = Locale(identifier: \"und-NU\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateNZPostalCode() { // NEW ZEALAND\n        let locale = Locale(identifier: \"und-NZ\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"6001\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"6015\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"6332\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"8252\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"1030\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateOMPostalCode() { // OMAN\n        let locale = Locale(identifier: \"und-OM\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"133\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"112\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"111\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidatePAPostalCode() { // PANAMA (REP.)\n        let locale = Locale(identifier: \"und-PA\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidatePEPostalCode() { // PERU\n        let locale = Locale(identifier: \"und-PE\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"LIMA 23\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"LIMA 42\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"CALLAO 2\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"02001\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidatePFPostalCode() { // FRENCH POLYNESIA\n        let locale = Locale(identifier: \"und-PF\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"98709\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidatePGPostalCode() { // PAPUA NEW GUINEA\n        let locale = Locale(identifier: \"und-PG\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"111\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidatePHPostalCode() { // PHILIPPINES\n        let locale = Locale(identifier: \"und-PH\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"1008\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"1050\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"1135\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"1207\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"2000\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"1000\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidatePKPostalCode() { // PAKISTAN\n        let locale = Locale(identifier: \"und-PK\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"44000\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidatePLPostalCode() { // POLAND\n        let locale = Locale(identifier: \"und-PL\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"00-950\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"05-470\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"48-300\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"32-015\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"00-940\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidatePMPostalCode() { // ST. PIERRE AND MIQUELON\n        let locale = Locale(identifier: \"und-PM\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"97500\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidatePNPostalCode() { // PITCAIRN\n        let locale = Locale(identifier: \"und-PN\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"PCRN 1ZZ\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidatePRPostalCode() { // PUERTO RICO\n        let locale = Locale(identifier: \"und-PR\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"00930\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidatePSPostalCode() { // PALESTINIAN TERRITORY\n        let locale = Locale(identifier: \"und-PS\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidatePTPostalCode() { // PORTUGAL\n        let locale = Locale(identifier: \"und-PT\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"2725-079\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"1250-096\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"1201-950\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"2860-571\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"1208-148\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidatePWPostalCode() { // PALAU\n        let locale = Locale(identifier: \"und-PW\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"96940\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidatePYPostalCode() { // PARAGUAY\n        let locale = Locale(identifier: \"und-PY\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"1536\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"1538\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"1209\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateQAPostalCode() { // QATAR\n        let locale = Locale(identifier: \"und-QA\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateREPostalCode() { // REUNION\n        let locale = Locale(identifier: \"und-RE\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"97400\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateROPostalCode() { // ROMANIA\n        let locale = Locale(identifier: \"und-RO\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"060274\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"061357\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"200716\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateRSPostalCode() { // REPUBLIC OF SERBIA\n        let locale = Locale(identifier: \"und-RS\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"106314\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateRUPostalCode() { // RUSSIAN FEDERATION\n        let locale = Locale(identifier: \"und-RU\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"247112\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"103375\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"188300\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateRWPostalCode() { // RWANDA\n        let locale = Locale(identifier: \"und-RW\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateSAPostalCode() { // SAUDI ARABIA\n        let locale = Locale(identifier: \"und-SA\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"11564\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"11187\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"11142\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateSBPostalCode() { // SOLOMON ISLANDS\n        let locale = Locale(identifier: \"und-SB\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateSCPostalCode() { // SEYCHELLES\n        let locale = Locale(identifier: \"und-SC\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateSEPostalCode() { // SWEDEN\n        let locale = Locale(identifier: \"und-SE\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"11455\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"12345\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"10500\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateSGPostalCode() { // REP. OF SINGAPORE\n        let locale = Locale(identifier: \"und-SG\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"546080\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"308125\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"408600\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateSHPostalCode() { // SAINT HELENA\n        let locale = Locale(identifier: \"und-SH\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"STHL 1ZZ\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateSIPostalCode() { // SLOVENIA\n        let locale = Locale(identifier: \"und-SI\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"4000\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"1001\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"2500\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateSJPostalCode() { // SVALBARD AND JAN MAYEN ISLANDS\n        let locale = Locale(identifier: \"und-SJ\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"9170\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateSKPostalCode() { // SLOVAKIA\n        let locale = Locale(identifier: \"und-SK\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"010 01\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"023 14\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"972 48\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"921 01\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"975 99\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateSLPostalCode() { // SIERRA LEONE\n        let locale = Locale(identifier: \"und-SL\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateSMPostalCode() { // SAN MARINO\n        let locale = Locale(identifier: \"und-SM\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"47890\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"47891\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"47895\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"47899\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateSNPostalCode() { // SENEGAL\n        let locale = Locale(identifier: \"und-SN\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"12500\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"46024\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"16556\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"10000\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateSOPostalCode() { // SOMALIA\n        let locale = Locale(identifier: \"und-SO\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"JH 09010\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"AD 11010\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateSRPostalCode() { // SURINAME\n        let locale = Locale(identifier: \"und-SR\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateSSPostalCode() { // SOUTH SUDAN\n        let locale = Locale(identifier: \"und-SS\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateSTPostalCode() { // SAO TOME AND PRINCIPE\n        let locale = Locale(identifier: \"und-ST\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateSVPostalCode() { // EL SALVADOR\n        let locale = Locale(identifier: \"und-SV\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"CP 1101\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateSXPostalCode() { // SINT MAARTEN\n        let locale = Locale(identifier: \"und-SX\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateSZPostalCode() { // SWAZILAND\n        let locale = Locale(identifier: \"und-SZ\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"H100\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateTAPostalCode() { // TRISTAN DA CUNHA\n        let locale = Locale(identifier: \"und-TA\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"TDCU 1ZZ\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateTCPostalCode() { // TURKS AND CAICOS ISLANDS\n        let locale = Locale(identifier: \"und-TC\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"TKCA 1ZZ\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateTDPostalCode() { // CHAD\n        let locale = Locale(identifier: \"und-TD\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateTFPostalCode() { // FRENCH SOUTHERN TERRITORIES\n        let locale = Locale(identifier: \"und-TF\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateTGPostalCode() { // TOGO\n        let locale = Locale(identifier: \"und-TG\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateTHPostalCode() { // THAILAND\n        let locale = Locale(identifier: \"und-TH\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"10150\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"10210\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateTJPostalCode() { // TAJIKISTAN\n        let locale = Locale(identifier: \"und-TJ\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"735450\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"734025\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateTKPostalCode() { // TOKELAU\n        let locale = Locale(identifier: \"und-TK\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateTLPostalCode() { // TIMOR-LESTE\n        let locale = Locale(identifier: \"und-TL\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateTMPostalCode() { // TURKMENISTAN\n        let locale = Locale(identifier: \"und-TM\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"744000\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateTNPostalCode() { // TUNISIA\n        let locale = Locale(identifier: \"und-TN\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"1002\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"8129\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"3100\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"1030\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateTOPostalCode() { // TONGA\n        let locale = Locale(identifier: \"und-TO\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateTRPostalCode() { // TURKEY\n        let locale = Locale(identifier: \"und-TR\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"01960\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"06101\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateTTPostalCode() { // TRINIDAD AND TOBAGO\n        let locale = Locale(identifier: \"und-TT\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateTVPostalCode() { // TUVALU\n        let locale = Locale(identifier: \"und-TV\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateTWPostalCode() { // TAIWAN\n        let locale = Locale(identifier: \"und-TW\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"104\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"106\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"10603\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"40867\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateTZPostalCode() { // TANZANIA (UNITED REP.)\n        let locale = Locale(identifier: \"und-TZ\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"6090\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"34413\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateUAPostalCode() { // UKRAINE\n        let locale = Locale(identifier: \"und-UA\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"15432\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"01055\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"01001\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateUGPostalCode() { // UGANDA\n        let locale = Locale(identifier: \"und-UG\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateUMPostalCode() { // UNITED STATES MINOR OUTLYING ISLANDS\n        let locale = Locale(identifier: \"und-UM\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"96898\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateUSPostalCode() { // UNITED STATES\n        let locale = Locale(identifier: \"und-US\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"95014\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"22162-1010\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateUYPostalCode() { // URUGUAY\n        let locale = Locale(identifier: \"und-UY\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"11600\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateUZPostalCode() { // UZBEKISTAN\n        let locale = Locale(identifier: \"und-UZ\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"702100\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"700000\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateVAPostalCode() { // VATICAN\n        let locale = Locale(identifier: \"und-VA\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"00120\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateVCPostalCode() { // SAINT VINCENT AND THE GRENADINES (ANTILLES)\n        let locale = Locale(identifier: \"und-VC\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"VC0100\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"VC0110\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"VC0400\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateVEPostalCode() { // VENEZUELA\n        let locale = Locale(identifier: \"und-VE\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"1010\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"3001\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"8011\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"1020\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateVGPostalCode() { // VIRGIN ISLANDS (BRITISH)\n        let locale = Locale(identifier: \"und-VG\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"VG1110\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"VG1150\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"VG1160\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateVIPostalCode() { // VIRGIN ISLANDS (U.S.)\n        let locale = Locale(identifier: \"und-VI\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"00802-1222\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"00850-9802\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateVNPostalCode() { // VIET NAM\n        let locale = Locale(identifier: \"und-VN\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"119415\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"136065\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"720344\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateVUPostalCode() { // VANUATU\n        let locale = Locale(identifier: \"und-VU\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateWFPostalCode() { // WALLIS AND FUTUNA ISLANDS\n        let locale = Locale(identifier: \"und-WF\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"98600\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateWSPostalCode() { // SAMOA\n        let locale = Locale(identifier: \"und-WS\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateXKPostalCode() { // KOSOVO\n        let locale = Locale(identifier: \"und-XK\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"10000\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateYEPostalCode() { // YEMEN\n        let locale = Locale(identifier: \"und-YE\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateYTPostalCode() { // MAYOTTE\n        let locale = Locale(identifier: \"und-YT\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"97600\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateZAPostalCode() { // SOUTH AFRICA\n        let locale = Locale(identifier: \"und-ZA\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"0083\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"1451\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"0001\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateZMPostalCode() { // ZAMBIA\n        let locale = Locale(identifier: \"und-ZM\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        XCTAssertTrue(validator!.validate(postalCode: #\"50100\"#))\n        XCTAssertTrue(validator!.validate(postalCode: #\"50101\"#))\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    func testValidateZWPostalCode() { // ZIMBABWE\n        let locale = Locale(identifier: \"und-ZW\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n    static var allTests = [\n        (\"testValidateACPostalCode\", testValidateACPostalCode),\n        (\"testValidateADPostalCode\", testValidateADPostalCode),\n        (\"testValidateAEPostalCode\", testValidateAEPostalCode),\n        (\"testValidateAFPostalCode\", testValidateAFPostalCode),\n        (\"testValidateAGPostalCode\", testValidateAGPostalCode),\n        (\"testValidateAIPostalCode\", testValidateAIPostalCode),\n        (\"testValidateALPostalCode\", testValidateALPostalCode),\n        (\"testValidateAMPostalCode\", testValidateAMPostalCode),\n        (\"testValidateAOPostalCode\", testValidateAOPostalCode),\n        (\"testValidateAQPostalCode\", testValidateAQPostalCode),\n        (\"testValidateARPostalCode\", testValidateARPostalCode),\n        (\"testValidateASPostalCode\", testValidateASPostalCode),\n        (\"testValidateATPostalCode\", testValidateATPostalCode),\n        (\"testValidateAUPostalCode\", testValidateAUPostalCode),\n        (\"testValidateAWPostalCode\", testValidateAWPostalCode),\n        (\"testValidateAXPostalCode\", testValidateAXPostalCode),\n        (\"testValidateAZPostalCode\", testValidateAZPostalCode),\n        (\"testValidateBAPostalCode\", testValidateBAPostalCode),\n        (\"testValidateBBPostalCode\", testValidateBBPostalCode),\n        (\"testValidateBDPostalCode\", testValidateBDPostalCode),\n        (\"testValidateBEPostalCode\", testValidateBEPostalCode),\n        (\"testValidateBFPostalCode\", testValidateBFPostalCode),\n        (\"testValidateBGPostalCode\", testValidateBGPostalCode),\n        (\"testValidateBHPostalCode\", testValidateBHPostalCode),\n        (\"testValidateBIPostalCode\", testValidateBIPostalCode),\n        (\"testValidateBJPostalCode\", testValidateBJPostalCode),\n        (\"testValidateBLPostalCode\", testValidateBLPostalCode),\n        (\"testValidateBMPostalCode\", testValidateBMPostalCode),\n        (\"testValidateBNPostalCode\", testValidateBNPostalCode),\n        (\"testValidateBOPostalCode\", testValidateBOPostalCode),\n        (\"testValidateBQPostalCode\", testValidateBQPostalCode),\n        (\"testValidateBRPostalCode\", testValidateBRPostalCode),\n        (\"testValidateBSPostalCode\", testValidateBSPostalCode),\n        (\"testValidateBTPostalCode\", testValidateBTPostalCode),\n        (\"testValidateBVPostalCode\", testValidateBVPostalCode),\n        (\"testValidateBWPostalCode\", testValidateBWPostalCode),\n        (\"testValidateBYPostalCode\", testValidateBYPostalCode),\n        (\"testValidateBZPostalCode\", testValidateBZPostalCode),\n        (\"testValidateCAPostalCode\", testValidateCAPostalCode),\n        (\"testValidateCCPostalCode\", testValidateCCPostalCode),\n        (\"testValidateCDPostalCode\", testValidateCDPostalCode),\n        (\"testValidateCFPostalCode\", testValidateCFPostalCode),\n        (\"testValidateCGPostalCode\", testValidateCGPostalCode),\n        (\"testValidateCHPostalCode\", testValidateCHPostalCode),\n        (\"testValidateCIPostalCode\", testValidateCIPostalCode),\n        (\"testValidateCKPostalCode\", testValidateCKPostalCode),\n        (\"testValidateCLPostalCode\", testValidateCLPostalCode),\n        (\"testValidateCMPostalCode\", testValidateCMPostalCode),\n        (\"testValidateCNPostalCode\", testValidateCNPostalCode),\n        (\"testValidateCOPostalCode\", testValidateCOPostalCode),\n        (\"testValidateCRPostalCode\", testValidateCRPostalCode),\n        (\"testValidateCVPostalCode\", testValidateCVPostalCode),\n        (\"testValidateCWPostalCode\", testValidateCWPostalCode),\n        (\"testValidateCXPostalCode\", testValidateCXPostalCode),\n        (\"testValidateCYPostalCode\", testValidateCYPostalCode),\n        (\"testValidateCZPostalCode\", testValidateCZPostalCode),\n        (\"testValidateDEPostalCode\", testValidateDEPostalCode),\n        (\"testValidateDJPostalCode\", testValidateDJPostalCode),\n        (\"testValidateDKPostalCode\", testValidateDKPostalCode),\n        (\"testValidateDMPostalCode\", testValidateDMPostalCode),\n        (\"testValidateDOPostalCode\", testValidateDOPostalCode),\n        (\"testValidateDZPostalCode\", testValidateDZPostalCode),\n        (\"testValidateECPostalCode\", testValidateECPostalCode),\n        (\"testValidateEEPostalCode\", testValidateEEPostalCode),\n        (\"testValidateEGPostalCode\", testValidateEGPostalCode),\n        (\"testValidateEHPostalCode\", testValidateEHPostalCode),\n        (\"testValidateERPostalCode\", testValidateERPostalCode),\n        (\"testValidateESPostalCode\", testValidateESPostalCode),\n        (\"testValidateETPostalCode\", testValidateETPostalCode),\n        (\"testValidateFIPostalCode\", testValidateFIPostalCode),\n        (\"testValidateFJPostalCode\", testValidateFJPostalCode),\n        (\"testValidateFKPostalCode\", testValidateFKPostalCode),\n        (\"testValidateFMPostalCode\", testValidateFMPostalCode),\n        (\"testValidateFOPostalCode\", testValidateFOPostalCode),\n        (\"testValidateFRPostalCode\", testValidateFRPostalCode),\n        (\"testValidateGAPostalCode\", testValidateGAPostalCode),\n        (\"testValidateGBPostalCode\", testValidateGBPostalCode),\n        (\"testValidateGDPostalCode\", testValidateGDPostalCode),\n        (\"testValidateGEPostalCode\", testValidateGEPostalCode),\n        (\"testValidateGFPostalCode\", testValidateGFPostalCode),\n        (\"testValidateGGPostalCode\", testValidateGGPostalCode),\n        (\"testValidateGHPostalCode\", testValidateGHPostalCode),\n        (\"testValidateGIPostalCode\", testValidateGIPostalCode),\n        (\"testValidateGLPostalCode\", testValidateGLPostalCode),\n        (\"testValidateGMPostalCode\", testValidateGMPostalCode),\n        (\"testValidateGNPostalCode\", testValidateGNPostalCode),\n        (\"testValidateGPPostalCode\", testValidateGPPostalCode),\n        (\"testValidateGQPostalCode\", testValidateGQPostalCode),\n        (\"testValidateGRPostalCode\", testValidateGRPostalCode),\n        (\"testValidateGSPostalCode\", testValidateGSPostalCode),\n        (\"testValidateGTPostalCode\", testValidateGTPostalCode),\n        (\"testValidateGUPostalCode\", testValidateGUPostalCode),\n        (\"testValidateGWPostalCode\", testValidateGWPostalCode),\n        (\"testValidateGYPostalCode\", testValidateGYPostalCode),\n        (\"testValidateHKPostalCode\", testValidateHKPostalCode),\n        (\"testValidateHMPostalCode\", testValidateHMPostalCode),\n        (\"testValidateHNPostalCode\", testValidateHNPostalCode),\n        (\"testValidateHRPostalCode\", testValidateHRPostalCode),\n        (\"testValidateHTPostalCode\", testValidateHTPostalCode),\n        (\"testValidateHUPostalCode\", testValidateHUPostalCode),\n        (\"testValidateIDPostalCode\", testValidateIDPostalCode),\n        (\"testValidateIEPostalCode\", testValidateIEPostalCode),\n        (\"testValidateILPostalCode\", testValidateILPostalCode),\n        (\"testValidateIMPostalCode\", testValidateIMPostalCode),\n        (\"testValidateINPostalCode\", testValidateINPostalCode),\n        (\"testValidateIOPostalCode\", testValidateIOPostalCode),\n        (\"testValidateIQPostalCode\", testValidateIQPostalCode),\n        (\"testValidateIRPostalCode\", testValidateIRPostalCode),\n        (\"testValidateISPostalCode\", testValidateISPostalCode),\n        (\"testValidateITPostalCode\", testValidateITPostalCode),\n        (\"testValidateJEPostalCode\", testValidateJEPostalCode),\n        (\"testValidateJMPostalCode\", testValidateJMPostalCode),\n        (\"testValidateJOPostalCode\", testValidateJOPostalCode),\n        (\"testValidateJPPostalCode\", testValidateJPPostalCode),\n        (\"testValidateKEPostalCode\", testValidateKEPostalCode),\n        (\"testValidateKGPostalCode\", testValidateKGPostalCode),\n        (\"testValidateKHPostalCode\", testValidateKHPostalCode),\n        (\"testValidateKIPostalCode\", testValidateKIPostalCode),\n        (\"testValidateKMPostalCode\", testValidateKMPostalCode),\n        (\"testValidateKNPostalCode\", testValidateKNPostalCode),\n        (\"testValidateKRPostalCode\", testValidateKRPostalCode),\n        (\"testValidateKWPostalCode\", testValidateKWPostalCode),\n        (\"testValidateKYPostalCode\", testValidateKYPostalCode),\n        (\"testValidateKZPostalCode\", testValidateKZPostalCode),\n        (\"testValidateLAPostalCode\", testValidateLAPostalCode),\n        (\"testValidateLBPostalCode\", testValidateLBPostalCode),\n        (\"testValidateLCPostalCode\", testValidateLCPostalCode),\n        (\"testValidateLIPostalCode\", testValidateLIPostalCode),\n        (\"testValidateLKPostalCode\", testValidateLKPostalCode),\n        (\"testValidateLRPostalCode\", testValidateLRPostalCode),\n        (\"testValidateLSPostalCode\", testValidateLSPostalCode),\n        (\"testValidateLTPostalCode\", testValidateLTPostalCode),\n        (\"testValidateLUPostalCode\", testValidateLUPostalCode),\n        (\"testValidateLVPostalCode\", testValidateLVPostalCode),\n        (\"testValidateLYPostalCode\", testValidateLYPostalCode),\n        (\"testValidateMAPostalCode\", testValidateMAPostalCode),\n        (\"testValidateMCPostalCode\", testValidateMCPostalCode),\n        (\"testValidateMDPostalCode\", testValidateMDPostalCode),\n        (\"testValidateMEPostalCode\", testValidateMEPostalCode),\n        (\"testValidateMFPostalCode\", testValidateMFPostalCode),\n        (\"testValidateMGPostalCode\", testValidateMGPostalCode),\n        (\"testValidateMHPostalCode\", testValidateMHPostalCode),\n        (\"testValidateMKPostalCode\", testValidateMKPostalCode),\n        (\"testValidateMLPostalCode\", testValidateMLPostalCode),\n        (\"testValidateMMPostalCode\", testValidateMMPostalCode),\n        (\"testValidateMNPostalCode\", testValidateMNPostalCode),\n        (\"testValidateMOPostalCode\", testValidateMOPostalCode),\n        (\"testValidateMPPostalCode\", testValidateMPPostalCode),\n        (\"testValidateMQPostalCode\", testValidateMQPostalCode),\n        (\"testValidateMRPostalCode\", testValidateMRPostalCode),\n        (\"testValidateMSPostalCode\", testValidateMSPostalCode),\n        (\"testValidateMTPostalCode\", testValidateMTPostalCode),\n        (\"testValidateMUPostalCode\", testValidateMUPostalCode),\n        (\"testValidateMVPostalCode\", testValidateMVPostalCode),\n        (\"testValidateMWPostalCode\", testValidateMWPostalCode),\n        (\"testValidateMXPostalCode\", testValidateMXPostalCode),\n        (\"testValidateMYPostalCode\", testValidateMYPostalCode),\n        (\"testValidateMZPostalCode\", testValidateMZPostalCode),\n        (\"testValidateNAPostalCode\", testValidateNAPostalCode),\n        (\"testValidateNCPostalCode\", testValidateNCPostalCode),\n        (\"testValidateNEPostalCode\", testValidateNEPostalCode),\n        (\"testValidateNFPostalCode\", testValidateNFPostalCode),\n        (\"testValidateNGPostalCode\", testValidateNGPostalCode),\n        (\"testValidateNIPostalCode\", testValidateNIPostalCode),\n        (\"testValidateNLPostalCode\", testValidateNLPostalCode),\n        (\"testValidateNOPostalCode\", testValidateNOPostalCode),\n        (\"testValidateNPPostalCode\", testValidateNPPostalCode),\n        (\"testValidateNRPostalCode\", testValidateNRPostalCode),\n        (\"testValidateNUPostalCode\", testValidateNUPostalCode),\n        (\"testValidateNZPostalCode\", testValidateNZPostalCode),\n        (\"testValidateOMPostalCode\", testValidateOMPostalCode),\n        (\"testValidatePAPostalCode\", testValidatePAPostalCode),\n        (\"testValidatePEPostalCode\", testValidatePEPostalCode),\n        (\"testValidatePFPostalCode\", testValidatePFPostalCode),\n        (\"testValidatePGPostalCode\", testValidatePGPostalCode),\n        (\"testValidatePHPostalCode\", testValidatePHPostalCode),\n        (\"testValidatePKPostalCode\", testValidatePKPostalCode),\n        (\"testValidatePLPostalCode\", testValidatePLPostalCode),\n        (\"testValidatePMPostalCode\", testValidatePMPostalCode),\n        (\"testValidatePNPostalCode\", testValidatePNPostalCode),\n        (\"testValidatePRPostalCode\", testValidatePRPostalCode),\n        (\"testValidatePSPostalCode\", testValidatePSPostalCode),\n        (\"testValidatePTPostalCode\", testValidatePTPostalCode),\n        (\"testValidatePWPostalCode\", testValidatePWPostalCode),\n        (\"testValidatePYPostalCode\", testValidatePYPostalCode),\n        (\"testValidateQAPostalCode\", testValidateQAPostalCode),\n        (\"testValidateREPostalCode\", testValidateREPostalCode),\n        (\"testValidateROPostalCode\", testValidateROPostalCode),\n        (\"testValidateRSPostalCode\", testValidateRSPostalCode),\n        (\"testValidateRUPostalCode\", testValidateRUPostalCode),\n        (\"testValidateRWPostalCode\", testValidateRWPostalCode),\n        (\"testValidateSAPostalCode\", testValidateSAPostalCode),\n        (\"testValidateSBPostalCode\", testValidateSBPostalCode),\n        (\"testValidateSCPostalCode\", testValidateSCPostalCode),\n        (\"testValidateSEPostalCode\", testValidateSEPostalCode),\n        (\"testValidateSGPostalCode\", testValidateSGPostalCode),\n        (\"testValidateSHPostalCode\", testValidateSHPostalCode),\n        (\"testValidateSIPostalCode\", testValidateSIPostalCode),\n        (\"testValidateSJPostalCode\", testValidateSJPostalCode),\n        (\"testValidateSKPostalCode\", testValidateSKPostalCode),\n        (\"testValidateSLPostalCode\", testValidateSLPostalCode),\n        (\"testValidateSMPostalCode\", testValidateSMPostalCode),\n        (\"testValidateSNPostalCode\", testValidateSNPostalCode),\n        (\"testValidateSOPostalCode\", testValidateSOPostalCode),\n        (\"testValidateSRPostalCode\", testValidateSRPostalCode),\n        (\"testValidateSSPostalCode\", testValidateSSPostalCode),\n        (\"testValidateSTPostalCode\", testValidateSTPostalCode),\n        (\"testValidateSVPostalCode\", testValidateSVPostalCode),\n        (\"testValidateSXPostalCode\", testValidateSXPostalCode),\n        (\"testValidateSZPostalCode\", testValidateSZPostalCode),\n        (\"testValidateTAPostalCode\", testValidateTAPostalCode),\n        (\"testValidateTCPostalCode\", testValidateTCPostalCode),\n        (\"testValidateTDPostalCode\", testValidateTDPostalCode),\n        (\"testValidateTFPostalCode\", testValidateTFPostalCode),\n        (\"testValidateTGPostalCode\", testValidateTGPostalCode),\n        (\"testValidateTHPostalCode\", testValidateTHPostalCode),\n        (\"testValidateTJPostalCode\", testValidateTJPostalCode),\n        (\"testValidateTKPostalCode\", testValidateTKPostalCode),\n        (\"testValidateTLPostalCode\", testValidateTLPostalCode),\n        (\"testValidateTMPostalCode\", testValidateTMPostalCode),\n        (\"testValidateTNPostalCode\", testValidateTNPostalCode),\n        (\"testValidateTOPostalCode\", testValidateTOPostalCode),\n        (\"testValidateTRPostalCode\", testValidateTRPostalCode),\n        (\"testValidateTTPostalCode\", testValidateTTPostalCode),\n        (\"testValidateTVPostalCode\", testValidateTVPostalCode),\n        (\"testValidateTWPostalCode\", testValidateTWPostalCode),\n        (\"testValidateTZPostalCode\", testValidateTZPostalCode),\n        (\"testValidateUAPostalCode\", testValidateUAPostalCode),\n        (\"testValidateUGPostalCode\", testValidateUGPostalCode),\n        (\"testValidateUMPostalCode\", testValidateUMPostalCode),\n        (\"testValidateUSPostalCode\", testValidateUSPostalCode),\n        (\"testValidateUYPostalCode\", testValidateUYPostalCode),\n        (\"testValidateUZPostalCode\", testValidateUZPostalCode),\n        (\"testValidateVAPostalCode\", testValidateVAPostalCode),\n        (\"testValidateVCPostalCode\", testValidateVCPostalCode),\n        (\"testValidateVEPostalCode\", testValidateVEPostalCode),\n        (\"testValidateVGPostalCode\", testValidateVGPostalCode),\n        (\"testValidateVIPostalCode\", testValidateVIPostalCode),\n        (\"testValidateVNPostalCode\", testValidateVNPostalCode),\n        (\"testValidateVUPostalCode\", testValidateVUPostalCode),\n        (\"testValidateWFPostalCode\", testValidateWFPostalCode),\n        (\"testValidateWSPostalCode\", testValidateWSPostalCode),\n        (\"testValidateXKPostalCode\", testValidateXKPostalCode),\n        (\"testValidateYEPostalCode\", testValidateYEPostalCode),\n        (\"testValidateYTPostalCode\", testValidateYTPostalCode),\n        (\"testValidateZAPostalCode\", testValidateZAPostalCode),\n        (\"testValidateZMPostalCode\", testValidateZMPostalCode),\n        (\"testValidateZWPostalCode\", testValidateZWPostalCode),\n    ]\n}\n"
  },
  {
    "path": "Tests/PostalCodeValidatorTests/PostalCodeValidatorTests.swift.gyb",
    "content": "% warning = \"This file was automatically generated and should not be edited.\"\n// ${warning}\nimport Foundation\n@testable import PostalCodeValidator\nimport XCTest\n\n%{\n# encoding=utf8\nimport os\nimport sys\nimport json\nreload(sys)\nsys.setdefaultencoding('utf8')\n}%\n%{ testNames = [] }%\n% with open(os.getcwd() + \"/../../Resources/postalData.json\") as file:\n    %{ data = json.load(file) }%\nfinal class PostalCodeValidatorTests: XCTestCase {\n    % for region in data:\n        % if region:\n            %{\n               try:\n                  name = region['name']\n                  code = region['key']\n\n                  testName = \"testValidate%sPostalCode\" % code\n                  testNames.append(testName)\n\n                  examples = []\n                  examples = region['zipex'].split(',')\n               except KeyError:\n                  pass }%\n    func ${testName}() { // ${name}\n        let locale = Locale(identifier: \"und-${code}\")\n        let validator = PostalCodeValidator(locale: locale)\n        XCTAssertNotNil(validator)\n\n        % for example in examples:\n        XCTAssertTrue(validator!.validate(postalCode: #\"${example}\"#))\n        % end\n\n        XCTAssertFalse(validator!.validate(postalCode:#\"XXXXXXXXXXX\"#))\n    }\n\n        % end\n    % end\n% end\n    static var allTests = [\n% for testName in testNames:\n        (\"${testName}\", ${testName}),\n% end\n    ]\n}\n"
  },
  {
    "path": "Tests/PostalCodeValidatorTests/XCTestManifests.swift",
    "content": "import XCTest\n\n#if !os(macOS)\n    public func allTests() -> [XCTestCaseEntry] {\n        return [\n            testCase(PostalCodeValidator.allTests),\n        ]\n    }\n#endif\n"
  }
]