@plentymarkets/shop-api 0.113.0 → 0.115.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/lib/__tests__/__fixtures__/CategoryEntry.d.ts +4 -0
  2. package/lib/__tests__/__fixtures__/CategoryEntry.d.ts.map +1 -0
  3. package/lib/api/getTranslations/index.d.ts +25 -0
  4. package/lib/api/getTranslations/index.d.ts.map +1 -0
  5. package/lib/api/index.d.ts +1 -0
  6. package/lib/api/index.d.ts.map +1 -1
  7. package/lib/getters/__tests__/unit/barcodeGetters.unit.spec.d.ts +2 -0
  8. package/lib/getters/__tests__/unit/barcodeGetters.unit.spec.d.ts.map +1 -0
  9. package/lib/getters/__tests__/unit/categoryEntryGetters.unit.spec.d.ts +2 -0
  10. package/lib/getters/__tests__/unit/categoryEntryGetters.unit.spec.d.ts.map +1 -0
  11. package/lib/getters/barcodeGetters.d.ts +19 -0
  12. package/lib/getters/barcodeGetters.d.ts.map +1 -0
  13. package/lib/getters/categoryEntryGetters.d.ts +35 -0
  14. package/lib/getters/categoryEntryGetters.d.ts.map +1 -0
  15. package/lib/getters/index.d.ts +2 -0
  16. package/lib/getters/index.d.ts.map +1 -1
  17. package/lib/getters/productGetters.d.ts +3 -1
  18. package/lib/getters/productGetters.d.ts.map +1 -1
  19. package/lib/index.cjs.js +177 -37
  20. package/lib/index.cjs.js.map +1 -1
  21. package/lib/index.es.js +174 -37
  22. package/lib/index.es.js.map +1 -1
  23. package/lib/types/api/index.d.ts +1 -0
  24. package/lib/types/api/index.d.ts.map +1 -1
  25. package/lib/types/api/product.d.ts +11 -0
  26. package/lib/types/api/product.d.ts.map +1 -1
  27. package/lib/types/api/translations.d.ts +4 -0
  28. package/lib/types/api/translations.d.ts.map +1 -0
  29. package/package.json +2 -2
  30. package/server/__tests__/__fixtures__/CategoryEntry.d.ts +4 -0
  31. package/server/__tests__/__fixtures__/CategoryEntry.d.ts.map +1 -0
  32. package/server/api/getTranslations/index.d.ts +25 -0
  33. package/server/api/getTranslations/index.d.ts.map +1 -0
  34. package/server/api/index.d.ts +1 -0
  35. package/server/api/index.d.ts.map +1 -1
  36. package/server/getters/__tests__/unit/barcodeGetters.unit.spec.d.ts +2 -0
  37. package/server/getters/__tests__/unit/barcodeGetters.unit.spec.d.ts.map +1 -0
  38. package/server/getters/__tests__/unit/categoryEntryGetters.unit.spec.d.ts +2 -0
  39. package/server/getters/__tests__/unit/categoryEntryGetters.unit.spec.d.ts.map +1 -0
  40. package/server/getters/barcodeGetters.d.ts +19 -0
  41. package/server/getters/barcodeGetters.d.ts.map +1 -0
  42. package/server/getters/categoryEntryGetters.d.ts +35 -0
  43. package/server/getters/categoryEntryGetters.d.ts.map +1 -0
  44. package/server/getters/index.d.ts +2 -0
  45. package/server/getters/index.d.ts.map +1 -1
  46. package/server/getters/productGetters.d.ts +3 -1
  47. package/server/getters/productGetters.d.ts.map +1 -1
  48. package/server/index.js +40 -0
  49. package/server/index.js.map +1 -1
  50. package/server/types/api/index.d.ts +1 -0
  51. package/server/types/api/index.d.ts.map +1 -1
  52. package/server/types/api/product.d.ts +11 -0
  53. package/server/types/api/product.d.ts.map +1 -1
  54. package/server/types/api/translations.d.ts +4 -0
  55. package/server/types/api/translations.d.ts.map +1 -0
