{"version":3,"file":"validate-steuernummer.umd.cjs","sources":["../src/finanzamtnummern.ts","../src/index.ts"],"sourcesContent":["/**\n * List of all 610 (as of February 2nd 2026) Finanzämter in Germany.\n *\n * Obtained from XML download of \"GemFA 2.0\" available at:\n * https://www.bzst.de/DE/Service/Behoerdenwegweiser/Finanzamtsuche/finanzamtsuche.html\n */\nexport const FinanzamtNummern = new Set([\n  '1010',\n  '1020',\n  '1030',\n  '1040',\n  '1055',\n  '1060',\n  '1075',\n  '1085',\n  '1113',\n  '1114',\n  '1116',\n  '1117',\n  '1118',\n  '1119',\n  '1120',\n  '1121',\n  '1123',\n  '1124',\n  '1125',\n  '1127',\n  '1129',\n  '1130',\n  '1131',\n  '1132',\n  '1133',\n  '1134',\n  '1135',\n  '1136',\n  '1137',\n  '1138',\n  '1191',\n  '2111',\n  '2113',\n  '2115',\n  '2116',\n  '2117',\n  '2118',\n  '2120',\n  '2122',\n  '2124',\n  '2125',\n  '2126',\n  '2127',\n  '2128',\n  '2129',\n  '2130',\n  '2131',\n  '2137',\n  '2201',\n  '2210',\n  '2216',\n  '2217',\n  '2220',\n  '2227',\n  '2228',\n  '2230',\n  '2235',\n  '2241',\n  '2242',\n  '2243',\n  '2244',\n  '2245',\n  '2246',\n  '2247',\n  '2248',\n  '2249',\n  '2250',\n  '2251',\n  '2313',\n  '2314',\n  '2315',\n  '2316',\n  '2317',\n  '2318',\n  '2319',\n  '2320',\n  '2321',\n  '2322',\n  '2323',\n  '2324',\n  '2325',\n  '2326',\n  '2327',\n  '2328',\n  '2330',\n  '2333',\n  '2334',\n  '2335',\n  '2336',\n  '2338',\n  '2340',\n  '2341',\n  '2343',\n  '2344',\n  '2345',\n  '2346',\n  '2347',\n  '2348',\n  '2349',\n  '2350',\n  '2351',\n  '2352',\n  '2353',\n  '2354',\n  '2355',\n  '2356',\n  '2357',\n  '2358',\n  '2360',\n  '2361',\n  '2363',\n  '2364',\n  '2365',\n  '2366',\n  '2367',\n  '2368',\n  '2369',\n  '2370',\n  '2380',\n  '2381',\n  '2382',\n  '2384',\n  '2385',\n  '2386',\n  '2390',\n  '2391',\n  '2392',\n  '2393',\n  '2457',\n  '2460',\n  '2471',\n  '2475',\n  '2477',\n  '2478',\n  '2601',\n  '2602',\n  '2603',\n  '2604',\n  '2605',\n  '2606',\n  '2607',\n  '2608',\n  '2609',\n  '2610',\n  '2611',\n  '2614',\n  '2616',\n  '2618',\n  '2619',\n  '2620',\n  '2621',\n  '2622',\n  '2623',\n  '2624',\n  '2625',\n  '2626',\n  '2627',\n  '2628',\n  '2629',\n  '2630',\n  '2631',\n  '2632',\n  '2633',\n  '2634',\n  '2636',\n  '2637',\n  '2638',\n  '2639',\n  '2640',\n  '2641',\n  '2642',\n  '2644',\n  '2645',\n  '2646',\n  '2701',\n  '2702',\n  '2706',\n  '2708',\n  '2709',\n  '2710',\n  '2713',\n  '2719',\n  '2722',\n  '2723',\n  '2724',\n  '2726',\n  '2727',\n  '2729',\n  '2730',\n  '2731',\n  '2732',\n  '2734',\n  '2735',\n  '2740',\n  '2741',\n  '2742',\n  '2743',\n  '2744',\n  '2801',\n  '2804',\n  '2805',\n  '2806',\n  '2807',\n  '2808',\n  '2809',\n  '2810',\n  '2811',\n  '2812',\n  '2813',\n  '2814',\n  '2815',\n  '2816',\n  '2818',\n  '2819',\n  '2820',\n  '2821',\n  '2822',\n  '2823',\n  '2830',\n  '2831',\n  '2832',\n  '2833',\n  '2834',\n  '2835',\n  '2836',\n  '2837',\n  '2838',\n  '2839',\n  '2840',\n  '2841',\n  '2842',\n  '2843',\n  '2844',\n  '2845',\n  '2846',\n  '2847',\n  '2848',\n  '2849',\n  '2850',\n  '2851',\n  '2852',\n  '2853',\n  '2854',\n  '2855',\n  '2856',\n  '2857',\n  '2858',\n  '2859',\n  '2861',\n  '2862',\n  '2863',\n  '2864',\n  '2865',\n  '2869',\n  '2870',\n  '2871',\n  '2874',\n  '2876',\n  '2877',\n  '2878',\n  '2879',\n  '2880',\n  '2881',\n  '2882',\n  '2883',\n  '2884',\n  '2885',\n  '2886',\n  '2887',\n  '2888',\n  '2889',\n  '2890',\n  '2891',\n  '2892',\n  '2893',\n  '2895',\n  '2896',\n  '2897',\n  '2899',\n  '3046',\n  '3048',\n  '3049',\n  '3050',\n  '3051',\n  '3052',\n  '3053',\n  '3056',\n  '3057',\n  '3061',\n  '3062',\n  '3064',\n  '3065',\n  '3102',\n  '3103',\n  '3105',\n  '3106',\n  '3107',\n  '3108',\n  '3110',\n  '3112',\n  '3114',\n  '3115',\n  '3116',\n  '3117',\n  '3118',\n  '3119',\n  '3202',\n  '3203',\n  '3204',\n  '3207',\n  '3208',\n  '3209',\n  '3210',\n  '3213',\n  '3214',\n  '3215',\n  '3217',\n  '3218',\n  '3220',\n  '3222',\n  '3223',\n  '3224',\n  '3227',\n  '3228',\n  '3231',\n  '3232',\n  '3236',\n  '3237',\n  '3238',\n  '3239',\n  '4069',\n  '4070',\n  '4072',\n  '4075',\n  '4079',\n  '4080',\n  '4081',\n  '4082',\n  '4084',\n  '4086',\n  '4087',\n  '4090',\n  '4151',\n  '4154',\n  '4155',\n  '4156',\n  '4157',\n  '4159',\n  '4161',\n  '4162',\n  '4165',\n  '4166',\n  '4170',\n  '4171',\n  '5101',\n  '5102',\n  '5103',\n  '5105',\n  '5106',\n  '5107',\n  '5109',\n  '5111',\n  '5112',\n  '5113',\n  '5114',\n  '5115',\n  '5116',\n  '5117',\n  '5119',\n  '5120',\n  '5121',\n  '5122',\n  '5123',\n  '5124',\n  '5126',\n  '5128',\n  '5130',\n  '5131',\n  '5132',\n  '5133',\n  '5134',\n  '5135',\n  '5139',\n  '5147',\n  '5170',\n  '5171',\n  '5172',\n  '5173',\n  '5174',\n  '5176',\n  '5201',\n  '5202',\n  '5203',\n  '5204',\n  '5205',\n  '5206',\n  '5207',\n  '5208',\n  '5209',\n  '5210',\n  '5211',\n  '5212',\n  '5213',\n  '5214',\n  '5215',\n  '5216',\n  '5217',\n  '5218',\n  '5219',\n  '5220',\n  '5221',\n  '5222',\n  '5223',\n  '5224',\n  '5230',\n  '5270',\n  '5271',\n  '5272',\n  '5301',\n  '5302',\n  '5303',\n  '5304',\n  '5305',\n  '5306',\n  '5307',\n  '5308',\n  '5309',\n  '5310',\n  '5311',\n  '5312',\n  '5313',\n  '5314',\n  '5315',\n  '5316',\n  '5317',\n  '5319',\n  '5321',\n  '5322',\n  '5323',\n  '5324',\n  '5325',\n  '5326',\n  '5327',\n  '5328',\n  '5329',\n  '5330',\n  '5331',\n  '5332',\n  '5333',\n  '5334',\n  '5335',\n  '5336',\n  '5337',\n  '5338',\n  '5339',\n  '5340',\n  '5341',\n  '5342',\n  '5343',\n  '5345',\n  '5346',\n  '5347',\n  '5348',\n  '5349',\n  '5350',\n  '5351',\n  '5359',\n  '5371',\n  '5372',\n  '5373',\n  '5374',\n  '5375',\n  '5376',\n  '9101',\n  '9102',\n  '9103',\n  '9104',\n  '9105',\n  '9106',\n  '9107',\n  '9108',\n  '9109',\n  '9110',\n  '9111',\n  '9112',\n  '9113',\n  '9114',\n  '9115',\n  '9116',\n  '9117',\n  '9119',\n  '9121',\n  '9123',\n  '9124',\n  '9125',\n  '9126',\n  '9127',\n  '9131',\n  '9132',\n  '9134',\n  '9138',\n  '9139',\n  '9140',\n  '9141',\n  '9142',\n  '9143',\n  '9144',\n  '9145',\n  '9146',\n  '9147',\n  '9148',\n  '9149',\n  '9151',\n  '9152',\n  '9153',\n  '9154',\n  '9156',\n  '9157',\n  '9159',\n  '9161',\n  '9162',\n  '9163',\n  '9168',\n  '9169',\n  '9170',\n  '9171',\n  '9181',\n  '9182',\n  '9183',\n  '9184',\n  '9185',\n  '9187',\n  '9188',\n  '9189',\n  '9201',\n  '9202',\n  '9203',\n  '9204',\n  '9205',\n  '9206',\n  '9207',\n  '9208',\n  '9211',\n  '9212',\n  '9216',\n  '9217',\n  '9218',\n  '9220',\n  '9221',\n  '9222',\n  '9223',\n  '9227',\n  '9228',\n  '9229',\n  '9230',\n  '9231',\n  '9232',\n  '9235',\n  '9238',\n  '9240',\n  '9241',\n  '9244',\n  '9247',\n  '9248',\n  '9249',\n  '9252',\n  '9254',\n  '9255',\n  '9257',\n  '9258',\n  '9259',\n  '2171',\n  '2173',\n  '2175',\n  '2190',\n  '2184',\n  '2186',\n  '2189',\n  '2191',\n  '2187',\n  '2172',\n  '2183',\n  '2180',\n  '2188',\n  '2179',\n  '2182',\n  '2185',\n  '2176',\n  '2177',\n  '2178',\n  '2181',\n  '1115',\n  '5380',\n]);\n","import { FinanzamtNummern } from './finanzamtnummern';\n\nexport const defaultErrors = {\n  allowedCharactersError:\n    'Bitte nur Ziffern, \"-\", \"_\", \"/\" oder Leerzeichen verwenden',\n  tooShortError: 'Eine Steuernummer muss mindestens 10 Ziffern enthalten',\n  tooLongError: 'Eine Steuernummer darf maximal 13 Ziffern enthalten',\n  wrongLengthForState: 'Die Steuernummer hat die falsche Länge',\n  parseError: 'Die Steuernummer konnte nicht geparsed werden',\n  missingZeroError:\n    'Steuernummern zur elektronischen Übermittlung müssen an 5. Stelle eine \"0\" aufweisen',\n  unknownStatePrefixError:\n    'Die Steuernummer kann keinem Bundesland zugewiesen werden',\n  unknownFinanzamtError:\n    'Die Steuernummer kann keinem Finanzamt zugewiesen werden',\n  wrongStateError:\n    'Die Steuernummer entspricht nicht dem angegebenen Bundesland',\n  bezirksnummerError: 'Die Steuernummer enthält eine invalide Bezirksnummer',\n  pruefzifferError: 'Die Prüfziffer der Steuernummer stimmt nicht',\n  nwInternalConsistencyError:\n    'Die interne Konsistenz der Steuernummer ist nicht gegeben',\n  missingStateInformationError:\n    'Unzureichende Informationen über das zugehörige Bundesland',\n};\n\ntype ErrorMessages = typeof defaultErrors;\n\nexport type ISO3166_2Codes =\n  | 'DE-BW'\n  | 'DE-BY'\n  | 'DE-BE'\n  | 'DE-BB'\n  | 'DE-SN'\n  | 'DE-ST'\n  | 'DE-HB'\n  | 'DE-HH'\n  | 'DE-HE'\n  | 'DE-MV'\n  | 'DE-TH'\n  | 'DE-NI'\n  | 'DE-NW'\n  | 'DE-RP'\n  | 'DE-SL'\n  | 'DE-SH';\n\ntype ISO3166_2Codes_11erVerfahren =\n  | 'DE-BY'\n  | 'DE-BE-A'\n  | 'DE-BE-B'\n  | 'DE-BB'\n  | 'DE-HB'\n  | 'DE-HH'\n  | 'DE-MV'\n  | 'DE-NI'\n  | 'DE-NW'\n  | 'DE-SL'\n  | 'DE-SN'\n  | 'DE-ST'\n  | 'DE-TH';\n\nconst factors11erVerfahren: Record<ISO3166_2Codes_11erVerfahren, number[]> = {\n  'DE-BY': [0, 5, 4, 3, 0, 2, 7, 6, 5, 4, 3, 2],\n  'DE-BE-A': [0, 0, 0, 0, 0, 7, 6, 5, 8, 4, 3, 2],\n  'DE-BE-B': [0, 0, 2, 9, 0, 8, 7, 6, 5, 4, 3, 2],\n  'DE-BB': [0, 5, 4, 3, 0, 2, 7, 6, 5, 4, 3, 2],\n  'DE-HB': [0, 0, 4, 3, 0, 2, 7, 6, 5, 4, 3, 2],\n  'DE-HH': [0, 0, 4, 3, 0, 2, 7, 6, 5, 4, 3, 2],\n  'DE-MV': [0, 5, 4, 3, 0, 2, 7, 6, 5, 4, 3, 2],\n  'DE-NI': [0, 0, 2, 9, 0, 8, 7, 6, 5, 4, 3, 2],\n  'DE-NW': [0, 3, 2, 1, 0, 7, 6, 5, 4, 3, 2, 1],\n  'DE-SL': [0, 5, 4, 3, 0, 2, 7, 6, 5, 4, 3, 2],\n  'DE-SN': [0, 5, 4, 3, 0, 2, 7, 6, 5, 4, 3, 2],\n  'DE-ST': [0, 5, 4, 3, 0, 2, 7, 6, 5, 4, 3, 2],\n  'DE-TH': [0, 5, 4, 3, 0, 2, 7, 6, 5, 4, 3, 2],\n};\n\nconst factorsModified11erVerfahren = [0, 0, 1, 2, 0, 1, 2, 1, 2, 1, 2, 1];\n\nconst summands2erVerfahren = [0, 0, 9, 8, 0, 7, 6, 5, 4, 3, 2, 1];\n\nconst factors2erVerfahren = [0, 0, 512, 256, 0, 128, 64, 32, 16, 8, 4, 2];\n\n/**\n * List of Bezirksnummer values which are invalid, according to\n * https://download.elster.de/download/schnittstellen/Pruefung_der_Steuer_und_Steueridentifikatsnummer.pdf\n */\nconst forbiddenBezirksnummer = ['000', '998', '999', '0000', '0998', '0999'];\n\nexport type Options = {\n  bundesland?: ISO3166_2Codes;\n  errorMessages?: Partial<ErrorMessages>;\n};\n\ntype OptionsWithErrors = Options & { errorMessages: ErrorMessages };\n\n/**\n * Returns `undefined`, if the given `val` is a valid German Steuernummer. If\n * not, returns and error describing the first violated constraint met during\n * the validation process.\n *\n * Using the second options argument, a `bundesland` can be passed to explicitly\n * state the Bundesland the Steuernummer should belong to.\n *\n * This is what's being validated:\n *\n *  - The given string contains only digits, ' ', or '/'\n *  - The number of digits in the given string is between 10 and 13\n *  - The state (Bundesland) issuing the Steuernummer is known\n *    - Either, because the Steuernummer contains a state prefix (i.e., is of\n *      length >= 12)\n *    - Or, because the `bundesland` option was used to deliberately name the\n *      state (for example, when providing a Steuernummer using the common\n *      Standardschema der Länder)\n *  - The state information contained in the Steuernummer matches the\n *    `bundesland` option, if both are given\n *  - The Bundesfinanzamtsnummer part of the Steuernummer references a known\n *    Bundesfinanzamt. The list to check against is based on the \"GemFA 2.0\"\n *    (GEMeinden und FinanzAemter 2.0) data, which lists 610 Finanzämter as of\n *    October 5th 2022.\n *  - The Bezirksnummer part of the Steuernummer is valid (checking Bundesland-\n *    specific constraints)\n *  - The Unterscheidungsnummer and Prüfziffer fulfill requirements specific to\n *    Nordrhein-Westfalen\n *  - The Prüfziffer is valid. In the case of a Steuernummer from Berlin,\n *    validation passes if the Prüfziffer matches that calculated either for the\n *    Berlin-A _or_ the Berlin-B scheme.\n *\n * Cf. https://download.elster.de/download/schnittstellen/Pruefung_der_Steuer_und_Steueridentifikatsnummer.pdf\n *\n * Using the second options argument, all / individual error messages (default\n * to German) can be overwritten.\n */\nexport function validateSteuernummer(value: string, options?: Options) {\n  try {\n    const errorMessages = {\n      ...defaultErrors,\n      ...(typeof options?.errorMessages === 'object'\n        ? options.errorMessages\n        : {}),\n    };\n\n    // at this point, we know the bundesland of the Steuernummer - so we can\n    // obtain a \"normalized\" version, i.e., one following the \"Vereinheitlichtes\n    // Bundesschema zur elektronischen Übermittlung\" of length 13:\n    const {\n      bundesfinanzamtnummer,\n      bezirksnummer,\n      states,\n      unterscheidungsnummer,\n      pruefziffer,\n      normalizedSteuernummer,\n    } = parseSteuernummer(value, {\n      ...options,\n      errorMessages,\n    });\n\n    // validate that the \"Bundesfinanzamtsnummer\" (first 4 digits of normalized\n    // Steuernummer) reference one of the known Finanzämter in Germany:\n    if (!FinanzamtNummern.has(bundesfinanzamtnummer)) {\n      throw new Error(errorMessages.unknownFinanzamtError);\n    }\n\n    // validate that the Steuernummer does not use an explicitly forbidden\n    // Bezirksnummer:\n    if (forbiddenBezirksnummer.includes(bezirksnummer)) {\n      throw new Error(errorMessages.bezirksnummerError);\n    }\n\n    // validate that the Bezirksnummer does not violate constraints for states of\n    // the bayerischen Programmierverbundes:\n    const isBayerischerProgrammierVerbund =\n      getIsBayerischerProgrammierverbund(states);\n    if (isBayerischerProgrammierVerbund && parseInt(bezirksnummer) < 100) {\n      throw new Error(errorMessages.bezirksnummerError);\n    }\n\n    // validate that the \"Kombination aus Unterscheidungsnummer und Prüfziffer\n    // (UUUP) stets größer als 0009\" for a Steuernummer from\n    // Nordrhein-Westfalen:\n    if (\n      states.includes('DE-NW') &&\n      parseInt(unterscheidungsnummer + pruefziffer) < 9\n    ) {\n      throw new Error(errorMessages.nwInternalConsistencyError);\n    }\n\n    // validate the Prüfziffer:\n    const pruefziffern = getPruefziffern(normalizedSteuernummer, states);\n    if (\n      pruefziffern.length > 0 &&\n      !pruefziffern.includes(parseInt(pruefziffer))\n    ) {\n      throw new Error(errorMessages.pruefzifferError);\n    }\n\n    return undefined;\n  } catch (error: any) {\n    return error.message;\n  }\n}\n\nconst statesWith10Digits = new Set<ISO3166_2Codes>([\n  'DE-BW',\n  'DE-BE',\n  'DE-HB',\n  'DE-HH',\n  'DE-NI',\n  'DE-RP',\n  'DE-SH',\n]);\n\nconst statesWith11Digits = new Set<ISO3166_2Codes>([\n  'DE-BY',\n  'DE-BB',\n  'DE-HE',\n  'DE-MV',\n  'DE-NW',\n  'DE-SL',\n  'DE-SN',\n  'DE-ST',\n  'DE-TH',\n]);\n\nexport type ParsedSteuernummer = {\n  // Steuernummer w. 13 digits: `FFFF 0 BBB UUUU P` or `FFFF 0 BBBB UUU P`\n  normalizedSteuernummer: string;\n  states: ISO3166_2Codes | ISO3166_2Codes[];\n  statePrefix: string;\n  bundesfinanzamtnummer: string;\n  bezirksnummer: string;\n  unterscheidungsnummer: string;\n  pruefziffer: string;\n};\n\n/**\n * Parses the steuernummer contained in the given `value`, or throws an error if\n * parsing is not possible. `value` could contain a steuernummer in the:\n *  - \"Standardschema der Länder\"\n *  - \"Vereinheitlichtes Bundesschema\"\n *  - \"Vereinheitlichtes Bundesschema zur elektronischen Übermittlung\"\n */\nexport function parseSteuernummer(\n  value: string,\n  options: Options\n): ParsedSteuernummer {\n  const { errorMessages, ...rest } = options;\n  const combinedErrorMessages: ErrorMessages = {\n    ...defaultErrors,\n    ...(options.errorMessages || {}),\n  };\n  const optionsWithErrors: OptionsWithErrors = {\n    ...rest,\n    errorMessages: combinedErrorMessages,\n  };\n\n  // check whether only allowed characters are used:\n  if (!/^[0-9\\/\\s]*$/gm.test(value)) {\n    throw new Error(combinedErrorMessages.allowedCharactersError);\n  }\n\n  // extract digits:\n  const digits = value.replace(/[^0-9]/gi, '');\n\n  // validate length:\n  if (digits.length < 10) {\n    throw new Error(combinedErrorMessages.tooShortError);\n  }\n  if (digits.length > 13) {\n    throw new Error(combinedErrorMessages.tooLongError);\n  }\n\n  // parse depending on what schema the Steuernummer is (most likely) in:\n  if (digits.length === 13) {\n    return parseSteuernummerBundesschemaElectric(digits, optionsWithErrors);\n  } else if (digits.length === 12) {\n    return parseSteuernummerBundesschema(digits, optionsWithErrors);\n  } else {\n    return parseSteuernummerStandardschema(digits, optionsWithErrors);\n  }\n}\n\n/**\n * Parses the given `digits` with length 13, which represent a steuernummer in\n * the \"Vereinheitlichtes Bundesschema zur elektronischen Übermittlung\".\n */\nfunction parseSteuernummerBundesschemaElectric(\n  digits: string,\n  options: OptionsWithErrors\n): ParsedSteuernummer {\n  // determine the possible Bundesländer that issued this Steuernummer:\n  const states = getStates(digits);\n\n  // validate that a given `bundesland` matches the state(s) identified by the\n  // given digits:\n  if (\n    typeof options?.bundesland !== 'undefined' &&\n    !states.includes(options.bundesland)\n  ) {\n    throw new Error(options.errorMessages.wrongStateError);\n  }\n\n  // validate that the fifth digit is a `0`:\n  if (digits.charAt(4) !== '0') {\n    throw new Error(options.errorMessages.missingZeroError);\n  }\n\n  const matches = digits.match(\n    states.includes('DE-NW')\n      ? // Format: FFFF 0 BBBB UUU P:\n        /(?<bundesfinanzamtnummer>\\d{4})(?<z>0)(?<bezirksnummer>\\d{4})(?<unterscheidungsnummer>\\d{3})(?<pruefziffer>\\d{1})/\n      : // Format: FFFF 0 BBB UUUU P:\n        /(?<bundesfinanzamtnummer>\\d{4})(?<z>0)(?<bezirksnummer>\\d{3})(?<unterscheidungsnummer>\\d{4})(?<pruefziffer>\\d{1})/\n  );\n  if (!matches || !matches.groups) {\n    throw new Error(options.errorMessages.parseError);\n  }\n  const {\n    bundesfinanzamtnummer,\n    bezirksnummer,\n    unterscheidungsnummer,\n    pruefziffer,\n  } = matches.groups;\n  return {\n    bezirksnummer,\n    bundesfinanzamtnummer,\n    states: options.bundesland\n      ? options.bundesland\n      : states.length === 1\n      ? states[0]\n      : states,\n    statePrefix: getStatesPrefix(states, options.errorMessages),\n    normalizedSteuernummer: digits,\n    pruefziffer,\n    unterscheidungsnummer,\n  };\n}\n\n/**\n * Parses the given `digits` with length 12, which represent a steuernummer in\n * the \"Vereinheitlichtes Bundesschema\".\n */\nfunction parseSteuernummerBundesschema(\n  digits: string,\n  options: OptionsWithErrors\n): ParsedSteuernummer {\n  // determine the possible Bundesländer that issued this Steuernummer:\n  const states = getStates(digits);\n\n  // validate that a given `bundesland` matches the state(s) identified by the\n  // given digits:\n  if (\n    typeof options?.bundesland !== 'undefined' &&\n    !states.includes(options.bundesland)\n  ) {\n    throw new Error(options.errorMessages.wrongStateError);\n  }\n\n  const matches = digits.match(\n    states.includes('DE-NW')\n      ? // Format: FFFF BBBB UUU P:\n        /(?<bundesfinanzamtnummer>\\d{4})(?<bezirksnummer>\\d{4})(?<unterscheidungsnummer>\\d{3})(?<pruefziffer>\\d{1})/\n      : // Format: FFFF BBB UUUU P:\n        /(?<bundesfinanzamtnummer>\\d{4})(?<bezirksnummer>\\d{3})(?<unterscheidungsnummer>\\d{4})(?<pruefziffer>\\d{1})/\n  );\n  if (!matches || !matches.groups) {\n    throw new Error(options.errorMessages.parseError);\n  }\n  const {\n    bundesfinanzamtnummer,\n    bezirksnummer,\n    unterscheidungsnummer,\n    pruefziffer,\n  } = matches.groups;\n  return {\n    bezirksnummer,\n    bundesfinanzamtnummer,\n    states: options.bundesland\n      ? options.bundesland\n      : states.length === 1\n      ? states[0]\n      : states,\n    statePrefix: getStatesPrefix(states, options.errorMessages),\n    normalizedSteuernummer:\n      digits.substring(0, 4) + '0' + digits.substring(4, 12),\n    pruefziffer,\n    unterscheidungsnummer,\n  };\n}\n\n/**\n * Parses the given `digits` with length 10 or 11, which represent a\n * steuernummer in the \"Standardschema der Länder\". Requires a valid\n * `bundesland` option to be passed as well.\n */\nfunction parseSteuernummerStandardschema(\n  digits: string,\n  options: OptionsWithErrors\n): ParsedSteuernummer {\n  const bundesland = options?.bundesland;\n  if (typeof bundesland === 'undefined') {\n    throw new Error(options.errorMessages.missingStateInformationError);\n  }\n\n  if (digits.length !== 10 && statesWith10Digits.has(bundesland)) {\n    throw new Error(options.errorMessages.wrongLengthForState);\n  }\n\n  if (digits.length !== 11 && statesWith11Digits.has(bundesland)) {\n    throw new Error(options.errorMessages.wrongLengthForState);\n  }\n\n  // Parsing based on https://github.com/kontist/normalize-steuernummer\n  switch (bundesland) {\n    case 'DE-BW':\n    case 'DE-BE':\n    case 'DE-HB':\n    case 'DE-HH':\n    case 'DE-NI':\n    case 'DE-RP':\n    case 'DE-SH': {\n      // Format: FF/BBB/UUUUP.\n      const matches = digits.match(\n        /(?<ff>\\d{2})(?<bbb>\\d{3})(?<uuuu>\\d{4})(?<p>\\d{1})/\n      );\n      if (!matches || !matches.groups) {\n        throw new Error(options.errorMessages.parseError);\n      }\n      const { ff, bbb, uuuu, p } = matches.groups;\n      const statePrefix = getStatesPrefix([bundesland], options.errorMessages);\n      return {\n        bezirksnummer: bbb,\n        bundesfinanzamtnummer: statePrefix + ff,\n        normalizedSteuernummer: `${statePrefix}${ff}0${bbb}${uuuu}${p}`,\n        unterscheidungsnummer: uuuu,\n        pruefziffer: p,\n        statePrefix,\n        states: bundesland,\n      };\n    }\n    case 'DE-BY':\n    case 'DE-BB':\n    case 'DE-MV':\n    case 'DE-SL':\n    case 'DE-SN':\n    case 'DE-ST':\n    case 'DE-TH': {\n      // Format: FFF/BBB/UUUUP.\n      const matches = digits.match(\n        /(?<fff>\\d{3})(?<bbb>\\d{3})(?<uuuu>\\d{4})(?<p>\\d{1})/\n      );\n      if (!matches || !matches.groups) {\n        throw new Error(options.errorMessages.parseError);\n      }\n      const { fff, bbb, uuuu, p } = matches.groups;\n      const statePrefix = getStatesPrefix([bundesland], options.errorMessages);\n      return {\n        bezirksnummer: bbb,\n        bundesfinanzamtnummer: statePrefix + fff,\n        normalizedSteuernummer: `${statePrefix}${fff}0${bbb}${uuuu}${p}`,\n        unterscheidungsnummer: uuuu,\n        pruefziffer: p,\n        statePrefix,\n        states: bundesland,\n      };\n    }\n    case 'DE-HE': {\n      // Format: 0FF/BBB/UUUUP.\n      const matches = digits.match(\n        /0(?<ff>\\d{2})(?<bbb>\\d{3})(?<uuuu>\\d{4})(?<p>\\d{1})/\n      );\n      if (!matches || !matches.groups) {\n        throw new Error(options.errorMessages.parseError);\n      }\n      const { ff, bbb, uuuu, p } = matches.groups;\n      const statePrefix = getStatesPrefix([bundesland], options.errorMessages);\n      return {\n        bezirksnummer: bbb,\n        bundesfinanzamtnummer: statePrefix + ff,\n        normalizedSteuernummer: `${statePrefix}${ff}0${bbb}${uuuu}${p}`,\n        unterscheidungsnummer: uuuu,\n        pruefziffer: p,\n        statePrefix,\n        states: bundesland,\n      };\n    }\n    case 'DE-NW': {\n      // Format: FFF/BBBB/UUUP.\n      const matches = digits.match(\n        /(?<fff>\\d{3})(?<bbbb>\\d{4})(?<uuu>\\d{3})(?<p>\\d{1})/\n      );\n      if (!matches || !matches.groups) {\n        throw new Error(options.errorMessages.parseError);\n      }\n      const { fff, bbbb, uuu, p } = matches.groups;\n      const statePrefix = getStatesPrefix([bundesland], options.errorMessages);\n      return {\n        bezirksnummer: bbbb,\n        bundesfinanzamtnummer: statePrefix + fff,\n        normalizedSteuernummer: `${statePrefix}${fff}0${bbbb}${uuu}${p}`,\n        unterscheidungsnummer: uuu,\n        pruefziffer: p,\n        statePrefix,\n        states: bundesland,\n      };\n    }\n    default:\n      throw new Error('Das angegebene Bundesland ist ungültig');\n  }\n}\n\n/**\n * Returns the ISO 3166-2 codes of the states (Bundesländer) identified by the\n * first one or two digits of the given Steuernummer.\n *\n * Returns an empty array if the Steuernummer cannot be deduced.\n *\n * Returns possibly multiple codes, as the relation between digit prefix and\n * Länder is not one-to-one.\n */\nfunction getStates(digits: string): ISO3166_2Codes[] {\n  if (digits.length < 12) {\n    return [];\n  }\n  if (digits.startsWith('9')) {\n    return ['DE-BY'];\n  } else if (digits.startsWith('5')) {\n    return ['DE-NW'];\n  } else if (digits.startsWith('4')) {\n    return ['DE-TH', 'DE-MV'];\n  } else if (digits.startsWith('3')) {\n    return ['DE-BB', 'DE-SN', 'DE-ST'];\n  } else if (digits.startsWith('28')) {\n    return ['DE-BW'];\n  } else if (digits.startsWith('27')) {\n    return ['DE-RP'];\n  } else if (digits.startsWith('26')) {\n    return ['DE-HE'];\n  } else if (digits.startsWith('24')) {\n    return ['DE-HB'];\n  } else if (digits.startsWith('23')) {\n    return ['DE-NI'];\n  } else if (digits.startsWith('22')) {\n    return ['DE-HH'];\n  } else if (digits.startsWith('21')) {\n    return ['DE-SH'];\n  } else if (digits.startsWith('11')) {\n    return ['DE-BE'];\n  } else if (digits.startsWith('1')) {\n    return ['DE-SL'];\n  }\n  return [];\n}\n\n/**\n * Returns the numeric prefix used in federal Steuernummern to identify a\n * states (Bundesland) for the given `states`.\n */\nfunction getStatesPrefix(\n  states: ISO3166_2Codes[],\n  errorMessages: ErrorMessages\n) {\n  if (states.includes('DE-BW')) {\n    return '28';\n  } else if (states.includes('DE-BY')) {\n    return '9';\n  } else if (states.includes('DE-BE')) {\n    return '11';\n  } else if (\n    states.includes('DE-BB') ||\n    states.includes('DE-SN') ||\n    states.includes('DE-ST')\n  ) {\n    return '3';\n  } else if (states.includes('DE-HB')) {\n    return '24';\n  } else if (states.includes('DE-HH')) {\n    return '22';\n  } else if (states.includes('DE-HE')) {\n    return '26';\n  } else if (states.includes('DE-MV') || states.includes('DE-TH')) {\n    return '4';\n  } else if (states.includes('DE-NI')) {\n    return '23';\n  } else if (states.includes('DE-NW')) {\n    return '5';\n  } else if (states.includes('DE-RP')) {\n    return '27';\n  } else if (states.includes('DE-SL')) {\n    return '1';\n  } else if (states.includes('DE-SH')) {\n    return '21';\n  }\n  throw new Error(errorMessages.unknownStatePrefixError);\n}\n\n/**\n * Returns `true`, if any of the given `states` entries is one belonging to the\n * \"bayerischer Programmierverband\".\n */\nfunction getIsBayerischerProgrammierverbund(\n  states: ISO3166_2Codes | ISO3166_2Codes[]\n) {\n  const statesToCheck = Array.isArray(states) ? states : [states];\n  return (\n    statesToCheck.includes('DE-BY') ||\n    statesToCheck.includes('DE-BB') ||\n    statesToCheck.includes('DE-MV') ||\n    statesToCheck.includes('DE-SL') ||\n    statesToCheck.includes('DE-SN') ||\n    statesToCheck.includes('DE-ST') ||\n    statesToCheck.includes('DE-TH')\n  );\n}\n\n/**\n * Returns an array of Prüfziffern for the given `normalizedDigits` and\n * `states`.\n *\n * The array will contain two Prüfziffern in case of the Bundesland being\n * 'DE-BE', as Berlin uses two different mechanisms to determine the Prüfziffer.\n * Returning both deliberately trades off precision for reduced complexity and\n * fewer inputs required for this function.\n *\n * Note that `states` possibly contains multiple entries (e.g., when deduced\n * from a Steuernummer starting with `3`: `['DE-BB', 'DE-SN', 'DE-ST']`). This,\n * however, is not an issue as in all such cases, the calculation of the\n * Prüfziffer is exactly the same between these states (incl. w.r.t. the\n * calculation method and factors used in the calculation).\n */\nfunction getPruefziffern(\n  normalizedDigits: string,\n  states: ISO3166_2Codes | ISO3166_2Codes[]\n): number[] {\n  const statesToCheck = Array.isArray(states) ? states : [states];\n  // w.o. knowing the Bundesland, we cannot determine the Prüfziffer:\n  if (normalizedDigits.length !== 13 || states.length === 0) {\n    throw new Error(\n      `Cannot call getPruefziffern with a non-normalized Steuernummer or without providing states`\n    );\n  }\n\n  if (statesToCheck.includes('DE-RP')) {\n    return [getPruefzifferModified11er(normalizedDigits)];\n  } else if (\n    statesToCheck.includes('DE-BW') ||\n    statesToCheck.includes('DE-HE') ||\n    statesToCheck.includes('DE-SH')\n  ) {\n    return [getPruefziffer2er(normalizedDigits)];\n  } else if (statesToCheck.includes('DE-BE')) {\n    return [\n      getPruefziffer11er(normalizedDigits, 'DE-BE-A'),\n      getPruefziffer11er(normalizedDigits, 'DE-BE-B'),\n    ];\n  } else {\n    return [\n      getPruefziffer11er(\n        normalizedDigits,\n        statesToCheck[0] as ISO3166_2Codes_11erVerfahren\n      ),\n    ];\n  }\n}\n\n/**\n * Determines the Prüfziffer of the given `normalizedDigits` (string of digits\n * with length 12) using the 2er-Verfahren (used in DE-BW, DE-HE, and DE-SH).\n */\nexport function getPruefziffer2er(normalizedDigits: string) {\n  const sums = [];\n  for (let i = 0; i < 12; i++) {\n    sums.push(parseInt(normalizedDigits[i]) + summands2erVerfahren[i]);\n  }\n  const sumsSingleDigits = sums.map((p) => p % 10);\n  const products = sumsSingleDigits.map((s, i) => s * factors2erVerfahren[i]);\n\n  // repeatedly sum up the digits of items until they are all single-digit:\n  let digitSums = products.map(sumDigits);\n  while (digitSums.find((s) => s > 9)) {\n    digitSums = digitSums.map(sumDigits);\n  }\n\n  const sum = digitSums.reduce((sum, current) => (sum += current), 0);\n  if (sum % 10 === 0) {\n    return 0;\n  }\n  return 10 * Math.ceil(sum / 10) - sum;\n}\n\n/**\n * Determines the Prüfziffer of the given `normalizedDigits` (string of digits\n * with length 12) using the modified 11er Verfahren (used in DE-RP).\n */\nexport function getPruefzifferModified11er(normalizedDigits: string) {\n  const products = [];\n  for (let i = 0; i < 12; i++) {\n    products.push(\n      parseInt(normalizedDigits[i]) * factorsModified11erVerfahren[i]\n    );\n  }\n  const singleDigits = products.map((p) => (p > 9 ? (p % 10) + 1 : p));\n\n  const sum = singleDigits.reduce((sum, current) => (sum += current), 0);\n\n  return 10 * Math.ceil(sum / 10) - sum;\n}\n\n/**\n * Determines the Prüfziffer of the given `normalizedDigits` (string of digits\n * with length 12) using the 11er Verfahren (used in most Bundeslaender, where\n * not the 2er Verfahren or modified 11er Verfahren is used).\n */\nexport function getPruefziffer11er(\n  normalizedDigits: string,\n  land: ISO3166_2Codes_11erVerfahren\n) {\n  const products = [];\n  for (let i = 0; i < 12; i++) {\n    products.push(\n      parseInt(normalizedDigits[i]) * factors11erVerfahren[land][i]\n    );\n  }\n\n  const sum = products.reduce((sum, current) => (sum += current), 0);\n\n  if (land === 'DE-NW') {\n    return sum % 11;\n  } else {\n    if (sum % 11 === 0) return 0;\n    return 11 * Math.ceil(sum / 11) - sum;\n  }\n}\n\n/**\n * Returns the sum of digits of the given `num`.\n */\nfunction sumDigits(num: number): number {\n  let sum = 0;\n  while (num) {\n    sum += num % 10;\n    num = Math.floor(num / 10);\n  }\n  return sum;\n}\n"],"names":["sum"],"mappings":";;;;;;EAMO,MAAM,gBAAA,uBAAuB,GAAA,CAAI;EAAA,EACtC,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,EACA,MAAA;EAAA,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"}