hunk.code_window:   }
     public static ExponentPackage kernelExponentPackage(Context context, JSONObject manifest, List<Package> expoPackages) {
       Map<String, Object> kernelExperienceProperties = new HashMap<>();
       List<SingletonModule> singletonModules = ExponentPackage.getOrCreateSingletonModules(context, manifest, expoPackages);
       kernelExperienceProperties.put(LINKING_URI_KEY, "exp://");
       kernelExperienceProperties.put(IS_HEADLESS_KEY, false);
  
hunk.labels: keep keep keep replace keep keep keep keep
hunk.after_edit:   public static ExponentPackage kernelExponentPackage(Context context, JSONObject manifest, List<Package> expoPackages, @Nullable String initialURL) {
  
hunk.file_path: android/versioned-abis/expoview-abi41_0_0/src/main/java/abi41_0_0/host/exp/exponent/ExponentPackage.java
hunk.type: replace
file: #include "ABI38_0_0RNSVGPropHelper.h"
  @implementation ABI38_0_0RNSVGPropHelper
  
  + (CGFloat)fromRelativeWithNSString:(NSString *)length
                            relative:(CGFloat)relative
                            fontSize:(CGFloat)fontSize {
      length = [length stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
      NSUInteger stringLength = [length length];
      NSInteger percentIndex = stringLength - 1;
      if (stringLength == 0) {
          return 0;
      }
      else if ([length characterAtIndex:percentIndex] == '%') {
          return (CGFloat)[[length substringWithRange:NSMakeRange(0, percentIndex)] doubleValue] / 100 * relative;
      }
      else {
          NSInteger twoLetterUnitIndex = stringLength - 2;
          if (twoLetterUnitIndex > 0) {
              NSString *lastTwo = [length substringFromIndex:twoLetterUnitIndex];
              NSUInteger end = twoLetterUnitIndex;
              CGFloat unit = 1;
              if ([lastTwo isEqualToString:@"px"]) {
  
              } else if ([lastTwo isEqualToString:@"em"]) {
                  unit = fontSize;
              } else if ([lastTwo isEqualToString:@"ex"]) {
                  unit = fontSize / 2;
              } else if ([lastTwo isEqualToString:@"pt"]) {
                  unit = 1.25;
              } else if ([lastTwo isEqualToString:@"pc"]) {
                  unit = 15;
              } else if ([lastTwo isEqualToString:@"mm"]) {
                  unit = (CGFloat)3.543307;
              } else if ([lastTwo isEqualToString:@"cm"]) {
                  unit = (CGFloat)35.43307;
              } else if ([lastTwo isEqualToString:@"in"]) {
                  unit = 90;
              } else {
                  end = stringLength;
              }
  
              return (CGFloat)[[length substringWithRange:NSMakeRange(0, end)] doubleValue] * unit;
          } else {
              return (CGFloat)[length doubleValue];
          }
      }
  }
  
  + (CGFloat)fromRelative:(ABI38_0_0RNSVGLength*)length
                relative:(CGFloat)relative
                fontSize:(CGFloat)fontSize {
      ABI38_0_0RNSVGLengthUnitType unitType = length.unit;
      CGFloat value = length.value;
      CGFloat unit = 1;
      switch (unitType) {
          case SVG_LENGTHTYPE_NUMBER:
          case SVG_LENGTHTYPE_PX:
              return value;
              break;
  
          case SVG_LENGTHTYPE_PERCENTAGE:
              return value / 100 * relative;
  
          case SVG_LENGTHTYPE_EMS:
              unit = fontSize;
              break;
          case SVG_LENGTHTYPE_EXS:
              unit = fontSize / 2;
              break;
  
          case SVG_LENGTHTYPE_CM:
              unit = (CGFloat)35.43307;
              break;
          case SVG_LENGTHTYPE_MM:
              unit = (CGFloat)3.543307;
              break;
          case SVG_LENGTHTYPE_IN:
              unit = 90;
              break;
          case SVG_LENGTHTYPE_PT:
              unit = 1.25;
              break;
          case SVG_LENGTHTYPE_PC:
              unit = 15;
              break;
  
          default:
          case SVG_LENGTHTYPE_UNKNOWN:
              return value;
      }
      return value * unit;
  }
  
  + (CGFloat)fromRelative:(ABI38_0_0RNSVGLength*)length
                relative:(CGFloat)relative {
      ABI38_0_0RNSVGLengthUnitType unitType = length.unit;
      CGFloat value = length.value;
      CGFloat unit = 1;
      switch (unitType) {
          case SVG_LENGTHTYPE_NUMBER:
          case SVG_LENGTHTYPE_PX:
              return value;
              break;
  
          case SVG_LENGTHTYPE_PERCENTAGE:
              return value / 100 * relative;
  
          case SVG_LENGTHTYPE_EMS:
              unit = 12;
              break;
          case SVG_LENGTHTYPE_EXS:
              unit = 6;
              break;
  
          case SVG_LENGTHTYPE_CM:
              unit = (CGFloat)35.43307;
              break;
          case SVG_LENGTHTYPE_MM:
              unit = (CGFloat)3.543307;
              break;
          case SVG_LENGTHTYPE_IN:
              unit = 90;
              break;
          case SVG_LENGTHTYPE_PT:
              unit = 1.25;
              break;
          case SVG_LENGTHTYPE_PC:
              unit = 15;
              break;
  
          default:
          case SVG_LENGTHTYPE_UNKNOWN:
              return value;
      }
      return value * unit;
  }
  
  @end
  