package/lib/index.cjs.js CHANGED
@@ -2423,7 +2423,7 @@ const setCategoryTemplate = async (context, params) => {
2423
2423
  * const { data, error } = await useAsyncData(() => sdk.plentysystems.getRobots());
2424
2424
  * ```
2425
2425
  */
2426
- const getRobots$1 = async (context) => {
2426
+ const getRobots$2 = async (context) => {
2427
2427
  const url = new URL('/rest/storefront/seo/robots', context.config.api.url);
2428
2428
  const { data: response } = await context.client.get(url.href);
2429
2429
  return { data: response.data };
@@ -2924,6 +2924,45 @@ const doHandlePayPalPaymentFundingSources = async (context, params) => {
2924
2924
  return { data: data };
2925
2925
  };
2926
2926
 
2927
+ /**
2928
+ * Method getTranslations - Used to get the translations.
2929
+ *
2930
+ * @remarks
2931
+ * * Calls /rest/storefront/i18n/translations/{locale} endpoint.
2932
+ * * Method should be used to get the translations for application.
2933
+ *
2934
+ * @param context
2935
+ * @param { GetTranslationsParams } params
2936
+ * locale: locale of the translations to fetch.
2937
+ *
2938
+ * @returns
2939
+ * translations string.
2940
+ *
2941
+ * @example
2942
+ * ``` ts
2943
+ * const { data } = await useSdk().plentysystems.getTranslations({
2944
+ * locale: 'en',
2945
+ * });
2946
+ * ```
2947
+ */
2948
+ const getTranslations = async (context, params) => {
2949
+ try {
2950
+ const url = new URL(`/rest/storefront/i18n/translations/${params.locale}`, context.config.api.url);
2951
+ const { data } = await context.client.get(url.href);
2952
+ return { data: data };
2953
+ }
2954
+ catch (error) {
2955
+ const statusCode = error?.response?.status.toString() || '500';
2956
+ const message = error?.response?.data?.error?.message || error.message;
2957
+ throw new ApiError({
2958
+ key: 'unknownError',
2959
+ code: statusCode,
2960
+ message: message,
2961
+ cause: '',
2962
+ });
2963
+ }
2964
+ };
2965
+
2927
2966
  /**
2928
2967
  * Method doCreatePayPalOrder - Used to create a PayPal order.
2929
2968
  *
@@ -3090,7 +3129,7 @@ function getTree(categories) {
3090
3129
  }
3091
3130
  return tree;
3092
3131
  }
3093
- function getId$7(categoryTreeItem) {
3132
+ function getId$9(categoryTreeItem) {
3094
3133
  return categoryTreeItem.id;
3095
3134
  }
3096
3135
  function getTreeItem(category) {
@@ -3171,7 +3210,7 @@ function generateBreadcrumbFromCategory(tree, categoryId) {
3171
3210
  const category = findCategoryBySlugs(tree, path.slice(0, i + 1));
3172
3211
  if (category) {
3173
3212
  breadcrumbs.push({
3174
- name: getName$4(category),
3213
+ name: getName$5(category),
3175
3214
  link: generateCategoryLink(tree, category),
3176
3215
  });
3177
3216
  }
@@ -3184,7 +3223,7 @@ function getCategoryDetails$1(details) {
3184
3223
  function getCount(category) {
3185
3224
  return category ? Number(category?.itemCount?.[0]?.count) || 0 : 0;
3186
3225
  }
3187
- function getName$4(category) {
3226
+ function getName$5(category) {
3188
3227
  const details = getCategoryDetails$1(category.details);
3189
3228
  return details ? details.name : '';
3190
3229
  }
@@ -3209,7 +3248,7 @@ function getMappedBreadcrumbs(categories, categoryId, prefix = '') {
3209
3248
  });
3210
3249
  }
3211
3250
  const categoryTreeGetters = {
3212
- getId: getId$7,
3251
+ getId: getId$9,
3213
3252
  getTree,
3214
3253
  getTreeItem,
3215
3254
  findCategoryBySlug,
@@ -3220,7 +3259,7 @@ const categoryTreeGetters = {
3220
3259
  generateBreadcrumbFromCategory,
3221
3260
  getCategoryDetails: getCategoryDetails$1,
3222
3261
  getCount,
3223
- getName: getName$4,
3262
+ getName: getName$5,
3224
3263
  getSlug: getSlug$1,
3225
3264
  getItems: getItems$4,
3226
3265
  getMappedBreadcrumbs,
@@ -3635,7 +3674,7 @@ const productPriceGetters = {
3635
3674
 
3636
3675
  const NO_SELECTION_ID = -1;
3637
3676
  const ITEM_TYPE_SET$1 = 'set';
3638
- function getName$3(product) {
3677
+ function getName$4(product) {
3639
3678
  return product?.texts?.name1 ?? '';
3640
3679
  }
3641
3680
  function getSlug(product) {
@@ -3769,7 +3808,7 @@ function getCategoryIds(product) {
3769
3808
  '',
3770
3809
  ]);
3771
3810
  }
3772
- function getId$6(product) {
3811
+ function getId$8(product) {
3773
3812
  return product?.variation?.id.toString() ?? '';
3774
3813
  }
3775
3814
  function getItemId$1(product) {
@@ -3853,9 +3892,12 @@ function getAvailabilityBackgroundColor(product) {
3853
3892
  function getAvailabilityTextColor(product) {
3854
3893
  return AvailabilityTextColor[getAvailabilityId(product)];
3855
3894
  }
3856
- function getParentCategoryId(product) {
3895
+ function getParentCategoryId$1(product) {
3857
3896
  return product.defaultCategories?.[0]?.parentCategoryId ?? 0;
3858
3897
  }
3898
+ function getBarcodes(product) {
3899
+ return product.barcodes ?? [];
3900
+ }
3859
3901
  function getManufacturer(product) {
3860
3902
  const manufacturerData = product.item.manufacturer;
3861
3903
  return Array.isArray(manufacturerData) ? manufacturerData[0] : manufacturerData;
@@ -3863,7 +3905,7 @@ function getManufacturer(product) {
3863
3905
  const productGetters = {
3864
3906
  getUnitContent,
3865
3907
  getUnitName,
3866
- getName: getName$3,
3908
+ getName: getName$4,
3867
3909
  getMinimumOrderQuantity,
3868
3910
  getSlug,
3869
3911
  getUrlPath,
@@ -3885,7 +3927,7 @@ const productGetters = {
3885
3927
  getShortDescription,
3886
3928
  getTechnicalData,
3887
3929
  getCategoryIds,
3888
- getId: getId$6,
3930
+ getId: getId$8,
3889
3931
  getTotalReviews: getTotalReviews$1,
3890
3932
  getAverageRating: getAverageRating$1,
3891
3933
  getItemId: getItemId$1,
@@ -3926,8 +3968,9 @@ const productGetters = {
3926
3968
  getAgenciesAvailabilityCLass,
3927
3969
  getMetaDescription: getMetaDescription$1,
3928
3970
  getMetaKeywords: getMetaKeywords$1,
3929
- getParentCategoryId,
3971
+ getParentCategoryId: getParentCategoryId$1,
3930
3972
  getManufacturer,
3973
+ getBarcodes,
3931
3974
  };
3932
3975
 
3933
3976
  function getItems$3(cart) {
@@ -4183,7 +4226,70 @@ const cartGetters = {
4183
4226
  getMaxDeliveryDays,
4184
4227
  };
4185
4228
 
4186
- function getId$5(category) {
4229
+ function getChildCount(categoryEntry) {
4230
+ return categoryEntry.childCount ?? 0;
4231
+ }
4232
+ function getChildren(categoryEntry) {
4233
+ return categoryEntry.children || [];
4234
+ }
4235
+ function getClients(categoryEntry) {
4236
+ return categoryEntry.clients || [];
4237
+ }
4238
+ function getDetails(categoryEntry) {
4239
+ return categoryEntry.details || [];
4240
+ }
4241
+ function getId$7(categoryEntry) {
4242
+ return categoryEntry.id ?? 0;
4243
+ }
4244
+ function getItemCount(categoryEntry) {
4245
+ return categoryEntry.itemCount ?? [];
4246
+ }
4247
+ function getLevel(categoryEntry) {
4248
+ return categoryEntry.level ?? 0;
4249
+ }
4250
+ function getLinklist(categoryEntry) {
4251
+ return categoryEntry.linklist || '';
4252
+ }
4253
+ function getParentCategoryId(categoryEntry) {
4254
+ return categoryEntry.parentCategoryId ?? 0;
4255
+ }
4256
+ function getRight(categoryEntry) {
4257
+ return categoryEntry.right || '';
4258
+ }
4259
+ function getSitemap(categoryEntry) {
4260
+ return categoryEntry.sitemap || '';
4261
+ }
4262
+ function getType$3(categoryEntry) {
4263
+ return categoryEntry.type || '';
4264
+ }
4265
+ function getRobots$1(categoryEntry) {
4266
+ return categoryEntry.robots || '';
4267
+ }
4268
+ function isLinkedToWebstore(categoryEntry) {
4269
+ return categoryEntry.isLinkedToWebstore ?? false;
4270
+ }
4271
+ function hasChildren(categoryEntry) {
4272
+ return categoryEntry.hasChildren ?? false;
4273
+ }
4274
+ const categoryEntryGetters = {
4275
+ getChildCount,
4276
+ getChildren,
4277
+ getClients,
4278
+ getDetails,
4279
+ getId: getId$7,
4280
+ getItemCount,
4281
+ getLevel,
4282
+ getLinklist,
4283
+ getParentCategoryId,
4284
+ getRight,
4285
+ getSitemap,
4286
+ getType: getType$3,
4287
+ getRobots: getRobots$1,
4288
+ isLinkedToWebstore,
4289
+ hasChildren
4290
+ };
4291
+
4292
+ function getId$6(category) {
4187
4293
  return category.id ?? 0;
4188
4294
  }
4189
4295
  function getParentId(category) {
@@ -4220,7 +4326,7 @@ function getCategoryRobots(category) {
4220
4326
  return category.robots || '';
4221
4327
  }
4222
4328
  const categoryGetters = {
4223
- getId: getId$5,
4329
+ getId: getId$6,
4224
4330
  getParentId,
4225
4331
  getCategoryName,
4226
4332
  getCategoryDetails,
@@ -4274,10 +4380,10 @@ function getSortOptions(params) {
4274
4380
  function getProducts(searchData) {
4275
4381
  return searchData?.data?.products ?? [];
4276
4382
  }
4277
- function getName$2(filterGroup) {
4383
+ function getName$3(filterGroup) {
4278
4384
  return filterGroup?.name ?? '';
4279
4385
  }
4280
- function getType$1(filterGroup) {
4386
+ function getType$2(filterGroup) {
4281
4387
  return filterGroup?.type ?? '';
4282
4388
  }
4283
4389
  function getFilters(filterGroup) {
@@ -4316,8 +4422,8 @@ function getPagination$2(params) {
4316
4422
  }
4317
4423
  const facetGetters = {
4318
4424
  getAll,
4319
- getName: getName$2,
4320
- getType: getType$1,
4425
+ getName: getName$3,
4426
+ getType: getType$2,
4321
4427
  getFilterName,
4322
4428
  getFilterCount,
4323
4429
  getCssClass,
@@ -4361,7 +4467,7 @@ function getShippingDate(order, locale = '') {
4361
4467
  function getById(orders, id) {
4362
4468
  return orders.find((order) => order?.order?.id.toString() === id) ?? null;
4363
4469
  }
4364
- function getId$4(order) {
4470
+ function getId$5(order) {
4365
4471
  return order?.order?.id?.toString() || '';
4366
4472
  }
4367
4473
  function getOrderEmail(order) {
@@ -4795,7 +4901,7 @@ const orderGetters = {
4795
4901
  getById,
4796
4902
  getDate: getDate$1,
4797
4903
  getFormattedPrice: getFormattedPrice$2,
4798
- getId: getId$4,
4904
+ getId: getId$5,
4799
4905
  getItemName: getItemName$2,
4800
4906
  getItemShortDescription,
4801
4907
  getItemPrice: getItemPrice$2,
@@ -4882,14 +4988,14 @@ const orderGetters = {
4882
4988
  getShippingCostNet,
4883
4989
  };
4884
4990
 
4885
- function getType(document) {
4991
+ function getType$1(document) {
4886
4992
  return document?.type ?? '';
4887
4993
  }
4888
4994
  function getNumberWithPrefix(document) {
4889
4995
  return document?.numberWithPrefix ?? '';
4890
4996
  }
4891
4997
  const orderDocumentGetters = {
4892
- getType,
4998
+ getType: getType$1,
4893
4999
  getNumberWithPrefix,
4894
5000
  };
4895
5001
 
@@ -4899,7 +5005,7 @@ function getDate(returnItem) {
4899
5005
  }
4900
5006
  return '';
4901
5007
  }
4902
- function getId$3(returnItem) {
5008
+ function getId$4(returnItem) {
4903
5009
  return returnItem.order?.id.toString() || '';
4904
5010
  }
4905
5011
  function getStatus(returnItem) {
@@ -4976,7 +5082,7 @@ function getDefaultReturnReasonId(data) {
4976
5082
  }
4977
5083
  const returnGetters = {
4978
5084
  getDate,
4979
- getId: getId$3,
5085
+ getId: getId$4,
4980
5086
  getStatus,
4981
5087
  getPrice,
4982
5088
  getItems: getItems$1,
@@ -5336,7 +5442,7 @@ filters) {
5336
5442
  function getItemSku(item) {
5337
5443
  return '';
5338
5444
  }
5339
- function getId$2(product) {
5445
+ function getId$3(product) {
5340
5446
  return product?.variation?.id.toString() ?? '';
5341
5447
  }
5342
5448
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
@@ -5376,7 +5482,7 @@ const wishlistGetters = {
5376
5482
  getItemSku,
5377
5483
  getTotalItems,
5378
5484
  getFormattedPrice,
5379
- getId: getId$2,
5485
+ getId: getId$3,
5380
5486
  canDirectlyAddToCart,
5381
5487
  getCanDirectlyAddToCart,
5382
5488
  };
@@ -5423,10 +5529,10 @@ const shippingProviderGetters = {
5423
5529
  getShippingProfileId,
5424
5530
  };
5425
5531
 
5426
- function getId$1(paymentMethod) {
5532
+ function getId$2(paymentMethod) {
5427
5533
  return paymentMethod?.id.toString() ?? '0';
5428
5534
  }
5429
- function getName$1(paymentMethod) {
5535
+ function getName$2(paymentMethod) {
5430
5536
  return paymentMethod?.name ?? '';
5431
5537
  }
5432
5538
  function getIcon(paymentMethod) {
@@ -5456,8 +5562,8 @@ function getPaymentMethodById(paymentMethods, id) {
5456
5562
  return paymentMethods.find((method) => method.id === id) ?? null;
5457
5563
  }
5458
5564
  const paymentProviderGetters = {
5459
- getId: getId$1,
5460
- getName: getName$1,
5565
+ getId: getId$2,
5566
+ getName: getName$2,
5461
5567
  getIcon,
5462
5568
  getMethodOfPaymentId,
5463
5569
  getPaymentKey,
@@ -5561,7 +5667,7 @@ function getCompanyName(address) {
5561
5667
  function getVatNumber(address) {
5562
5668
  return address.vatNumber ?? '';
5563
5669
  }
5564
- function getId(address) {
5670
+ function getId$1(address) {
5565
5671
  return address?.id?.toString() ?? '';
5566
5672
  }
5567
5673
  function getApartmentNumber(address) {
@@ -5612,7 +5718,7 @@ const userAddressGetters = {
5612
5718
  getProvince,
5613
5719
  getCompanyName,
5614
5720
  getVatNumber,
5615
- getId,
5721
+ getId: getId$1,
5616
5722
  getApartmentNumber,
5617
5723
  isDefault,
5618
5724
  getAddressWithoutId,
@@ -5664,7 +5770,7 @@ const legalGetters = {
5664
5770
  getHtml,
5665
5771
  };
5666
5772
 
5667
- function getName(company) {
5773
+ function getName$1(company) {
5668
5774
  return company.name ?? '';
5669
5775
  }
5670
5776
  function getStreet(company) {
@@ -5677,7 +5783,7 @@ function getEmail(company) {
5677
5783
  return company.email ?? '';
5678
5784
  }
5679
5785
  const companyGetters = {
5680
- getName,
5786
+ getName: getName$1,
5681
5787
  getStreet,
5682
5788
  getCity,
5683
5789
  getEmail,
@@ -5758,14 +5864,14 @@ const heroesGetters = {
5758
5864
  getClassName,
5759
5865
  };
5760
5866
 
5761
- function getCode(locale) {
5867
+ function getCode$1(locale) {
5762
5868
  return locale ? locale.code : 'en';
5763
5869
  }
5764
5870
  function getLabel(locale) {
5765
5871
  return locale ? locale.label : 'en';
5766
5872
  }
5767
5873
  const localesGetters = {
5768
- getCode,
5874
+ getCode: getCode$1,
5769
5875
  getLabel,
5770
5876
  };
5771
5877
 
@@ -6170,10 +6276,43 @@ const robotGetters = {
6170
6276
  getRobotsAccessibilityDeclarationResult,
6171
6277
  };
6172
6278
 
6279
+ function getId(barcode) {
6280
+ return barcode?.id || 0;
6281
+ }
6282
+ function getName(barcode) {
6283
+ return barcode?.name || '';
6284
+ }
6285
+ function getType(barcode) {
6286
+ return barcode?.type || '';
6287
+ }
6288
+ function getCode(barcode) {
6289
+ return barcode?.code || '';
6290
+ }
6291
+ function getCreatedAt(barcode) {
6292
+ return barcode?.createdAt || '';
6293
+ }
6294
+ function getUpdatedAt(barcode) {
6295
+ return barcode?.updatedAt || '';
6296
+ }
6297
+ function getReferrers(barcode) {
6298
+ return barcode?.referrers ?? [];
6299
+ }
6300
+ const barcodeGetters = {
6301
+ getId,
6302
+ getName,
6303
+ getType,
6304
+ getCode,
6305
+ getCreatedAt,
6306
+ getUpdatedAt,
6307
+ getReferrers,
6308
+ };
6309
+
6173
6310
  exports.ApiError = ApiError;
6174
6311
  exports.additionalInformationGetters = additionalInformationGetters;
6175
6312
  exports.bannerGetters = bannerGetters;
6313
+ exports.barcodeGetters = barcodeGetters;
6176
6314
  exports.cartGetters = cartGetters;
6315
+ exports.categoryEntryGetters = categoryEntryGetters;
6177
6316
  exports.categoryGetters = categoryGetters;
6178
6317
  exports.categoryTreeGetters = categoryTreeGetters;
6179
6318
  exports.companyGetters = companyGetters;
@@ -6272,10 +6411,11 @@ exports.getReturnReasons = getReturnReasons$1;
6272
6411
  exports.getReturns = getReturns;
6273
6412
  exports.getReview = getReview;
6274
6413
  exports.getReviewAverage = getReviewAverage;
6275
- exports.getRobots = getRobots$1;
6414
+ exports.getRobots = getRobots$2;
6276
6415
  exports.getSearch = getSearch;
6277
6416
  exports.getSession = getSession;
6278
6417
  exports.getShippingProvider = getShippingProvider$1;
6418
+ exports.getTranslations = getTranslations;
6279
6419
  exports.getWishlist = getWishlist;
6280
6420
  exports.heroesGetters = heroesGetters;
6281
6421
  exports.legalGetters = legalGetters;
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.cjs.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}