app-studio 0.6.28 → 0.6.30

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.
@@ -1151,7 +1151,7 @@ const cssProperties = /*#__PURE__*/new Set([
1151
1151
  // Borders
1152
1152
  'border', 'borderWidth', 'borderStyle', 'borderColor', 'borderRadius', 'borderTop', 'borderRight', 'borderBottom', 'borderLeft', 'borderTopLeftRadius', 'borderTopRightRadius', 'borderBottomLeftRadius', 'borderBottomRightRadius',
1153
1153
  // Effects
1154
- 'boxShadow', 'textShadow', 'transform', 'transition', 'animation', 'filter', 'backdropFilter',
1154
+ 'boxShadow', 'textShadow', 'transform', 'transition', 'animation', 'filter', 'backdropFilter', 'mixBlendMode',
1155
1155
  // Layout
1156
1156
  'display', 'visibility', 'overflow', 'overflowX', 'overflowY', 'float', 'clear', 'objectFit', 'objectPosition',
1157
1157
  // Interactivity
@@ -2321,7 +2321,7 @@ const Element = /*#__PURE__*/React__default.memo(/*#__PURE__*/React.forwardRef((
2321
2321
  const propsToProcess = {
2322
2322
  ...rest
2323
2323
  };
2324
- if (blend) {
2324
+ if (blend !== false && propsToProcess.color === undefined && typeof rest.children === 'string') {
2325
2325
  if (propsToProcess.bgColor) {
2326
2326
  propsToProcess.mixBlendMode = 'exclusion';
2327
2327
  propsToProcess.color = getColor(propsToProcess.bgColor);
@@ -2492,103 +2492,6 @@ const ImageBackground = /*#__PURE__*/React__default.forwardRef((_ref, ref) => {
2492
2492
  }));
2493
2493
  });
2494
2494
 
2495
- /**
2496
- * Text Styles
2497
- *
2498
- * Defines the styles for the Text component following the design guidelines:
2499
- * - Typography: Inter/Geist font, specific sizes/weights
2500
- * - Spacing: 4px grid system
2501
- * - Colors: Neutral palette with semantic colors
2502
- */
2503
- /**
2504
- * Heading sizes following typography guidelines
2505
- * Matching shadcn/ui typography patterns
2506
- */
2507
- const HeadingSizes = {
2508
- h1: {
2509
- fontSize: '36px',
2510
- lineHeight: '40px',
2511
- fontWeight: '700',
2512
- letterSpacing: '-0.02em',
2513
- marginBottom: '24px',
2514
- transition: 'color 0.15s ease'
2515
- },
2516
- h2: {
2517
- fontSize: '30px',
2518
- lineHeight: '36px',
2519
- fontWeight: '700',
2520
- letterSpacing: '-0.02em',
2521
- marginBottom: '20px',
2522
- transition: 'color 0.15s ease'
2523
- },
2524
- h3: {
2525
- fontSize: '24px',
2526
- lineHeight: '32px',
2527
- fontWeight: '600',
2528
- letterSpacing: '-0.01em',
2529
- marginBottom: '16px',
2530
- transition: 'color 0.15s ease'
2531
- },
2532
- h4: {
2533
- fontSize: '20px',
2534
- lineHeight: '28px',
2535
- fontWeight: '600',
2536
- letterSpacing: '-0.01em',
2537
- marginBottom: '16px',
2538
- transition: 'color 0.15s ease'
2539
- },
2540
- h5: {
2541
- fontSize: '18px',
2542
- lineHeight: '24px',
2543
- fontWeight: '600',
2544
- letterSpacing: '-0.01em',
2545
- marginBottom: '12px',
2546
- transition: 'color 0.15s ease'
2547
- },
2548
- h6: {
2549
- fontSize: '16px',
2550
- lineHeight: '24px',
2551
- fontWeight: '600',
2552
- letterSpacing: '-0.01em',
2553
- marginBottom: '8px',
2554
- transition: 'color 0.15s ease'
2555
- }
2556
- };
2557
- /**
2558
- * Font sizes following typography guidelines
2559
- */
2560
- const FontSizes = {
2561
- xs: '10px',
2562
- sm: '12px',
2563
- md: '14px',
2564
- lg: '16px',
2565
- xl: '20px'
2566
- };
2567
- /**
2568
- * Line heights following typography guidelines
2569
- */
2570
- const LineHeights = {
2571
- xs: '14px',
2572
- sm: '16px',
2573
- md: '20px',
2574
- lg: '22px',
2575
- xl: '28px'
2576
- };
2577
- /**
2578
- * Font weights following typography guidelines
2579
- */
2580
- const FontWeights = {
2581
- hairline: '100',
2582
- thin: '200',
2583
- light: '300',
2584
- normal: '400',
2585
- medium: '500',
2586
- semiBold: '600',
2587
- bold: '700',
2588
- extraBold: '800',
2589
- black: '900'
2590
- };
2591
-
2592
2495
  const normalizeHexColor = backgroundColor => {
2593
2496
  if (!backgroundColor) {
2594
2497
  return null;
@@ -2634,21 +2537,24 @@ const TextContent = _ref => {
2634
2537
  children,
2635
2538
  isSub,
2636
2539
  isSup,
2637
- views
2540
+ views,
2541
+ ...props
2638
2542
  } = _ref;
2639
- return /*#__PURE__*/React__default.createElement(React__default.Fragment, null, typeof children === 'string' ? (/*#__PURE__*/React__default.createElement(React__default.Fragment, null, isSub && (/*#__PURE__*/React__default.createElement(View, Object.assign({
2640
- as: "sub",
2543
+ return isSub ? (/*#__PURE__*/React__default.createElement(View, Object.assign({
2544
+ as: "sub"
2545
+ }, views?.sup, {
2641
2546
  fontSize: "75%",
2642
2547
  lineHeight: "0",
2643
2548
  position: "relative",
2644
2549
  bottom: "-0.25em"
2645
- }, views?.sup), children)), isSup && (/*#__PURE__*/React__default.createElement(View, Object.assign({
2646
- as: "sup",
2550
+ }), children)) : isSup ? (/*#__PURE__*/React__default.createElement(View, Object.assign({
2551
+ as: "sup"
2552
+ }, views?.sup, {
2647
2553
  fontSize: "75%",
2648
2554
  lineHeight: "0",
2649
2555
  position: "relative",
2650
2556
  top: "-0.5em"
2651
- }, views?.sup), children)), !isSub && !isSup && /*#__PURE__*/React__default.createElement(React__default.Fragment, null, children))) : children);
2557
+ }), children)) : (/*#__PURE__*/React__default.createElement(Element, Object.assign({}, props), children));
2652
2558
  };
2653
2559
  /**
2654
2560
  * Renders text with truncation after a specified number of lines (JS calculation)
@@ -2658,6 +2564,8 @@ const TruncateText = _ref2 => {
2658
2564
  text,
2659
2565
  maxLines = 1,
2660
2566
  views,
2567
+ isSub,
2568
+ isSup,
2661
2569
  ...rest // Pass down other HTML attributes
2662
2570
  } = _ref2;
2663
2571
  const containerRef = React.useRef(null);
@@ -2717,11 +2625,24 @@ const TruncateText = _ref2 => {
2717
2625
  n.style.lineHeight = lineHeight;
2718
2626
  }
2719
2627
  }, [text, maxLines]);
2628
+ const subSupProps = isSub ? {
2629
+ as: 'sub',
2630
+ fontSize: '75%',
2631
+ lineHeight: '0',
2632
+ position: 'relative',
2633
+ bottom: '-0.25em'
2634
+ } : isSup ? {
2635
+ as: 'sup',
2636
+ fontSize: '75%',
2637
+ lineHeight: '0',
2638
+ position: 'relative',
2639
+ top: '-0.5em'
2640
+ } : {};
2720
2641
  return /*#__PURE__*/React__default.createElement(Element, Object.assign({
2721
2642
  as: "span",
2722
2643
  ref: containerRef,
2723
2644
  overflow: "hidden" // Crucial for final display state
2724
- }, views?.truncateText, rest, {
2645
+ }, rest, subSupProps, views?.truncateText, {
2725
2646
  // Add title attribute for accessibility/hover to see full text
2726
2647
  title: isTruncated ? text : undefined
2727
2648
  }), truncatedText);
@@ -2732,7 +2653,6 @@ const TruncateText = _ref2 => {
2732
2653
  const TextView = _ref3 => {
2733
2654
  let {
2734
2655
  children,
2735
- heading,
2736
2656
  maxLines,
2737
2657
  isItalic = false,
2738
2658
  isUnderlined = false,
@@ -2740,47 +2660,45 @@ const TextView = _ref3 => {
2740
2660
  isSub = false,
2741
2661
  isSup = false,
2742
2662
  isStriked = false,
2743
- weight = 'normal',
2744
- size = 'md',
2745
2663
  bgColor,
2746
2664
  backgroundColor: backgroundColorProp,
2747
2665
  color,
2748
2666
  views,
2667
+ blend,
2749
2668
  ...props
2750
2669
  } = _ref3;
2751
- // Apply heading styles if a heading is specified
2752
- const headingStyles = heading ? HeadingSizes[heading] : {};
2753
2670
  // For sub/sup text, use inline display
2754
2671
  const noLineBreak = isSub || isSup ? {
2755
2672
  display: 'inline'
2756
2673
  } : {};
2757
- // Get font size, line height, and weight from our design system
2758
- const fontSize = FontSizes[size];
2759
- const lineHeight = LineHeights[size];
2760
- const fontWeight = FontWeights[weight];
2761
2674
  const containerBackgroundColor = views?.container?.backgroundColor;
2762
2675
  const effectiveBackgroundColor = bgColor ?? backgroundColorProp ?? containerBackgroundColor;
2763
2676
  const computedColor = color ?? (effectiveBackgroundColor ? getTextColor(effectiveBackgroundColor) : undefined);
2764
2677
  children = toUpperCase && typeof children === 'string' ? children.toUpperCase() : children;
2765
- return /*#__PURE__*/React__default.createElement(Element
2766
- // Apply typography styles according to design guidelines
2767
- , Object.assign({
2768
- // Apply typography styles according to design guidelines
2769
- fontSize: fontSize,
2770
- lineHeight: lineHeight,
2678
+ // Common props for both TruncateText and standard Element
2679
+ const commonProps = {
2680
+ as: 'span',
2771
2681
  fontStyle: isItalic ? 'italic' : 'normal',
2772
- fontWeight: fontWeight,
2773
- letterSpacing: "-0.01em",
2774
2682
  textDecoration: isStriked ? 'line-through' : isUnderlined ? 'underline' : 'none',
2775
2683
  color: computedColor,
2776
- backgroundColor: effectiveBackgroundColor
2777
- }, noLineBreak, headingStyles, props, views?.container), maxLines && typeof children === 'string' ? (/*#__PURE__*/React__default.createElement(TruncateText, {
2684
+ maxLines,
2685
+ blend,
2686
+ backgroundColor: effectiveBackgroundColor,
2687
+ ...noLineBreak,
2688
+ ...props,
2689
+ ...views?.container
2690
+ };
2691
+ children = toUpperCase && typeof children === 'string' ? children.toUpperCase() : children;
2692
+ return maxLines && typeof children === 'string' ? (/*#__PURE__*/React__default.createElement(TruncateText, Object.assign({
2693
+ isSub: isSub,
2694
+ isSup: isSup
2695
+ }, commonProps, {
2778
2696
  text: children,
2779
2697
  maxLines: maxLines
2780
- })) : (/*#__PURE__*/React__default.createElement(TextContent, {
2698
+ }))) : (/*#__PURE__*/React__default.createElement(TextContent, Object.assign({
2781
2699
  isSub: isSub,
2782
2700
  isSup: isSup
2783
- }, children)));
2701
+ }, commonProps), children));
2784
2702
  };
2785
2703
 
2786
2704
  const TextComponent = props => {
@@ -1 +1 @@
1
- {"version":3,"file":"app-studio.cjs.development.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"app-studio.cjs.development.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}