 fileprivate class UNDSideSlideBaseTransitionAnimator: NSObject, UIViewControllerAnimatedTransitioning {
     
     var timeInterval: TimeInterval
-    var config: UNDSideSlideTransitioningConfigModel
+    var config: UNDSideSlideTransitioningConfigModel?
     
     // Mark: - Init
-    init(timeInterval: TimeInterval, and config: UNDSideSlideTransitioningConfigModel) {
+    init(timeInterval: TimeInterval, and config: UNDSideSlideTransitioningConfigModel?) {
         self.timeInterval = timeInterval
         self.config = config
     }

    private var shouldComplete = false
    
    // Mark: - Init
    init(presentedViewController: UIViewController, presentingViewController: UIViewController?, and configureModel: UNDSideSlideTransitioningConfigModel) {
        self.configureModel = configureModel
        super.init(presentedViewController: presentedViewController, presenting: presentingViewController)
        self.dimmingView = self.setUpDimmingView(with: self.configureModel.maskEffect)
        if self.configureModel.couldDragPresentedView {
            let panGestureRecognizer = UIPanGestureRecognizer(target: self, action: #selector(self.onDrag(_:)))
            presentedViewController.view.addGestureRecognizer(panGestureRecognizer)
        }
        if self.configureModel.shouldDismissWhileClickBackground {
            let dismissTapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(self.onTapBackground(_:)))
            self.dimmingView.addGestureRecognizer(dismissTapGestureRecognizer)
        }
    }
    

    // Mark: - UIPresentationController
    override var frameOfPresentedViewInContainerView: CGRect {
        if let unWrappedContainerView = self.containerView {
            if let unWrappedConfigureModel = self.configureModel {
                return CGRect(origin: unWrappedConfigureModel.preferredOriginPoint(from: unWrappedContainerView)
                              , size: unWrappedConfigureModel.preferredSize)
            } else {
                return unWrappedContainerView.bounds
            }
        } else {
            return CGRect.zero
        }
