SEQUENCE {
  [0] {
    SEQUENCE {
      [4] {
        SEQUENCE {
          SET {
            SEQUENCE {
              # countryName
              OBJECT_IDENTIFIER { 2.5.4.6 }
              PrintableString { "US" }
            }
          }
        }
      }
    }
    SEQUENCE {
      [4] {
        SEQUENCE {
          SET {
            SEQUENCE {
              # countryName
              OBJECT_IDENTIFIER { 2.5.4.6 }
              PrintableString { "US" }
            }
          }
          SET {
            SEQUENCE {
              # stateOrProvinceName
              OBJECT_IDENTIFIER { 2.5.4.8 }
              UTF8String { "California" }
            }
          }
          SET {
            SEQUENCE {
              # localityName
              OBJECT_IDENTIFIER { 2.5.4.7 }
              UTF8String { "Mountain View" }
            }
          }
        }
      }
    }
    SEQUENCE {
      [4] {
        SEQUENCE {
          SET {
            SEQUENCE {
              # countryName
              OBJECT_IDENTIFIER { 2.5.4.6 }
              PrintableString { "JP" }
            }
          }
          SET {
            SEQUENCE {
              # stateOrProvinceName
              OBJECT_IDENTIFIER { 2.5.4.8 }
              UTF8String { `e69db1e4baac` }
            }
          }
        }
      }
    }
    SEQUENCE {
      [2 PRIMITIVE] { "permitted.example.com" }
    }
    SEQUENCE {
      [2 PRIMITIVE] { "permitted.example2.com" }
    }
    SEQUENCE {
      [2 PRIMITIVE] { "permitted.example3.com." }
    }
    SEQUENCE {
      [2 PRIMITIVE] { "alsopermitted.example.com" }
    }
    SEQUENCE {
      [2 PRIMITIVE] { "stillnotpermitted.excluded.permitted.example.com" }
    }
  }
  [1] {
    SEQUENCE {
      [4] {
        SEQUENCE {
          SET {
            SEQUENCE {
              # countryName
              OBJECT_IDENTIFIER { 2.5.4.6 }
              PrintableString { "US" }
            }
          }
          SET {
            SEQUENCE {
              # stateOrProvinceName
              OBJECT_IDENTIFIER { 2.5.4.8 }
              UTF8String { "California" }
            }
          }
        }
      }
    }
    SEQUENCE {
      [4] {
        SEQUENCE {
          SET {
            SEQUENCE {
              # countryName
              OBJECT_IDENTIFIER { 2.5.4.6 }
              PrintableString { "DE" }
            }
          }
        }
      }
    }
    SEQUENCE {
      [2 PRIMITIVE] { "excluded.permitted.example.com" }
    }
    SEQUENCE {
      [2 PRIMITIVE] { "extraneousexclusion.example.com" }
    }
  }
}
-----BEGIN NAME CONSTRAINTS-----
MIIBnaCCARYwEaQPMA0xCzAJBgNVBAYTAlVTMD6kPDA6MQswCQYDVQQGEwJVUzETMBEGA1UECAwK
Q2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzAipCAwHjELMAkGA1UEBhMCSlAxDzAN
BgNVBAgMBuadseS6rDAXghVwZXJtaXR0ZWQuZXhhbXBsZS5jb20wGIIWcGVybWl0dGVkLmV4YW1w
bGUyLmNvbTAZghdwZXJtaXR0ZWQuZXhhbXBsZTMuY29tLjAbghlhbHNvcGVybWl0dGVkLmV4YW1w
bGUuY29tMDKCMHN0aWxsbm90cGVybWl0dGVkLmV4Y2x1ZGVkLnBlcm1pdHRlZC5leGFtcGxlLmNv
baGBgDAmpCQwIjELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWEwEaQPMA0xCzAJBgNV
BAYTAkRFMCCCHmV4Y2x1ZGVkLnBlcm1pdHRlZC5leGFtcGxlLmNvbTAhgh9leHRyYW5lb3VzZXhj
bHVzaW9uLmV4YW1wbGUuY29t
-----END NAME CONSTRAINTS-----
