Ver código fonte

Merge branch 'develop_PDFReaderProNew' of git.kdan.cc:Mac_PDF/PDF_Office into develop_PDFReaderProNew

tangchao 1 ano atrás
pai
commit
7490684d31
100 arquivos alterados com 87146 adições e 212 exclusões
  1. 10 1
      PDF Office/PDF Master/AppDelegate.swift
  2. 918 0
      PDF Office/PDF Master/Class/AIInfo/AIConfigWindowController/AIConfigWindowController.swift
  3. 676 0
      PDF Office/PDF Master/Class/AIInfo/AIConfigWindowController/AIConfigWindowController.xib
  4. 84 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/AIChooseFile.imageset/AIChooseFile.pdf
  5. 22 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/AIChooseFile.imageset/Contents.json
  6. 84 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/AIChooseFile.imageset/ic.pdf
  7. 103 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/AICreditIcon.imageset/AICreditIcon.pdf
  8. 12 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/AICreditIcon.imageset/Contents.json
  9. 2981 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/AIDMGBG.imageset/AIDMGA.pdf
  10. 74550 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/AIDMGBG.imageset/AIDMGB.pdf
  11. 22 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/AIDMGBG.imageset/Contents.json
  12. 140 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/AIProofreading.imageset/AIProofreading.pdf
  13. 140 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/AIProofreading.imageset/AIProofreading12.pdf
  14. 22 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/AIProofreading.imageset/Contents.json
  15. 22 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/AIRewriting.imageset/Contents.json
  16. 154 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/AIRewriting.imageset/icon-3.pdf
  17. 154 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/AIRewriting.imageset/icon-4.pdf
  18. 22 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/AISummarize.imageset/Contents.json
  19. 143 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/AISummarize.imageset/icon-2.pdf
  20. 143 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/AISummarize.imageset/icon.pdf
  21. 22 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/AITranslate.imageset/Contents.json
  22. 175 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/AITranslate.imageset/icon-5.pdf
  23. 175 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/AITranslate.imageset/icon-6.pdf
  24. 105 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/AIchange.imageset/AIchange.pdf
  25. 12 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/AIchange.imageset/Contents.json
  26. 95 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/AItime.imageset/AItime.pdf
  27. 22 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/AItime.imageset/Contents.json
  28. 99 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/AItime.imageset/time.pdf
  29. 6 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/Contents.json
  30. 12 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/aiIconA.imageset/Contents.json
  31. 157 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/aiIconA.imageset/aiIconA.pdf
  32. 22 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/aiInfoIcon.imageset/Contents.json
  33. 94 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/aiInfoIcon.imageset/aiInfoIcon.pdf
  34. 94 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/aiInfoIcon.imageset/ic.pdf
  35. 12 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/aiPDF_Clear.imageset/Contents.json
  36. 172 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/aiPDF_Clear.imageset/aiPDF_Clear.pdf
  37. 12 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/aiTipBtnA.imageset/Contents.json
  38. BIN
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/aiTipBtnA.imageset/aiTipBtnA.pdf
  39. 22 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/ai_Appstore.imageset/Contents.json
  40. BIN
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/ai_Appstore.imageset/ai_Appstore.png
  41. BIN
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/ai_Appstore.imageset/img.png
  42. 12 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/ai_proofreading_empty.imageset/Contents.json
  43. 144 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/ai_proofreading_empty.imageset/ai_proofreading_empty.pdf
  44. 12 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/ai_rewriting_empty.imageset/Contents.json
  45. 158 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/ai_rewriting_empty.imageset/ai_rewriting_empty.pdf
  46. 12 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/ai_summary_Empty.imageset/Contents.json
  47. 147 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/ai_summary_Empty.imageset/aiFileEmpty.pdf
  48. 12 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/ai_translate_empty.imageset/Contents.json
  49. 181 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/ai_translate_empty.imageset/ai_translate_empty.pdf
  50. 21 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/creditEmptyIcon.imageset/Contents.json
  51. BIN
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/creditEmptyIcon.imageset/creditEmptyIcon.pdf
  52. 12 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/ic_btn_arrow_down.imageset/Contents.json
  53. 73 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/ic_btn_arrow_down.imageset/ic_btn_arrow_down.pdf
  54. 22 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/ic_else_alert.imageset/Contents.json
  55. 90 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/ic_else_alert.imageset/ic_else_alert 1.pdf
  56. 90 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/ic_else_alert.imageset/ic_else_alert.pdf
  57. 22 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/ic_else_info_large.imageset/Contents.json
  58. 93 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/ic_else_info_large.imageset/ic_else_info_large 1.pdf
  59. 93 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/ic_else_info_large.imageset/ic_else_info_large.pdf
  60. 12 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/img_licensecode_successful.imageset/Contents.json
  61. 86 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/img_licensecode_successful.imageset/img_licensecode_successful.pdf
  62. 12 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/pop-btn.imageset/Contents.json
  63. BIN
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/pop-btn.imageset/pop-btn.pdf
  64. 12 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/pop-btn_hover.imageset/Contents.json
  65. BIN
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/pop-btn_hover.imageset/pop-btn_hover.pdf
  66. 22 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/robot-gray.imageset/Contents.json
  67. 187 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/robot-gray.imageset/robot-gray 1.pdf
  68. 187 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/robot-gray.imageset/robot-gray.pdf
  69. 12 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/vipAbleIcon.imageset/Contents.json
  70. 81 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/vipAbleIcon.imageset/vipAbleIcon.pdf
  71. BIN
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/whatNew_AIGuide.imageset/AIGuide.png
  72. 12 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/whatNew_AIGuide.imageset/Contents.json
  73. 29 0
      PDF Office/PDF Master/Class/AIInfo/AIInfoConfig.swift
  74. 307 0
      PDF Office/PDF Master/Class/AIInfo/AIPurchaseWindowController/AIPurchaseWindowController.swift
  75. 218 0
      PDF Office/PDF Master/Class/AIInfo/AIPurchaseWindowController/AIPurchaseWindowController.xib
  76. 55 0
      PDF Office/PDF Master/Class/AIInfo/AITipIcon/AITipIconView.swift
  77. 54 0
      PDF Office/PDF Master/Class/AIInfo/AITipIcon/AITipIconView.xib
  78. 137 0
      PDF Office/PDF Master/Class/AIInfo/AITypeChooseView/AITypeChooseView.swift
  79. 279 0
      PDF Office/PDF Master/Class/AIInfo/AITypeChooseView/AITypeChooseView.xib
  80. 313 0
      PDF Office/PDF Master/Class/AIInfo/AIUserInfoController/AIUserInfoController.swift
  81. 480 0
      PDF Office/PDF Master/Class/AIInfo/AIUserInfoController/AIUserInfoController.xib
  82. 654 0
      PDF Office/PDF Master/Class/AIInfo/KMAIRequestServerManager.swift
  83. 2 0
      PDF Office/PDF Master/Class/GuideInfo/KMGuideConfig.swift
  84. 123 123
      PDF Office/PDF Master/Class/Home/ViewController/KMAIRewritingVC.swift
  85. 2 2
      PDF Office/PDF Master/Class/Home/ViewController/KMHomeViewController.swift
  86. 18 18
      PDF Office/PDF Master/Class/KMAdvertisement/Manager/KMAdvertisementManager.swift
  87. 3 3
      PDF Office/PDF Master/Class/KMLightMember/Manager/KMRequestServerManager.swift
  88. 57 0
      PDF Office/PDF Master/Class/PDFWindowController/Tools/FMTrackEventManager.swift
  89. 58 0
      PDF Office/PDF Master/Class/Purchase/DMG/Verification/VerificationManager/AIInfoManager.h
  90. 458 0
      PDF Office/PDF Master/Class/Purchase/DMG/Verification/VerificationManager/AIInfoManager.m
  91. 18 3
      PDF Office/PDF Master/Class/Purchase/DMG/Verification/VerificationManager/VerificationManager.h
  92. 16 5
      PDF Office/PDF Master/Class/Purchase/DMG/Verification/VerificationManager/VerificationManager.m
  93. 5 0
      PDF Office/PDF Master/Class/Purchase/IAPProductsManager.h
  94. 141 54
      PDF Office/PDF Master/Class/Purchase/IAPProductsManager.m
  95. 2 0
      PDF Office/PDF Master/Info.plist
  96. 1 0
      PDF Office/PDF Master/PDF_Reader_Pro DMG-Bridging-Header.h
  97. 1 0
      PDF Office/PDF Master/PDF_Reader_Pro Edition-Bridging-Header.h
  98. 1 0
      PDF Office/PDF Master/PDF_Reader_Pro-Bridging-Header.h
  99. 187 3
      PDF Office/PDF Reader Pro.xcodeproj/project.pbxproj
  100. 0 0
      PDF Office/PDF Reader Pro.xcodeproj/xcuserdata/kdanmobile.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist

+ 10 - 1
PDF Office/PDF Master/AppDelegate.swift

@@ -102,7 +102,16 @@ class AppDelegate: NSObject, NSApplicationDelegate, iRateDelegate{
         
         
 #endif
 #endif
         
         
-        
+        for string in ["Ubuntu-Bold","Ubuntu-Medium"] {
+            let fontURL = Bundle.main.url(forResource: string, withExtension: "ttf")
+            var error: Unmanaged<CFError>?
+            if !CTFontManagerRegisterFontsForURL(fontURL! as CFURL, .process, &error) {
+                print("Failed to register font!")
+            } else {
+                print("Font registered successfully!")
+            }
+             
+        }
     }
     }
     
     
     func initiRateData() {
     func initiRateData() {

+ 918 - 0
PDF Office/PDF Master/Class/AIInfo/AIConfigWindowController/AIConfigWindowController.swift

@@ -0,0 +1,918 @@
+//
+//  AIConfigWindowController.swift
+//  PDF Reader Pro Edition
+//
+//  Created by Niehaoyu on 2024/1/17.
+//
+
+import Cocoa
+
+@objcMembers class AIConfigWindowController: NSWindowController, NSTextFieldDelegate, NSTextViewDelegate {
+
+    @IBOutlet weak var contendBox: NSBox!
+    @IBOutlet weak var titleLabel: NSTextField!
+    @IBOutlet weak var titleTipBtn: KMButton!
+    
+    @IBOutlet weak var uploadBGView: NSView!
+    @IBOutlet weak var uploadItemBox: KMBox!
+    @IBOutlet weak var uploadDesLabel: NSTextField!
+    @IBOutlet weak var uploadPDFBtn: KMButton!
+    
+    @IBOutlet weak var fileBGView: NSView!
+    @IBOutlet weak var fileEmptyImage: NSImageView!
+    @IBOutlet weak var fileActionView: NSView!
+    @IBOutlet weak var fileActionLabel: NSTextField!
+    @IBOutlet weak var fileActionBtn: KMButton!
+    @IBOutlet weak var filePDFBGView: NSView!
+    @IBOutlet weak var filePDFHoverBtn: KMButton!
+    @IBOutlet weak var pdfCoverView: NSView!
+    @IBOutlet weak var pdfCoverImageView: NSImageView!
+    @IBOutlet weak var removePDFBtn: NSButton!
+    @IBOutlet weak var inputTextCountLabel: NSTextField!
+    @IBOutlet weak var fileSizeTipView: NSView!
+    @IBOutlet weak var fileSizeTipLabel: NSTextField!
+    @IBOutlet weak var pdfNameLbl: NSTextField!
+    @IBOutlet var fileEmptyTextView: NSTextView!
+    @IBOutlet weak var filePlaceholdLabel: NSTextField!
+    
+    
+    @IBOutlet weak var fileContendViewTopConst: NSLayoutConstraint!
+    
+    @IBOutlet weak var translateSepLineView: NSView!
+    @IBOutlet weak var translateConfigView: NSView!
+    
+    @IBOutlet weak var fromLanguageView: NSView!
+    @IBOutlet weak var fromLanguageLabel: NSTextField!
+    @IBOutlet weak var fromLanguageBtn: NSButton!
+    
+    @IBOutlet weak var toLanguageView: NSView!
+    @IBOutlet weak var toLanguageLabel: NSTextField!
+    @IBOutlet weak var toLanguageBtn: NSButton!
+    
+    @IBOutlet weak var translateResultView: NSView!
+    @IBOutlet weak var translateResultLabel: NSTextField!
+    @IBOutlet weak var translateResultSubLabel: NSTextField!
+    
+    
+    @IBOutlet weak var resultBGView: NSView!
+    @IBOutlet weak var resultEmptyImage: NSImageView!
+//    @IBOutlet weak var resultLabel: NSTextField!
+    @IBOutlet var aiResultTextView: NSTextView!
+    
+    @IBOutlet weak var cancelBtn: NSButton!
+    @IBOutlet weak var saveAsTextBtn: NSButton!
+    @IBOutlet weak var saveAsPDFBtn: NSButton!
+    
+    static var currentWindowController: AIConfigWindowController!
+    
+    var popOver: NSPopover!
+    
+    var configType: AIConfigType = .none
+    
+    var cancelHandle: ((_ windowVC: AIConfigWindowController) -> Void)?
+    
+    var fileActionenAble: Bool = false
+    
+    var aiConvertFinish: Bool = true
+    var filePath: String = ""
+    
+    var fromLanguage: String = ""
+    var toLanguage: String = ""
+    
+    var translateFinish: Bool = false
+    var translateFile: Bool = false
+    var translateResultPath: String = ""
+    
+    @objc static func currentWC() -> AIConfigWindowController {
+        if currentWindowController != nil {
+            return currentWindowController
+        } else {
+            let configWC: AIConfigWindowController = AIConfigWindowController.init(windowNibName: "AIConfigWindowController")
+            currentWindowController = configWC;
+            return currentWindowController
+        }
+    }
+    
+    override func windowDidLoad() {
+        super.windowDidLoad()
+
+        // Implement this method to handle any initialization after your window controller's window has been loaded from its nib file.
+        
+        self.titleLabel.font = NSFont.SFProTextSemiboldFont(13)
+        
+        self.titleTipBtn.mouseMoveCallback = {[unowned self] mouseEntered in
+            if mouseEntered {
+                var tipString = NSLocalizedString("Recommended file size: 10M or less.", comment: "")
+                if self.configType == .reWriting {
+                    tipString = NSLocalizedString("No more than 2000 characters.", comment: "")
+                } else if self.configType == .proofreading {
+                    tipString = NSLocalizedString("No more than 2000 characters.", comment: "")
+                } else if self.configType == .translate {
+                    tipString = NSLocalizedString("No more than 30 pages of a document.", comment: "")
+                }
+                let popViewController = KMToolbarItemPopViewController.init()
+                if self.popOver == nil {
+                    self.popOver = NSPopover.init()
+                }
+                self.popOver.contentViewController = popViewController
+                self.popOver.animates = false
+                self.popOver.behavior = .semitransient
+                self.popOver.contentSize = (popViewController.view.frame.size)
+                popViewController.updateWithHelpTip(helpTip: tipString)
+                self.popOver.show(relativeTo: self.titleTipBtn.frame, of: (self.window?.contentView)!, preferredEdge: .maxY)
+            } else {
+                self.popOver.close()
+            }
+        }
+        
+        self.uploadItemBox.borderWidth = 0
+        self.uploadItemBox.cornerRadius = 1
+        self.uploadItemBox.fillColor = KMAppearance.KMColor_Interactive_S0()
+        self.uploadDesLabel.font = NSFont.SFProTextRegularFont(13)
+        self.uploadDesLabel.textColor = KMAppearance.KMColor_Layout_H0()
+        self.uploadDesLabel.stringValue = NSLocalizedString("Choose", comment: "")
+        
+        self.uploadPDFBtn.mouseMoveCallback = {[unowned self] mouseEntered in
+            if mouseEntered {
+                self.uploadItemBox.fillColor = KMAppearance.KMColor_Interactive_S_1()
+            } else {
+                self.uploadItemBox.fillColor = KMAppearance.KMColor_Interactive_S0()
+            }
+        }
+        
+        self.fileBGView.wantsLayer = true
+        self.fileBGView.layer?.cornerRadius = 6
+        self.fileBGView.layer?.masksToBounds = true
+        self.fileBGView.layer?.borderWidth = 1
+        self.fileBGView.layer?.borderColor = KMAppearance.KMColor_Layout_L_2().cgColor
+        
+        self.fileSizeTipView.wantsLayer = true
+        self.fileSizeTipLabel.font = NSFont.SFProTextRegularFont(12)
+        self.fileSizeTipLabel.textColor = KMAppearance.KMColor_Layout_H0()
+        self.fileSizeTipLabel.stringValue = NSLocalizedString("Please upload a file smaller than 10M.", comment: "")
+        self.fileSizeTipView.isHidden = true
+        
+        self.pdfNameLbl.font = NSFont.SFProTextRegularFont(12)
+        self.pdfNameLbl.textColor = KMAppearance.KMColor_Layout_H0()
+        
+        self.resultBGView.wantsLayer = true
+        self.resultBGView.layer?.cornerRadius = 6
+        self.resultBGView.layer?.masksToBounds = true
+        
+        self.fileActionView.wantsLayer = true
+        self.fileActionView.layer?.cornerRadius = 1
+        self.fileActionView.layer?.masksToBounds = true
+        self.fileActionLabel.font = NSFont.SFProTextRegularFont(13)
+        
+        self.fileActionBtn.mouseMoveCallback = {[unowned self] mouseEntered in
+            if self.fileActionenAble == true {
+                if mouseEntered {
+                    self.fileActionView.layer?.backgroundColor = KMAppearance.KMColor_Interactive_M_1().cgColor
+                } else {
+                    self.fileActionView.layer?.backgroundColor = KMAppearance.KMColor_Interactive_M0().cgColor
+                }
+            }
+        }
+        
+        self.translateSepLineView.wantsLayer = true
+        
+        self.pdfCoverView.wantsLayer = true
+        self.pdfCoverView.layer?.cornerRadius = 2
+        self.pdfCoverView.layer?.borderWidth = 2
+        
+        let countFormatter = TextFieldFormatter.init()
+        countFormatter.setMaximumLength(2000)
+        self.inputTextCountLabel.formatter = countFormatter
+        self.inputTextCountLabel.delegate = self
+        
+        if KMAppearance.isDarkMode() {
+            self.contendBox.fillColor = NSColor(red: 44/255, green: 44/255, blue: 44/255, alpha: 1)
+            self.titleLabel.textColor = NSColor.white
+            self.resultBGView.layer?.backgroundColor = NSColor(red: 49/255, green: 49/255, blue: 49/255, alpha: 1).cgColor
+            self.inputTextCountLabel.textColor = KMAppearance.KMColor_Layout_W30()
+            self.fileSizeTipView.layer?.backgroundColor = NSColor(red: 251/255, green: 166/255, blue: 0, alpha: 1).cgColor
+            self.translateSepLineView.layer?.backgroundColor = NSColor.white.withAlphaComponent(0.05).cgColor
+            self.translateResultView.layer?.backgroundColor = NSColor.white.withAlphaComponent(0.05).cgColor
+            
+            self.pdfCoverView.layer?.borderColor = NSColor.white.withAlphaComponent(0.2).cgColor
+            self.pdfCoverView.layer?.backgroundColor = NSColor.white.withAlphaComponent(0.1).cgColor
+        } else {
+            self.contendBox.fillColor = NSColor.white
+            self.titleLabel.textColor = NSColor.black
+            self.resultBGView.layer?.backgroundColor = NSColor(red: 0, green: 0, blue: 0, alpha: 0.05).cgColor
+            self.inputTextCountLabel.textColor = KMAppearance.KMColor_Layout_B30()
+            self.fileSizeTipView.layer?.backgroundColor = NSColor(red: 253/255, green: 239/255, blue: 212/255, alpha: 1).cgColor
+            self.translateSepLineView.layer?.backgroundColor = NSColor.black.withAlphaComponent(0.05).cgColor
+            self.translateResultView.layer?.backgroundColor = NSColor.black.withAlphaComponent(0.05).cgColor
+            self.pdfCoverView.layer?.borderColor = NSColor.black.withAlphaComponent(0.12).cgColor
+            self.pdfCoverView.layer?.backgroundColor = NSColor.black.withAlphaComponent(0.04).cgColor
+        }
+        
+        self.fileEmptyTextView.backgroundColor = NSColor.clear
+        self.fileEmptyTextView.delegate = self
+        
+        self.window?.makeFirstResponder(nil)
+        
+        var languages = ["Automatic", "English", "Simplified Chinese", "Traditional Chinese", "Japanese", "Korean", "French", "Spanish", "Italian", "German", "Portuguese", "Russian", "Vietnamese", "Thai", "Arabic", "Greek", "Bulgarian", "Finnish", "Slovene", "Dutch", "Czech", "Swedish", "Polish", "Danish", "Romanian", "Hungarian"]
+        let menu = NSMenu.init()
+        for idx in 0...languages.count-1 {
+            let string = languages[idx]
+            let menuItem = NSMenuItem.init(title: string, action: #selector(menuItemClick(_:)), keyEquivalent: "")
+            menuItem.tag = 1000 + idx
+            menu.addItem(menuItem)
+        }
+        self.fromLanguageView?.menu = menu
+        self.fromLanguage = "Automatic"
+        
+        languages = ["English", "Simplified Chinese", "Traditional Chinese", "Japanese", "Korean", "French", "Spanish", "Italian", "German", "Portuguese", "Russian", "Vietnamese", "Thai", "Arabic", "Greek", "Bulgarian", "Finnish", "Slovene", "Dutch", "Czech", "Swedish", "Polish", "Danish", "Romanian", "Hungarian"]
+        var toMenu = NSMenu.init()
+        for idx in 0...languages.count-1 {
+            let string = languages[idx]
+            let menuItem = NSMenuItem.init(title: string, action: #selector(menuItemClick(_:)), keyEquivalent: "")
+            menuItem.tag = 3000 + idx
+            toMenu.addItem(menuItem)
+        }
+        self.toLanguageView?.menu = toMenu
+        self.toLanguage = "English"
+        
+        self.fromLanguageLabel.font = NSFont.SFProTextRegularFont(13)
+        self.toLanguageLabel.font = NSFont.SFProTextRegularFont(13)
+        self.fromLanguageLabel.textColor = KMAppearance.KMColor_Layout_H0()
+        self.toLanguageLabel.textColor = KMAppearance.KMColor_Layout_H0()
+        
+        self.fromLanguageLabel.stringValue = self.fromLanguage
+        self.toLanguageLabel.stringValue = self.toLanguage
+        
+        self.removePDFBtn.isHidden = true
+        self.filePDFHoverBtn.mouseMoveCallback = {[unowned self] mouseEntered in
+            if mouseEntered {
+                self.removePDFBtn.isHidden = false
+            } else {
+                self.removePDFBtn.isHidden = true
+            }
+        }
+        
+        self.cancelBtn.title = NSLocalizedString("Cancel", comment: "")
+        self.saveAsTextBtn.title = NSLocalizedString("Save as TXT", comment: "")
+        self.saveAsPDFBtn.title = NSLocalizedString("Save as PDF", comment: "")
+        self.translateResultLabel.stringValue = NSLocalizedString("Translation Completion", comment: "")
+        self.translateResultSubLabel.stringValue = NSLocalizedString("Click \"Save as PDF\" to save the result as a PDF file.", comment: "")
+
+        self.translateResultView.isHidden = true
+        self.translateResultView.wantsLayer = true
+        
+        
+        if KMAppearance.isDarkMode() {
+            self.translateResultLabel.textColor = NSColor.white
+            self.translateResultSubLabel.textColor = NSColor.white
+        } else {
+            self.translateResultLabel.textColor = NSColor.black.withAlphaComponent(0.5)
+            self.translateResultSubLabel.textColor = NSColor.black.withAlphaComponent(0.5)
+        }
+        
+        self.translateResultLabel.font = NSFont.SFProTextSemiboldFont(13)
+        self.translateResultSubLabel.font = NSFont.SFProTextRegularFont(13)
+        
+        self.aiResultTextView.font = NSFont.SFProTextRegularFont(14)
+        self.aiResultTextView.textColor = KMAppearance.KMColor_Layout_H0()
+        self.aiResultTextView.backgroundColor = NSColor.clear
+        self.aiResultTextView.isEditable = false
+        
+        self.fileEmptyTextView.font = NSFont.SFProTextRegularFont(14)
+        self.fileEmptyTextView.textColor = KMAppearance.KMColor_Layout_H0()
+        
+    }
+    
+    func getFileSize(atPath filePath : String) -> CGFloat {
+        guard let dict = try? FileManager.default.attributesOfItem(atPath: filePath) as NSDictionary else {
+            return 0
+        }
+        return CGFloat(dict.fileSize())
+    }
+    
+    func refreshUI() -> Void {
+        if self.configType == .summarize {
+            self.titleLabel.stringValue = NSLocalizedString("AI Summarize", comment: "")
+            self.fileEmptyImage.image = NSImage(named: "ai_summary_Empty")
+        } else if self.configType == .reWriting {
+            self.titleLabel.stringValue = NSLocalizedString("AI Rewrite", comment: "")
+            self.fileEmptyImage.image = NSImage(named: "ai_rewriting_empty")
+        } else if self.configType == .proofreading {
+            self.titleLabel.stringValue = NSLocalizedString("AI Proofread", comment: "")
+            self.fileEmptyImage.image = NSImage(named: "ai_proofreading_empty")
+        } else if self.configType == .translate {
+            self.titleLabel.stringValue = NSLocalizedString("AI Translate", comment: "")
+            self.fileEmptyImage.image = NSImage(named: "ai_translate_empty")
+        }
+        
+        self.translateResultView.isHidden = true
+        self.translateConfigView.isHidden = true
+        self.translateSepLineView.isHidden = true
+        
+        if self.configType == .reWriting ||
+            self.configType == .proofreading {
+            self.uploadBGView.isHidden = true
+            self.fileContendViewTopConst.constant = 52
+            self.filePDFBGView.isHidden = true
+        } else {
+            self.uploadBGView.isHidden = false
+            
+            self.fileContendViewTopConst.constant = 92
+            self.filePDFBGView.isHidden = false
+            if self.configType == .translate {
+                self.fileContendViewTopConst.constant = 137
+                self.translateConfigView.isHidden = false
+                self.translateSepLineView.isHidden = false
+            }
+        }
+        
+        self.reloadData()
+    }
+    
+    func clearData() -> Void {
+        self.fileEmptyTextView.string = ""
+        self.aiResultTextView.string = ""
+        self.filePath = ""
+        
+        self.translateFinish = false
+        self.translateFile = false
+    }
+    
+    func reloadData() -> Void {
+        self.clearData()
+        
+        self.fileEmptyTextView.isEditable = true
+        self.inputTextCountLabel.isHidden = true
+        if self.configType == .summarize {
+            self.fileEmptyTextView.isEditable = false
+            self.filePlaceholdLabel.placeholderString = NSLocalizedString("Start by uploading a document (pdf).", comment: "")
+        } else if self.configType == .reWriting {
+            self.inputTextCountLabel.isHidden = false
+            self.filePlaceholdLabel.placeholderString = NSLocalizedString("Start by typing, pasting (⌘ + V) text", comment: "")
+        } else if self.configType == .proofreading {
+            self.inputTextCountLabel.isHidden = false
+            self.filePlaceholdLabel.placeholderString = NSLocalizedString("Start by typing, pasting (⌘ + V) text", comment: "")
+        } else if self.configType == .translate {
+            self.inputTextCountLabel.isHidden = false
+            self.filePlaceholdLabel.placeholderString = NSLocalizedString("Start by typing, pasting (⌘ + V) text, or uploading a document (pdf).", comment: "")
+        }
+        
+        self.updateActionViewUI()
+        
+        self.updateResultViewUI()
+        
+    }
+    
+    //MARK: 更新左侧UI
+    func updateActionViewUI() -> Void{
+        self.fileSizeTipView.isHidden = true
+        
+        if self.filePath.count > 0 || self.fileEmptyTextView.string.count > 0 {
+            self.enableActionView(true)
+            self.filePlaceholdLabel.isHidden = true
+        } else {
+            self.enableActionView(false)
+            self.filePlaceholdLabel.isHidden = false
+        }
+        
+        if self.filePath.count > 0 {
+            self.fileEmptyTextView.isHidden = true
+            self.filePDFBGView.isHidden = false
+            
+            let document = CPDFDocument.init(url: URL(fileURLWithPath: self.filePath))
+            if document?.isLocked == true || document == nil {
+                self.filePath = ""
+                self.updateActionViewUI()
+                return
+            }
+            DispatchQueue.main.async {
+                let page = document?.page(at: 0)
+                let image = page?.thumbnail(of: page!.size)
+                self.pdfCoverImageView.image = image
+            } 
+            
+            let filePathURL = URL(fileURLWithPath: self.filePath)
+            let parentDirectory = filePathURL.lastPathComponent
+            self.pdfNameLbl.stringValue = parentDirectory 
+            
+            self.inputTextCountLabel.isHidden = true
+        } else {
+            self.fileEmptyTextView.isHidden = false
+            self.filePDFBGView.isHidden = true
+            
+            self.pdfCoverImageView.image = nil
+            
+            self.inputTextCountLabel.isHidden = false
+            if self.configType == .summarize {
+                self.inputTextCountLabel.isHidden = true
+            }
+        }
+        
+        self.inputTextCountLabel.stringValue = String(format: "%ld", self.fileEmptyTextView.string.count) + "/2000"
+        if self.fileEmptyTextView.string.count == 2000 {
+            self.inputTextCountLabel.textColor = KMAppearance.KMColor_Status_Err()
+        } else {
+            if KMAppearance.isDarkMode() {
+                self.inputTextCountLabel.textColor = KMAppearance.KMColor_Layout_W30()
+            } else {
+                self.inputTextCountLabel.textColor = KMAppearance.KMColor_Layout_B30()
+            }
+        }
+        
+        if self.aiResultTextView.string.count > 0 && (self.fileEmptyTextView.string.count > 0 || self.filePath.count > 0){
+            self.fileActionLabel.stringValue = NSLocalizedString("Redo (1 credit)", comment: "")
+            self.fileActionLabel.stringValue = NSLocalizedString("Redo (1 credit)", comment: "")
+        } else {
+            if self.configType == .summarize {
+                self.fileActionLabel.stringValue = NSLocalizedString("Summarize", comment: "") + NSLocalizedString("(1 credit)", comment: "")
+            } else if self.configType == .reWriting {
+                self.fileActionLabel.stringValue = NSLocalizedString("Rewrite", comment: "") + NSLocalizedString("(1 credit)", comment: "")
+            } else if self.configType == .proofreading {
+                self.fileActionLabel.stringValue = NSLocalizedString("Proofread", comment: "") + NSLocalizedString("(1 credit)", comment: "")
+            } else if self.configType == .translate {
+                self.fileActionLabel.stringValue = NSLocalizedString("Translate", comment: "") + NSLocalizedString("(1 credit)", comment: "")
+            }
+        }
+        
+    }
+    
+    func enableActionView(_ enable: Bool) -> Void {
+        if enable {
+            self.fileActionView.layer?.backgroundColor = KMAppearance.KMColor_Interactive_M0().cgColor
+            self.fileActionLabel.textColor = NSColor.white
+            self.fileActionBtn.isEnabled = true
+        } else {
+            self.fileActionView.layer?.backgroundColor = KMAppearance.KMColor_Interactive_M0().withAlphaComponent(0.4).cgColor
+            self.fileActionLabel.textColor = NSColor.white.withAlphaComponent(0.4)
+            self.fileActionBtn.isEnabled = false
+        }
+        self.fileActionenAble = enable
+        
+        if self.filePath.count > 0 || self.fileEmptyTextView.string.count > 0 {
+            self.filePlaceholdLabel.isHidden = true
+            self.fileEmptyImage.isHidden = true
+        } else {
+            self.filePlaceholdLabel.isHidden = false
+            self.fileEmptyImage.isHidden = false
+        }
+    }
+    
+    func updateResultViewUI() -> Void{
+        if self.aiResultTextView.string.count > 0 {
+            self.resultEmptyImage.isHidden = true
+            self.saveAsTextBtn.isEnabled = true
+            self.saveAsPDFBtn.isEnabled = true
+        } else {
+            self.resultEmptyImage.isHidden = false
+            self.saveAsTextBtn.isEnabled = false
+            self.saveAsPDFBtn.isEnabled = false
+        }
+        
+        if self.configType == .translate && self.translateFinish == true {
+            self.saveAsTextBtn.isEnabled = true
+            self.saveAsPDFBtn.isEnabled = true
+            
+            if self.translateFile == true {
+                self.translateResultView.isHidden = false
+                self.saveAsTextBtn.isEnabled = false
+            } else {
+                self.translateResultView.isHidden = true
+                
+            }
+            if translateResultView.isHidden == false {
+                self.resultEmptyImage.isHidden = true
+            }
+        }
+    }
+    
+    func addWaingView(_ view: NSView) -> Void {
+        self.removeWaitingView(view)
+        
+        let wView = WaitingView.init(frame: view.bounds)
+        wView.autoresizingMask = [.width, .height]
+        view.addSubview(wView)
+        wView.startAnimation()
+    }
+    
+    func removeWaitingView(_ view: NSView) -> Void {
+        for view in view.subviews {
+            if view.className == WaitingView.className() {
+                view.removeFromSuperview()
+                break
+            }
+        }
+    }
+    
+    //MARK: - IBAction
+    @IBAction func chooseFileAction(_ sender: KMButton) {
+        let openPanel = NSOpenPanel()
+        openPanel.canChooseDirectories = true
+        openPanel.canChooseFiles = true
+        openPanel.allowsMultipleSelection = false;
+        openPanel.allowedFileTypes = ["pdf"]
+        openPanel.beginSheetModal(for: self.window!) { result in
+            if result == .OK {
+                let fileURL = openPanel.urls.first
+                let fileSize = self.getFileSize(atPath: fileURL!.path)
+                
+                if fileSize/(1024*1024) > 10 {
+                    self.fileSizeTipView.isHidden = false
+                    DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 5) {
+                        self.fileSizeTipView.isHidden = true
+                    }
+                } else {
+                    self.filePath = fileURL!.path
+                    self.fileEmptyTextView.string = ""
+                    self.updateActionViewUI()
+                }
+            }
+        }
+    }
+    
+    @IBAction func chooseLanguageAction(_ sender: NSButton) {
+        if sender == self.fromLanguageBtn {
+            let menu = self.fromLanguageView?.menu
+            menu?.popUp(positioning: menu?.item(at: 0), at: CGPoint(x: 0, y: 15), in: sender)
+        } else if sender == self.toLanguageBtn {
+            let menu = self.toLanguageView?.menu
+            menu?.popUp(positioning: menu?.item(at: 0), at: CGPoint(x: 0, y: 15), in: sender)
+        }
+    }
+    
+    @objc func menuItemClick(_ item: NSMenuItem) {
+        if item.tag < 2000 {
+            self.fromLanguage = item.title
+        } else {
+            self.toLanguage = item.title
+        }
+        self.fromLanguageLabel.stringValue = self.fromLanguage
+        self.toLanguageLabel.stringValue = self.toLanguage
+    }
+    
+    
+    @IBAction func removePDFAction(_ sender: NSButton) {
+        self.filePath = ""
+        self.updateActionViewUI()
+        self.updateResultViewUI()
+    }
+    
+    
+    @IBAction func startAIFunction(_ sender: KMButton) {
+        
+        let newStatus: Bool = KMCloudServer.isConnectionAvailable()
+        if !newStatus {
+            let alert = NSAlert()
+            alert.alertStyle = .critical
+            alert.messageText = NSLocalizedString("Please make sure your internet connection is available.", comment: "")
+            alert.runModal()
+            return
+        }
+        
+        if self.configType == .summarize {
+            if FileManager.default.fileExists(atPath: self.filePath) {
+                self.aiResultTextView.string = ""
+                self.addWaingView(self.resultBGView)
+                self.enableActionView(false)
+                self.removePDFBtn.isEnabled = false
+                self.aiConvertFinish = false
+//                DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 1) {
+                KMAIRequestServerManager.defaultManager.aiAction(content: self.filePath, state: .extractSummaryFile) { wrapper in
+                    DispatchQueue.main.async {
+                        self.aiConvertFinish = true
+                        self.removePDFBtn.isEnabled = true
+                        self.removeWaitingView(self.resultBGView)
+                        self.updateActionViewUI()
+                        
+                        let success = wrapper.success
+                        if success {
+                            let resultStr = wrapper.content
+                            self.aiResultTextView.string = resultStr
+                            self.updateActionViewUI()
+                            self.updateResultViewUI()
+                        } else {
+                            let alert = NSAlert()
+                            alert.alertStyle = .critical
+                            alert.messageText = wrapper.content
+                            alert.runModal()
+                            return
+                        }
+                    }
+                }
+            }
+        } else if self.configType == .reWriting {
+            self.aiResultTextView.string = ""
+            self.addWaingView(self.resultBGView)
+            self.enableActionView(false)
+            self.removePDFBtn.isEnabled = false
+            self.aiConvertFinish = false
+//            DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 1) {
+            KMAIRequestServerManager.defaultManager.aiAction(content: self.fileEmptyTextView.string,
+                                                             state: .rewrite) { wrapper in
+                DispatchQueue.main.async {
+                    self.aiConvertFinish = true
+                    self.removePDFBtn.isEnabled = true
+                    self.removeWaitingView(self.resultBGView)
+                    self.updateActionViewUI()
+                    
+                    let success = wrapper.success
+                    if success {
+                        let resultStr = wrapper.content
+                        self.aiResultTextView.string = resultStr
+                        self.updateActionViewUI()
+                        self.updateResultViewUI()
+                    } else {
+                        let alert = NSAlert()
+                        alert.alertStyle = .critical
+                        alert.messageText = wrapper.content
+                        alert.runModal()
+                        return
+                    }
+                }
+            }
+        } else if self.configType == .proofreading {
+            self.aiResultTextView.string = ""
+            self.addWaingView(self.resultBGView)
+            self.enableActionView(false)
+            self.removePDFBtn.isEnabled = false
+            self.aiConvertFinish = false
+//            DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 1) {
+            KMAIRequestServerManager.defaultManager.aiAction(content: self.fileEmptyTextView.string,
+                                                             state: .correctTypos) { wrapper in
+                DispatchQueue.main.async {
+                    self.aiConvertFinish = true
+                    self.removePDFBtn.isEnabled = true
+                    self.removeWaitingView(self.resultBGView)
+                    self.updateActionViewUI()
+                    
+                    let success = wrapper.success
+                    if success {
+                        let resultStr = wrapper.content
+                        self.aiResultTextView.string = resultStr
+                        self.updateActionViewUI()
+                        self.updateResultViewUI()
+                    } else {
+                        let alert = NSAlert()
+                        alert.alertStyle = .critical
+                        alert.messageText = wrapper.content
+                        alert.runModal()
+                        return
+                    }
+                }
+            }
+        } else if self.configType == .translate {
+            self.aiResultTextView.string = ""
+            self.addWaingView(self.resultBGView)
+            self.enableActionView(false)
+            self.translateFinish = false
+            self.translateResultView.isHidden = true
+//            if self.filePath.count > 0 {
+                self.translateFile = true
+                self.removePDFBtn.isEnabled = false
+                self.aiConvertFinish = false
+                DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 1) {
+//                KMAIRequestServerManager.defaultManager.aiAction(content: self.filePath,
+//                                                                 state: .fileTranslate,
+//                                                                 from: self.fromLanguage,
+//                                                                 to: self.toLanguage) { wrapper in
+                    DispatchQueue.main.async {
+                        self.aiConvertFinish = true
+                        self.removePDFBtn.isEnabled = true
+                        self.removeWaitingView(self.resultBGView)
+                        self.updateActionViewUI()
+                        
+//                        let success = wrapper.success
+//                        if success {
+                            self.translateFinish = true
+                            self.translateResultView.isHidden = false
+//                        let resultStr = wrapper.content
+                        let resultStr = "wrapper.content"
+
+                            self.translateResultPath = resultStr
+                            self.updateActionViewUI()
+                            self.updateResultViewUI()
+//                        } else {
+//                            let alert = NSAlert()
+//                            alert.alertStyle = .critical
+//                            alert.messageText = wrapper.content
+//                            alert.runModal()
+//                            return
+//                        }
+                    }
+                };
+//            } else {
+//            self.translateFile = false
+//                self.removePDFBtn.isEnabled = false
+//                self.aiConvertFinish = false
+////                DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 1) {
+//                KMAIRequestServerManager.defaultManager.aiAction(content: self.fileEmptyTextView.string,
+//                                                                 state: .textTranslate,
+//                                                                 from: self.fromLanguage,
+//                                                                 to: self.toLanguage) { wrapper in
+//                    DispatchQueue.main.async {
+//                        self.aiConvertFinish = true
+//                        self.removePDFBtn.isEnabled = true
+//                        self.removeWaitingView(self.resultBGView)
+//                        self.updateActionViewUI()
+//                        
+//                        let success = wrapper.success
+//                        if success {
+//                            self.translateFinish = true
+//                            self.translateResultView.isHidden = false
+//                            
+//                            let resultStr = wrapper.content
+//                            self.aiResultTextView.string = resultStr
+//                            
+//                            self.updateActionViewUI()
+//                            self.updateResultViewUI()
+//                        } else {
+//                            let alert = NSAlert()
+//                            alert.alertStyle = .critical
+//                            alert.messageText = wrapper.content
+//                            alert.runModal()
+//                            
+//                            self.updateResultViewUI()
+//                            return
+//                        }
+//                    }
+//                };
+//            }
+            
+        }
+    }
+    
+    @IBAction func languageChangeAction(_ sender: Any) {
+        let curLan = self.fromLanguage
+        self.fromLanguage = self.toLanguage
+        self.toLanguage = curLan
+        
+        
+        self.fromLanguageLabel.stringValue = self.fromLanguage
+        self.toLanguageLabel.stringValue = self.toLanguage
+        
+    }
+    
+    
+    @IBAction func cancelAction(_ sender: NSButton) {
+        DispatchQueue.main.async {
+            self.removeWaitingView(self.resultBGView)
+            self.updateActionViewUI()
+        }
+        if self.aiConvertFinish == false {
+            let alert = NSAlert()
+            alert.alertStyle = .critical
+            alert.messageText = NSLocalizedString("The task is already in process, if you cancel the process, AI Credit will not be returned, please confirm if you still need to cancel?", comment: "")
+            alert.addButton(withTitle: NSLocalizedString("Back ", comment: ""))
+            alert.addButton(withTitle: NSLocalizedString("Confirm Cancel", comment: ""))
+            let response = alert.runModal()
+            if response.rawValue == 1001 {
+                self.confirmCancelAction()
+            }
+            return
+        }
+        if self.aiResultTextView.string.count > 0 {
+            if KMFunctionGuideWindowController.availableShow(.aiInfoResultSave) == true {
+                KMFunctionGuideWindowController.setDidShowFor(.aiInfoResultSave)
+                let alert = NSAlert()
+                alert.alertStyle = .critical
+                alert.messageText = NSLocalizedString("The results are not saved. Do you want to save them in other formats?", comment: "")
+                alert.addButton(withTitle: NSLocalizedString("Yes", comment: ""))
+                alert.addButton(withTitle: NSLocalizedString("No", comment: ""))
+                let response = alert.runModal()
+                if response.rawValue == 1001 {
+                    self.cancelAction(self.cancelBtn)
+                }
+                return
+                
+            }
+        }
+        
+        self.clearData()
+        
+        guard let callBack = self.cancelHandle else {
+            return
+        }
+        callBack(self)
+        
+    }
+    
+    func confirmCancelAction() -> Void {
+        self.clearData()
+        
+        guard let callBack = self.cancelHandle else {
+            return
+        }
+        callBack(self)
+    }
+    
+    @IBAction func saveAsTextAction(_ sender: Any) {
+        
+        let fileName = "Untitled"
+        let outputSavePanel = NSSavePanel()
+        outputSavePanel.allowedFileTypes = ["txt"]
+        outputSavePanel.nameFieldStringValue = fileName
+        let result = outputSavePanel.runModal()
+        if result == .OK {
+            let filePath = outputSavePanel.url?.path
+            do {
+                try self.aiResultTextView.string.write(to: outputSavePanel.url!, atomically: true, encoding: .utf8)
+                
+                NSWorkspace.shared.activateFileViewerSelecting([URL(fileURLWithPath: filePath!)])
+                KMFunctionGuideWindowController.setDidShowFor(.aiInfoResultSave)
+            } catch {
+                
+            }
+            
+        }
+        
+    }
+    
+    @IBAction func saveAsPDFAction(_ sender: Any) {
+        let fileName = "Untitled"
+        let outputSavePanel = NSSavePanel()
+        outputSavePanel.allowedFileTypes = ["pdf"]
+        outputSavePanel.nameFieldStringValue = fileName
+        let result = outputSavePanel.runModal()
+        if result == .OK {
+            let filePath = outputSavePanel.url?.path
+            do {
+                if self.translateFile == true {
+                    do {
+                        if self.translateResultPath.count > 0 {
+                            if FileManager.default.fileExists(atPath: filePath!) {
+                                do {
+                                    try FileManager.default.removeItem(atPath: filePath!)
+//                                    print("删除旧文件成功")
+                                } catch {
+//                                    print("删除旧文件失败:\(error)")
+                                }
+                            }
+                            try FileManager.default.copyItem(atPath: self.translateResultPath, toPath: filePath!)
+                            NSWorkspace.shared.activateFileViewerSelecting([URL(fileURLWithPath: filePath!)])
+                        }
+                    } catch {
+                        
+                    }
+                } else {
+                    let text = self.aiResultTextView.string
+                    self.createPDF(from: text, saveTo: filePath!)
+                    
+                    NSWorkspace.shared.activateFileViewerSelecting([URL(fileURLWithPath: filePath!)])
+                }
+                KMFunctionGuideWindowController.setDidShowFor(.aiInfoResultSave)
+            } catch {
+                
+            }
+        }
+    }
+    
+    func textDidChange(_ notification: Notification) {
+        if let textView = notification.object as? NSTextView, textView == self.fileEmptyTextView {
+            // 获取文本字段的当前字符数
+            let currentText = textView.string
+            let currentCount = currentText.count
+            
+            // 如果超过最大字符数,将文本截断为最大字符数,并设置回文本字段
+            if currentCount > 2000 {
+                let endIndex = currentText.index(currentText.startIndex, offsetBy: 2000)
+                let truncatedText = String(currentText[..<endIndex])
+                textView.string = truncatedText
+            }
+        }
+        self.updateActionViewUI()
+    }
+    
+    override func mouseDown(with event: NSEvent) {
+        super.mouseDown(with: event)
+        
+        self.window?.makeFirstResponder(nil)
+    }
+    
+    func createPDF(from text: String, saveTo path: String) {
+        let attributedText = NSAttributedString(string: text)
+        let pdfData = NSMutableData()
+        
+        let pdfConsumer = CGDataConsumer(data: pdfData)!
+        var mediaBox = CGRect(x: 0, y: 0, width: 612, height: 792) // 设置页面尺寸,这里使用默认的美国信纸尺寸
+        
+        let pdfContext = CGContext(consumer: pdfConsumer, mediaBox: &mediaBox, nil)!
+        pdfContext.beginPage(mediaBox: &mediaBox)
+        pdfContext.textMatrix = .identity
+        pdfContext.setShouldAntialias(true)
+        
+        let frame = mediaBox.insetBy(dx: 20, dy: 20) // 设置文字边距
+        
+        let framesetter = CTFramesetterCreateWithAttributedString(attributedText as CFAttributedString)
+        let framePath = CGPath(rect: frame, transform: nil)
+        let frameRef = CTFramesetterCreateFrame(framesetter, CFRangeMake(0, attributedText.length), framePath, nil)
+        CTFrameDraw(frameRef, pdfContext)
+        
+        pdfContext.endPage()
+        pdfContext.closePDF()
+        
+        pdfData.write(toFile: path, atomically: true)
+        print("PDF 文件已保存至:\(path)")
+    }
+    
+    
+    
+}

+ 676 - 0
PDF Office/PDF Master/Class/AIInfo/AIConfigWindowController/AIConfigWindowController.xib

@@ -0,0 +1,676 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="22505" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
+    <dependencies>
+        <deployment identifier="macosx"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="22505"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <customObject id="-2" userLabel="File's Owner" customClass="AIConfigWindowController" customModule="PDF_Reader_Pro" customModuleProvider="target">
+            <connections>
+                <outlet property="aiResultTextView" destination="8Pl-WZ-PMg" id="gey-6v-FLW"/>
+                <outlet property="cancelBtn" destination="cjg-NV-eFm" id="8a4-cB-N8M"/>
+                <outlet property="contendBox" destination="2gG-B2-LaH" id="Lf1-cU-PDP"/>
+                <outlet property="fileActionBtn" destination="mcI-kL-lCj" id="Uxw-Be-5YP"/>
+                <outlet property="fileActionLabel" destination="C3P-7I-hTS" id="b1x-TN-k5f"/>
+                <outlet property="fileActionView" destination="OCT-gl-vo1" id="79Y-X1-MLz"/>
+                <outlet property="fileBGView" destination="vhY-2U-dEh" id="cuz-1I-CuS"/>
+                <outlet property="fileContendViewTopConst" destination="XIw-1b-L9B" id="LFi-TT-b0j"/>
+                <outlet property="fileEmptyImage" destination="lXw-Ha-gj9" id="pbe-tp-Q8d"/>
+                <outlet property="fileEmptyTextView" destination="oKN-no-DpZ" id="2Ef-VX-8wb"/>
+                <outlet property="filePDFBGView" destination="m3e-e0-Got" id="v9U-wB-bgm"/>
+                <outlet property="filePDFHoverBtn" destination="CK5-9H-oCH" id="e7G-Ec-wn1"/>
+                <outlet property="filePlaceholdLabel" destination="DZZ-c7-BO4" id="Sot-q9-M5H"/>
+                <outlet property="fileSizeTipLabel" destination="cbF-ht-Wss" id="aYd-dl-v7e"/>
+                <outlet property="fileSizeTipView" destination="smB-nJ-vqw" id="eGC-Qw-0sh"/>
+                <outlet property="fromLanguageBtn" destination="Ugd-ew-8ke" id="aN9-2E-BSn"/>
+                <outlet property="fromLanguageLabel" destination="opL-nV-Ip6" id="7NR-3v-TpZ"/>
+                <outlet property="fromLanguageView" destination="Ht2-c4-DeI" id="gWv-QQ-bgg"/>
+                <outlet property="inputTextCountLabel" destination="rLU-to-koS" id="O2n-ac-wDL"/>
+                <outlet property="pdfCoverImageView" destination="e53-8s-bQz" id="TfH-Z9-wJe"/>
+                <outlet property="pdfCoverView" destination="bg6-NM-Ulw" id="Bls-gI-zpe"/>
+                <outlet property="pdfNameLbl" destination="aMp-WQ-a3z" id="mEh-0x-ohL"/>
+                <outlet property="removePDFBtn" destination="RhY-Ci-lLd" id="kwc-EB-Laa"/>
+                <outlet property="resultBGView" destination="DCc-v0-M7o" id="tEr-RA-yh7"/>
+                <outlet property="resultEmptyImage" destination="pfU-N7-nWJ" id="HoF-vV-a25"/>
+                <outlet property="saveAsPDFBtn" destination="e21-Rh-Sls" id="aMt-YU-eI5"/>
+                <outlet property="saveAsTextBtn" destination="ZjF-9J-AhT" id="gdL-xx-8sD"/>
+                <outlet property="titleLabel" destination="wOE-fG-NKH" id="gpH-es-qPE"/>
+                <outlet property="titleTipBtn" destination="g9S-q1-kux" id="WLz-cB-cbe"/>
+                <outlet property="toLanguageBtn" destination="df8-Rm-DcQ" id="ARV-Jo-Rr7"/>
+                <outlet property="toLanguageLabel" destination="lA6-HV-STg" id="3lf-I2-hIe"/>
+                <outlet property="toLanguageView" destination="AHC-e4-uz8" id="XEw-BW-WHW"/>
+                <outlet property="translateConfigView" destination="WzQ-UG-alX" id="Eal-5I-fIV"/>
+                <outlet property="translateResultLabel" destination="jww-Dg-L78" id="Qkw-2j-4NQ"/>
+                <outlet property="translateResultSubLabel" destination="Ucz-80-lpx" id="98b-Yb-UTP"/>
+                <outlet property="translateResultView" destination="te9-qF-hEX" id="Jhf-Pm-8gZ"/>
+                <outlet property="translateSepLineView" destination="4Yw-6I-7pH" id="ZJX-tG-LgW"/>
+                <outlet property="uploadBGView" destination="BOi-Jk-fgK" id="90Z-7X-eBP"/>
+                <outlet property="uploadDesLabel" destination="WVa-fY-QHd" id="Kc1-7H-Ua4"/>
+                <outlet property="uploadItemBox" destination="J8Z-2N-iYK" id="OX3-sF-k8G"/>
+                <outlet property="uploadPDFBtn" destination="h8f-cp-JuX" id="qKn-Wb-Amd"/>
+                <outlet property="window" destination="F0z-JX-Cv5" id="gIp-Ho-8D9"/>
+            </connections>
+        </customObject>
+        <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
+        <customObject id="-3" userLabel="Application" customClass="NSObject"/>
+        <window title="Window" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" animationBehavior="default" titlebarAppearsTransparent="YES" titleVisibility="hidden" id="F0z-JX-Cv5">
+            <windowStyleMask key="styleMask" titled="YES" fullSizeContentView="YES"/>
+            <windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
+            <rect key="contentRect" x="196" y="240" width="795" height="551"/>
+            <rect key="screenRect" x="0.0" y="0.0" width="1920" height="1055"/>
+            <view key="contentView" id="se5-gp-TjO">
+                <rect key="frame" x="0.0" y="0.0" width="795" height="551"/>
+                <autoresizingMask key="autoresizingMask"/>
+                <subviews>
+                    <box boxType="custom" borderWidth="0.0" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="2gG-B2-LaH">
+                        <rect key="frame" x="0.0" y="0.0" width="795" height="551"/>
+                        <view key="contentView" id="5E2-pO-j3A">
+                            <rect key="frame" x="0.0" y="0.0" width="795" height="551"/>
+                            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                            <subviews>
+                                <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="wOE-fG-NKH">
+                                    <rect key="frame" x="18" y="515" width="37" height="16"/>
+                                    <textFieldCell key="cell" lineBreakMode="clipping" title="Label" id="GIj-9f-Kuy">
+                                        <font key="font" usesAppearanceFont="YES"/>
+                                        <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                        <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                    </textFieldCell>
+                                </textField>
+                                <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="g9S-q1-kux" customClass="KMButton">
+                                    <rect key="frame" x="57" y="515" width="16" height="16"/>
+                                    <buttonCell key="cell" type="bevel" bezelStyle="rounded" image="ic_else_info_large" imagePosition="only" alignment="center" imageScaling="proportionallyDown" inset="2" id="UY8-74-Jal">
+                                        <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                                        <font key="font" metaFont="system"/>
+                                    </buttonCell>
+                                    <constraints>
+                                        <constraint firstAttribute="width" constant="16" id="ciC-Bj-H3A"/>
+                                        <constraint firstAttribute="height" constant="16" id="mgN-Mh-p3u"/>
+                                    </constraints>
+                                </button>
+                                <customView translatesAutoresizingMaskIntoConstraints="NO" id="BOi-Jk-fgK">
+                                    <rect key="frame" x="20" y="467" width="755" height="32"/>
+                                    <subviews>
+                                        <box boxType="custom" borderType="none" borderWidth="0.0" cornerRadius="5" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="J8Z-2N-iYK" customClass="KMBox">
+                                            <rect key="frame" x="0.0" y="0.0" width="128" height="32"/>
+                                            <view key="contentView" id="DAf-iA-ILp">
+                                                <rect key="frame" x="0.0" y="0.0" width="128" height="32"/>
+                                                <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                                                <subviews>
+                                                    <customView translatesAutoresizingMaskIntoConstraints="NO" id="1i8-Yd-8jc">
+                                                        <rect key="frame" x="16" y="4" width="96" height="24"/>
+                                                        <subviews>
+                                                            <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="WVa-fY-QHd">
+                                                                <rect key="frame" x="18" y="4" width="80" height="16"/>
+                                                                <textFieldCell key="cell" lineBreakMode="clipping" alignment="center" title="Upload PDF" id="DJK-9a-Q9Q">
+                                                                    <font key="font" metaFont="system"/>
+                                                                    <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                                                    <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                                                </textFieldCell>
+                                                            </textField>
+                                                            <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="tVK-9N-vBO">
+                                                                <rect key="frame" x="0.0" y="4" width="16" height="16"/>
+                                                                <constraints>
+                                                                    <constraint firstAttribute="height" constant="16" id="Es7-Yk-pND"/>
+                                                                    <constraint firstAttribute="width" constant="16" id="fPM-UM-fRj"/>
+                                                                </constraints>
+                                                                <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="axesIndependently" image="AIChooseFile" id="DU8-aT-FMV"/>
+                                                            </imageView>
+                                                        </subviews>
+                                                        <constraints>
+                                                            <constraint firstItem="WVa-fY-QHd" firstAttribute="leading" secondItem="tVK-9N-vBO" secondAttribute="trailing" constant="4" id="Cga-Gz-OQT"/>
+                                                            <constraint firstAttribute="height" constant="24" id="DoZ-Un-vlQ"/>
+                                                            <constraint firstItem="WVa-fY-QHd" firstAttribute="centerY" secondItem="1i8-Yd-8jc" secondAttribute="centerY" id="Ky9-KX-h9y"/>
+                                                            <constraint firstItem="tVK-9N-vBO" firstAttribute="centerY" secondItem="1i8-Yd-8jc" secondAttribute="centerY" id="TzZ-pd-c0E"/>
+                                                            <constraint firstAttribute="trailing" secondItem="WVa-fY-QHd" secondAttribute="trailing" id="dc8-Eu-l7T"/>
+                                                            <constraint firstItem="tVK-9N-vBO" firstAttribute="leading" secondItem="1i8-Yd-8jc" secondAttribute="leading" id="gZ3-Io-iqE"/>
+                                                        </constraints>
+                                                    </customView>
+                                                    <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="h8f-cp-JuX" customClass="KMButton">
+                                                        <rect key="frame" x="0.0" y="0.0" width="128" height="32"/>
+                                                        <buttonCell key="cell" type="bevel" bezelStyle="rounded" alignment="center" imageScaling="proportionallyDown" inset="2" id="YKy-EF-VLO">
+                                                            <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                                                            <font key="font" metaFont="system"/>
+                                                        </buttonCell>
+                                                        <connections>
+                                                            <action selector="chooseFileAction:" target="-2" id="bVE-K0-hm8"/>
+                                                        </connections>
+                                                    </button>
+                                                </subviews>
+                                                <constraints>
+                                                    <constraint firstItem="h8f-cp-JuX" firstAttribute="leading" secondItem="DAf-iA-ILp" secondAttribute="leading" id="HHq-ho-svr"/>
+                                                    <constraint firstItem="1i8-Yd-8jc" firstAttribute="leading" secondItem="DAf-iA-ILp" secondAttribute="leading" constant="16" id="L8X-ZX-HyD"/>
+                                                    <constraint firstAttribute="bottom" secondItem="h8f-cp-JuX" secondAttribute="bottom" id="OaW-NR-xta"/>
+                                                    <constraint firstItem="h8f-cp-JuX" firstAttribute="top" secondItem="DAf-iA-ILp" secondAttribute="top" id="TF5-AE-3OY"/>
+                                                    <constraint firstAttribute="trailing" secondItem="1i8-Yd-8jc" secondAttribute="trailing" constant="16" id="a34-cA-wWz"/>
+                                                    <constraint firstItem="1i8-Yd-8jc" firstAttribute="centerY" secondItem="DAf-iA-ILp" secondAttribute="centerY" id="fAZ-HI-HsJ"/>
+                                                    <constraint firstAttribute="trailing" secondItem="h8f-cp-JuX" secondAttribute="trailing" id="sTt-CT-FVq"/>
+                                                    <constraint firstItem="1i8-Yd-8jc" firstAttribute="centerX" secondItem="DAf-iA-ILp" secondAttribute="centerX" id="wSY-6A-HHN"/>
+                                                </constraints>
+                                            </view>
+                                            <constraints>
+                                                <constraint firstAttribute="height" constant="32" id="AMA-ZI-UOK"/>
+                                            </constraints>
+                                        </box>
+                                    </subviews>
+                                    <constraints>
+                                        <constraint firstItem="J8Z-2N-iYK" firstAttribute="top" secondItem="BOi-Jk-fgK" secondAttribute="top" id="995-f5-i8n"/>
+                                        <constraint firstAttribute="height" constant="32" id="MrD-mm-hnF"/>
+                                        <constraint firstItem="J8Z-2N-iYK" firstAttribute="leading" secondItem="BOi-Jk-fgK" secondAttribute="leading" id="eVa-9Z-R5m"/>
+                                    </constraints>
+                                </customView>
+                                <customView translatesAutoresizingMaskIntoConstraints="NO" id="4Yw-6I-7pH">
+                                    <rect key="frame" x="20" y="458" width="755" height="1"/>
+                                    <constraints>
+                                        <constraint firstAttribute="height" constant="1" id="oLc-6S-iHA"/>
+                                    </constraints>
+                                </customView>
+                                <customView translatesAutoresizingMaskIntoConstraints="NO" id="WzQ-UG-alX">
+                                    <rect key="frame" x="20" y="414" width="755" height="36"/>
+                                    <subviews>
+                                        <customView translatesAutoresizingMaskIntoConstraints="NO" id="Ht2-c4-DeI">
+                                            <rect key="frame" x="0.0" y="0.0" width="77" height="36"/>
+                                            <subviews>
+                                                <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="opL-nV-Ip6">
+                                                    <rect key="frame" x="10" y="10" width="37" height="16"/>
+                                                    <textFieldCell key="cell" lineBreakMode="clipping" title="Label" id="v77-Bh-0cb">
+                                                        <font key="font" usesAppearanceFont="YES"/>
+                                                        <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                                        <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                                    </textFieldCell>
+                                                </textField>
+                                                <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="OWN-J3-EAy">
+                                                    <rect key="frame" x="49" y="10" width="16" height="16"/>
+                                                    <constraints>
+                                                        <constraint firstAttribute="width" constant="16" id="Pd6-jD-7Q7"/>
+                                                        <constraint firstAttribute="height" constant="16" id="hyy-b8-mkj"/>
+                                                    </constraints>
+                                                    <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="ic_btn_arrow_down" id="UmJ-ZC-Lxj"/>
+                                                </imageView>
+                                                <button translatesAutoresizingMaskIntoConstraints="NO" id="Ugd-ew-8ke">
+                                                    <rect key="frame" x="0.0" y="0.0" width="77" height="36"/>
+                                                    <buttonCell key="cell" type="bevel" bezelStyle="rounded" alignment="center" imageScaling="proportionallyDown" inset="2" id="sn7-Bz-AVr">
+                                                        <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                                                        <font key="font" metaFont="system"/>
+                                                    </buttonCell>
+                                                    <connections>
+                                                        <action selector="chooseLanguageAction:" target="-2" id="3Mz-6k-a2a"/>
+                                                    </connections>
+                                                </button>
+                                            </subviews>
+                                            <constraints>
+                                                <constraint firstItem="OWN-J3-EAy" firstAttribute="centerY" secondItem="Ht2-c4-DeI" secondAttribute="centerY" id="5yd-Cq-2aL"/>
+                                                <constraint firstAttribute="trailing" secondItem="Ugd-ew-8ke" secondAttribute="trailing" id="D2C-hR-txm"/>
+                                                <constraint firstItem="OWN-J3-EAy" firstAttribute="leading" secondItem="opL-nV-Ip6" secondAttribute="trailing" constant="4" id="JKC-Zw-9b0"/>
+                                                <constraint firstItem="Ugd-ew-8ke" firstAttribute="top" secondItem="Ht2-c4-DeI" secondAttribute="top" id="SuB-wX-c69"/>
+                                                <constraint firstItem="opL-nV-Ip6" firstAttribute="centerY" secondItem="Ht2-c4-DeI" secondAttribute="centerY" id="jen-Z0-rPF"/>
+                                                <constraint firstAttribute="bottom" secondItem="Ugd-ew-8ke" secondAttribute="bottom" id="lOR-2i-fMk"/>
+                                                <constraint firstItem="Ugd-ew-8ke" firstAttribute="leading" secondItem="Ht2-c4-DeI" secondAttribute="leading" id="mAD-M4-d5c"/>
+                                                <constraint firstAttribute="trailing" secondItem="OWN-J3-EAy" secondAttribute="trailing" constant="12" id="pTY-Br-AEN"/>
+                                                <constraint firstItem="opL-nV-Ip6" firstAttribute="leading" secondItem="Ht2-c4-DeI" secondAttribute="leading" constant="12" id="sBj-B3-fIC"/>
+                                            </constraints>
+                                        </customView>
+                                        <button translatesAutoresizingMaskIntoConstraints="NO" id="NJ8-8e-0SF">
+                                            <rect key="frame" x="366" y="6" width="24" height="24"/>
+                                            <buttonCell key="cell" type="bevel" bezelStyle="rounded" image="AIchange" imagePosition="only" alignment="center" imageScaling="proportionallyDown" inset="2" id="jRM-u8-FH3">
+                                                <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                                                <font key="font" metaFont="system"/>
+                                            </buttonCell>
+                                            <connections>
+                                                <action selector="languageChangeAction:" target="-2" id="tQL-Vt-Qbz"/>
+                                            </connections>
+                                        </button>
+                                        <customView translatesAutoresizingMaskIntoConstraints="NO" id="AHC-e4-uz8">
+                                            <rect key="frame" x="410" y="0.0" width="77" height="36"/>
+                                            <subviews>
+                                                <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="lA6-HV-STg">
+                                                    <rect key="frame" x="10" y="10" width="37" height="16"/>
+                                                    <textFieldCell key="cell" lineBreakMode="clipping" title="Label" id="2yX-ow-5PZ">
+                                                        <font key="font" usesAppearanceFont="YES"/>
+                                                        <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                                        <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                                    </textFieldCell>
+                                                </textField>
+                                                <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="Fw8-MV-7u7">
+                                                    <rect key="frame" x="49" y="10" width="16" height="16"/>
+                                                    <constraints>
+                                                        <constraint firstAttribute="height" constant="16" id="EMi-Cj-Het"/>
+                                                        <constraint firstAttribute="width" constant="16" id="Wrh-p9-kWV"/>
+                                                    </constraints>
+                                                    <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="ic_btn_arrow_down" id="mZe-Nh-iE1"/>
+                                                </imageView>
+                                                <button translatesAutoresizingMaskIntoConstraints="NO" id="df8-Rm-DcQ">
+                                                    <rect key="frame" x="0.0" y="0.0" width="77" height="36"/>
+                                                    <buttonCell key="cell" type="bevel" bezelStyle="rounded" alignment="center" imageScaling="proportionallyDown" inset="2" id="YoK-Bu-5Sj">
+                                                        <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                                                        <font key="font" metaFont="system"/>
+                                                    </buttonCell>
+                                                    <connections>
+                                                        <action selector="chooseLanguageAction:" target="-2" id="ECN-Gb-ig4"/>
+                                                    </connections>
+                                                </button>
+                                            </subviews>
+                                            <constraints>
+                                                <constraint firstAttribute="trailing" secondItem="Fw8-MV-7u7" secondAttribute="trailing" constant="12" id="0W5-n9-0B4"/>
+                                                <constraint firstAttribute="trailing" secondItem="df8-Rm-DcQ" secondAttribute="trailing" id="26P-6C-AWw"/>
+                                                <constraint firstAttribute="bottom" secondItem="df8-Rm-DcQ" secondAttribute="bottom" id="9uo-Mk-Jue"/>
+                                                <constraint firstItem="Fw8-MV-7u7" firstAttribute="leading" secondItem="lA6-HV-STg" secondAttribute="trailing" constant="4" id="BPg-BR-uKo"/>
+                                                <constraint firstItem="lA6-HV-STg" firstAttribute="leading" secondItem="AHC-e4-uz8" secondAttribute="leading" constant="12" id="Gsw-ja-c1J"/>
+                                                <constraint firstItem="lA6-HV-STg" firstAttribute="centerY" secondItem="AHC-e4-uz8" secondAttribute="centerY" id="UJf-1c-zyQ"/>
+                                                <constraint firstItem="Fw8-MV-7u7" firstAttribute="centerY" secondItem="AHC-e4-uz8" secondAttribute="centerY" id="mKV-K1-3PR"/>
+                                                <constraint firstItem="df8-Rm-DcQ" firstAttribute="leading" secondItem="AHC-e4-uz8" secondAttribute="leading" id="qTh-CQ-qnY"/>
+                                                <constraint firstItem="df8-Rm-DcQ" firstAttribute="top" secondItem="AHC-e4-uz8" secondAttribute="top" id="t5J-tl-No9"/>
+                                            </constraints>
+                                        </customView>
+                                    </subviews>
+                                    <constraints>
+                                        <constraint firstItem="Ht2-c4-DeI" firstAttribute="top" secondItem="WzQ-UG-alX" secondAttribute="top" id="3tT-4d-kK2"/>
+                                        <constraint firstAttribute="height" constant="36" id="Jbk-op-hjN"/>
+                                        <constraint firstItem="Ht2-c4-DeI" firstAttribute="leading" secondItem="WzQ-UG-alX" secondAttribute="leading" id="NOZ-bN-FDK"/>
+                                        <constraint firstAttribute="bottom" secondItem="AHC-e4-uz8" secondAttribute="bottom" id="R5k-oO-Ynk"/>
+                                        <constraint firstItem="NJ8-8e-0SF" firstAttribute="centerY" secondItem="WzQ-UG-alX" secondAttribute="centerY" id="RFa-fN-riD"/>
+                                        <constraint firstItem="AHC-e4-uz8" firstAttribute="leading" secondItem="NJ8-8e-0SF" secondAttribute="trailing" constant="20" id="SJw-Js-c6L"/>
+                                        <constraint firstItem="AHC-e4-uz8" firstAttribute="top" secondItem="WzQ-UG-alX" secondAttribute="top" id="TC3-jJ-OEd"/>
+                                        <constraint firstItem="NJ8-8e-0SF" firstAttribute="centerX" secondItem="WzQ-UG-alX" secondAttribute="centerX" id="q6h-0x-u06"/>
+                                        <constraint firstAttribute="bottom" secondItem="Ht2-c4-DeI" secondAttribute="bottom" id="vvL-j0-00D"/>
+                                    </constraints>
+                                </customView>
+                                <customView translatesAutoresizingMaskIntoConstraints="NO" id="lpm-YO-38e">
+                                    <rect key="frame" x="20" y="66" width="755" height="348"/>
+                                    <subviews>
+                                        <customView translatesAutoresizingMaskIntoConstraints="NO" id="vhY-2U-dEh">
+                                            <rect key="frame" x="0.0" y="0.0" width="372" height="348"/>
+                                            <subviews>
+                                                <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="lXw-Ha-gj9">
+                                                    <rect key="frame" x="146" y="134" width="80" height="80"/>
+                                                    <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="ai_summary_Empty" id="pt0-aG-mtC"/>
+                                                </imageView>
+                                                <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="DZZ-c7-BO4">
+                                                    <rect key="frame" x="14" y="237" width="344" height="100"/>
+                                                    <constraints>
+                                                        <constraint firstAttribute="height" constant="100" id="1kI-fu-NOl"/>
+                                                        <constraint firstAttribute="width" constant="340" id="ev0-ec-2L2"/>
+                                                    </constraints>
+                                                    <textFieldCell key="cell" id="lLa-XN-gkv">
+                                                        <font key="font" metaFont="system"/>
+                                                        <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                                        <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                                    </textFieldCell>
+                                                </textField>
+                                                <scrollView borderType="none" horizontalLineScroll="10" horizontalPageScroll="10" verticalLineScroll="10" verticalPageScroll="10" hasHorizontalScroller="NO" hasVerticalScroller="NO" translatesAutoresizingMaskIntoConstraints="NO" id="KMZ-te-yuU">
+                                                    <rect key="frame" x="12" y="60" width="348" height="276"/>
+                                                    <clipView key="contentView" drawsBackground="NO" id="fkJ-Lh-puY">
+                                                        <rect key="frame" x="0.0" y="0.0" width="348" height="276"/>
+                                                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                                                        <subviews>
+                                                            <textView wantsLayer="YES" importsGraphics="NO" richText="NO" verticallyResizable="YES" spellingCorrection="YES" smartInsertDelete="YES" id="oKN-no-DpZ">
+                                                                <rect key="frame" x="0.0" y="0.0" width="348" height="276"/>
+                                                                <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                                                                <color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
+                                                                <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                                                <size key="minSize" width="348" height="276"/>
+                                                                <size key="maxSize" width="348" height="10000000"/>
+                                                                <color key="insertionPointColor" name="textInsertionPointColor" catalog="System" colorSpace="catalog"/>
+                                                            </textView>
+                                                        </subviews>
+                                                    </clipView>
+                                                    <scroller key="horizontalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="YES" id="pxl-ej-oUf">
+                                                        <rect key="frame" x="-100" y="-100" width="225" height="15"/>
+                                                        <autoresizingMask key="autoresizingMask"/>
+                                                    </scroller>
+                                                    <scroller key="verticalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="NO" id="eNA-33-xLv">
+                                                        <rect key="frame" x="-100" y="-100" width="15" height="135"/>
+                                                        <autoresizingMask key="autoresizingMask"/>
+                                                    </scroller>
+                                                </scrollView>
+                                                <customView translatesAutoresizingMaskIntoConstraints="NO" id="m3e-e0-Got">
+                                                    <rect key="frame" x="16" y="60" width="340" height="276"/>
+                                                    <subviews>
+                                                        <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="CK5-9H-oCH" customClass="KMButton">
+                                                            <rect key="frame" x="0.0" y="0.0" width="340" height="276"/>
+                                                            <buttonCell key="cell" type="bevel" bezelStyle="rounded" alignment="center" imageScaling="proportionallyDown" inset="2" id="AQd-ya-Kbw">
+                                                                <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                                                                <font key="font" metaFont="system"/>
+                                                            </buttonCell>
+                                                        </button>
+                                                        <customView translatesAutoresizingMaskIntoConstraints="NO" id="bg6-NM-Ulw">
+                                                            <rect key="frame" x="94" y="39" width="152" height="198"/>
+                                                            <subviews>
+                                                                <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="e53-8s-bQz">
+                                                                    <rect key="frame" x="4" y="4" width="144" height="190"/>
+                                                                    <constraints>
+                                                                        <constraint firstAttribute="width" constant="144" id="NcI-w8-tO9"/>
+                                                                        <constraint firstAttribute="height" constant="190" id="gy1-zN-Y6w"/>
+                                                                    </constraints>
+                                                                    <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyUpOrDown" id="PMD-81-9Up"/>
+                                                                </imageView>
+                                                            </subviews>
+                                                            <constraints>
+                                                                <constraint firstItem="e53-8s-bQz" firstAttribute="centerY" secondItem="bg6-NM-Ulw" secondAttribute="centerY" id="M49-Ly-dCF"/>
+                                                                <constraint firstAttribute="width" constant="152" id="QUu-7l-aEm"/>
+                                                                <constraint firstItem="e53-8s-bQz" firstAttribute="centerX" secondItem="bg6-NM-Ulw" secondAttribute="centerX" id="SC0-2E-3L7"/>
+                                                                <constraint firstAttribute="height" constant="198" id="fFd-z7-fOy"/>
+                                                            </constraints>
+                                                        </customView>
+                                                        <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="aMp-WQ-a3z">
+                                                            <rect key="frame" x="92" y="12" width="156" height="16"/>
+                                                            <textFieldCell key="cell" lineBreakMode="truncatingMiddle" alignment="center" title="Label" id="rp2-ri-asc">
+                                                                <font key="font" metaFont="system"/>
+                                                                <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                                                <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                                            </textFieldCell>
+                                                        </textField>
+                                                        <button translatesAutoresizingMaskIntoConstraints="NO" id="RhY-Ci-lLd">
+                                                            <rect key="frame" x="236" y="227" width="20" height="20"/>
+                                                            <buttonCell key="cell" type="bevel" bezelStyle="rounded" image="aiPDF_Clear" imagePosition="only" alignment="center" imageScaling="proportionallyDown" inset="2" id="bka-vK-Zfi">
+                                                                <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                                                                <font key="font" metaFont="system"/>
+                                                            </buttonCell>
+                                                            <constraints>
+                                                                <constraint firstAttribute="height" constant="20" id="IQ6-ze-7rg"/>
+                                                                <constraint firstAttribute="width" constant="20" id="w5p-ch-f61"/>
+                                                            </constraints>
+                                                            <connections>
+                                                                <action selector="removePDFAction:" target="-2" id="A46-EW-siC"/>
+                                                            </connections>
+                                                        </button>
+                                                    </subviews>
+                                                    <constraints>
+                                                        <constraint firstItem="aMp-WQ-a3z" firstAttribute="leading" secondItem="bg6-NM-Ulw" secondAttribute="leading" id="3sp-VO-c1M"/>
+                                                        <constraint firstItem="CK5-9H-oCH" firstAttribute="top" secondItem="m3e-e0-Got" secondAttribute="top" id="88b-dk-ux5"/>
+                                                        <constraint firstItem="bg6-NM-Ulw" firstAttribute="centerY" secondItem="m3e-e0-Got" secondAttribute="centerY" id="CML-dz-AIw"/>
+                                                        <constraint firstItem="RhY-Ci-lLd" firstAttribute="top" secondItem="bg6-NM-Ulw" secondAttribute="top" constant="-10" id="FJw-cJ-hYZ"/>
+                                                        <constraint firstAttribute="trailing" secondItem="CK5-9H-oCH" secondAttribute="trailing" id="FK3-R5-nVY"/>
+                                                        <constraint firstItem="bg6-NM-Ulw" firstAttribute="centerX" secondItem="m3e-e0-Got" secondAttribute="centerX" id="HsS-Gr-8YW"/>
+                                                        <constraint firstItem="CK5-9H-oCH" firstAttribute="leading" secondItem="m3e-e0-Got" secondAttribute="leading" id="RHv-OR-ULU"/>
+                                                        <constraint firstItem="aMp-WQ-a3z" firstAttribute="top" secondItem="bg6-NM-Ulw" secondAttribute="bottom" constant="11" id="jpb-l1-Hu0"/>
+                                                        <constraint firstItem="aMp-WQ-a3z" firstAttribute="trailing" secondItem="bg6-NM-Ulw" secondAttribute="trailing" id="pt7-CL-xPw"/>
+                                                        <constraint firstAttribute="bottom" secondItem="CK5-9H-oCH" secondAttribute="bottom" id="s4S-52-b1i"/>
+                                                        <constraint firstItem="RhY-Ci-lLd" firstAttribute="trailing" secondItem="bg6-NM-Ulw" secondAttribute="trailing" constant="10" id="uy1-6O-blb"/>
+                                                    </constraints>
+                                                </customView>
+                                                <customView translatesAutoresizingMaskIntoConstraints="NO" id="OCT-gl-vo1">
+                                                    <rect key="frame" x="295" y="12" width="65" height="32"/>
+                                                    <subviews>
+                                                        <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="C3P-7I-hTS">
+                                                            <rect key="frame" x="14" y="8" width="37" height="16"/>
+                                                            <textFieldCell key="cell" lineBreakMode="clipping" title="Label" id="Ahn-eI-DNh">
+                                                                <font key="font" usesAppearanceFont="YES"/>
+                                                                <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                                                <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                                            </textFieldCell>
+                                                        </textField>
+                                                        <button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="mcI-kL-lCj" customClass="KMButton">
+                                                            <rect key="frame" x="0.0" y="0.0" width="65" height="32"/>
+                                                            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                                                            <buttonCell key="cell" type="bevel" bezelStyle="rounded" alignment="center" imageScaling="proportionallyDown" inset="2" id="w74-S1-3t7">
+                                                                <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                                                                <font key="font" metaFont="system"/>
+                                                            </buttonCell>
+                                                            <connections>
+                                                                <action selector="startAIFunction:" target="-2" id="PLk-WB-mMc"/>
+                                                            </connections>
+                                                        </button>
+                                                    </subviews>
+                                                    <constraints>
+                                                        <constraint firstAttribute="trailing" secondItem="C3P-7I-hTS" secondAttribute="trailing" constant="16" id="EVZ-Bb-LvS"/>
+                                                        <constraint firstItem="C3P-7I-hTS" firstAttribute="centerX" secondItem="OCT-gl-vo1" secondAttribute="centerX" id="Hdl-f0-IDp"/>
+                                                        <constraint firstItem="C3P-7I-hTS" firstAttribute="centerY" secondItem="OCT-gl-vo1" secondAttribute="centerY" id="bqA-tW-czd"/>
+                                                        <constraint firstAttribute="height" constant="32" id="d6w-aP-UbR"/>
+                                                        <constraint firstItem="C3P-7I-hTS" firstAttribute="leading" secondItem="OCT-gl-vo1" secondAttribute="leading" constant="16" id="xMU-wH-Lq0"/>
+                                                    </constraints>
+                                                </customView>
+                                                <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="rLU-to-koS">
+                                                    <rect key="frame" x="10" y="12" width="49" height="16"/>
+                                                    <textFieldCell key="cell" lineBreakMode="clipping" title="0/2000" id="pqg-CL-IlW">
+                                                        <font key="font" metaFont="system"/>
+                                                        <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                                        <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                                    </textFieldCell>
+                                                </textField>
+                                                <customView translatesAutoresizingMaskIntoConstraints="NO" id="smB-nJ-vqw">
+                                                    <rect key="frame" x="0.0" y="318" width="372" height="30"/>
+                                                    <subviews>
+                                                        <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="AX0-Vi-q7q">
+                                                            <rect key="frame" x="8" y="8" width="14" height="14"/>
+                                                            <constraints>
+                                                                <constraint firstAttribute="width" constant="14" id="8DN-Kw-f8j"/>
+                                                                <constraint firstAttribute="height" constant="14" id="Rz5-wk-gRG"/>
+                                                            </constraints>
+                                                            <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="ic_else_alert" id="yZT-EO-BZb"/>
+                                                        </imageView>
+                                                        <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="cbF-ht-Wss">
+                                                            <rect key="frame" x="24" y="9" width="232" height="16"/>
+                                                            <textFieldCell key="cell" lineBreakMode="clipping" title="Please upload a file smaller than 10M." id="bJ2-72-Q1x">
+                                                                <font key="font" usesAppearanceFont="YES"/>
+                                                                <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                                                <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                                            </textFieldCell>
+                                                        </textField>
+                                                    </subviews>
+                                                    <constraints>
+                                                        <constraint firstItem="AX0-Vi-q7q" firstAttribute="leading" secondItem="smB-nJ-vqw" secondAttribute="leading" constant="8" id="ILq-eR-WJN"/>
+                                                        <constraint firstItem="cbF-ht-Wss" firstAttribute="leading" secondItem="AX0-Vi-q7q" secondAttribute="trailing" constant="4" id="MIa-xp-HH7"/>
+                                                        <constraint firstItem="AX0-Vi-q7q" firstAttribute="centerY" secondItem="smB-nJ-vqw" secondAttribute="centerY" id="QJU-VH-lYS"/>
+                                                        <constraint firstAttribute="height" constant="30" id="vWZ-Z6-rmi"/>
+                                                        <constraint firstItem="cbF-ht-Wss" firstAttribute="centerY" secondItem="smB-nJ-vqw" secondAttribute="centerY" constant="-2" id="wQC-Ny-mub"/>
+                                                    </constraints>
+                                                </customView>
+                                            </subviews>
+                                            <constraints>
+                                                <constraint firstItem="rLU-to-koS" firstAttribute="leading" secondItem="vhY-2U-dEh" secondAttribute="leading" constant="12" id="16l-Sz-faF"/>
+                                                <constraint firstAttribute="bottom" secondItem="KMZ-te-yuU" secondAttribute="bottom" constant="60" id="2R1-em-foJ"/>
+                                                <constraint firstAttribute="trailing" secondItem="smB-nJ-vqw" secondAttribute="trailing" id="31h-cR-w8M"/>
+                                                <constraint firstItem="lXw-Ha-gj9" firstAttribute="centerX" secondItem="vhY-2U-dEh" secondAttribute="centerX" id="65s-ZH-mNE"/>
+                                                <constraint firstItem="m3e-e0-Got" firstAttribute="leading" secondItem="vhY-2U-dEh" secondAttribute="leading" constant="16" id="FMN-eA-Nzq"/>
+                                                <constraint firstAttribute="bottom" secondItem="m3e-e0-Got" secondAttribute="bottom" constant="60" id="Fxh-8s-Gjt"/>
+                                                <constraint firstAttribute="bottom" secondItem="OCT-gl-vo1" secondAttribute="bottom" constant="12" id="IFO-3q-XwA"/>
+                                                <constraint firstItem="DZZ-c7-BO4" firstAttribute="leading" secondItem="vhY-2U-dEh" secondAttribute="leading" constant="16" id="MKh-u9-YtY"/>
+                                                <constraint firstItem="m3e-e0-Got" firstAttribute="top" secondItem="vhY-2U-dEh" secondAttribute="top" constant="12" id="Ucy-vb-Dmt"/>
+                                                <constraint firstItem="smB-nJ-vqw" firstAttribute="top" secondItem="vhY-2U-dEh" secondAttribute="top" id="YbY-9a-exx"/>
+                                                <constraint firstAttribute="bottom" secondItem="rLU-to-koS" secondAttribute="bottom" constant="12" id="bG6-zC-Jc7"/>
+                                                <constraint firstItem="smB-nJ-vqw" firstAttribute="leading" secondItem="vhY-2U-dEh" secondAttribute="leading" id="cUp-V2-VIc"/>
+                                                <constraint firstItem="KMZ-te-yuU" firstAttribute="leading" secondItem="vhY-2U-dEh" secondAttribute="leading" constant="12" id="dDa-DL-SZk"/>
+                                                <constraint firstItem="lXw-Ha-gj9" firstAttribute="centerY" secondItem="vhY-2U-dEh" secondAttribute="centerY" id="dGT-Wi-ZSW"/>
+                                                <constraint firstItem="DZZ-c7-BO4" firstAttribute="top" secondItem="vhY-2U-dEh" secondAttribute="top" constant="11" id="fJ7-AY-Dar"/>
+                                                <constraint firstAttribute="trailing" secondItem="KMZ-te-yuU" secondAttribute="trailing" constant="12" id="iR4-gn-qX9"/>
+                                                <constraint firstItem="KMZ-te-yuU" firstAttribute="top" secondItem="vhY-2U-dEh" secondAttribute="top" constant="12" id="l3f-24-Tgc"/>
+                                                <constraint firstAttribute="trailing" secondItem="m3e-e0-Got" secondAttribute="trailing" constant="16" id="tFt-2A-grh"/>
+                                                <constraint firstAttribute="trailing" secondItem="OCT-gl-vo1" secondAttribute="trailing" constant="12" id="zB5-G9-gru"/>
+                                            </constraints>
+                                        </customView>
+                                        <customView translatesAutoresizingMaskIntoConstraints="NO" id="DCc-v0-M7o">
+                                            <rect key="frame" x="384" y="0.0" width="371" height="348"/>
+                                            <subviews>
+                                                <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="pfU-N7-nWJ">
+                                                    <rect key="frame" x="145" y="134" width="80" height="80"/>
+                                                    <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="robot-gray" id="5Zz-fU-Fzh"/>
+                                                </imageView>
+                                                <scrollView borderType="none" horizontalLineScroll="10" horizontalPageScroll="10" verticalLineScroll="10" verticalPageScroll="10" hasHorizontalScroller="NO" hasVerticalScroller="NO" translatesAutoresizingMaskIntoConstraints="NO" id="SUH-oQ-4P9">
+                                                    <rect key="frame" x="10" y="12" width="350" height="324"/>
+                                                    <clipView key="contentView" drawsBackground="NO" id="SJg-Fh-mPy">
+                                                        <rect key="frame" x="0.0" y="0.0" width="350" height="324"/>
+                                                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                                                        <subviews>
+                                                            <textView wantsLayer="YES" importsGraphics="NO" richText="NO" verticallyResizable="YES" spellingCorrection="YES" smartInsertDelete="YES" id="8Pl-WZ-PMg">
+                                                                <rect key="frame" x="0.0" y="0.0" width="350" height="324"/>
+                                                                <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                                                                <color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
+                                                                <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                                                <size key="minSize" width="350" height="324"/>
+                                                                <size key="maxSize" width="355" height="10000000"/>
+                                                                <color key="insertionPointColor" name="textInsertionPointColor" catalog="System" colorSpace="catalog"/>
+                                                            </textView>
+                                                        </subviews>
+                                                    </clipView>
+                                                    <constraints>
+                                                        <constraint firstAttribute="width" constant="350" id="vHZ-Mc-9uz"/>
+                                                    </constraints>
+                                                    <scroller key="horizontalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="YES" id="L27-IV-ltL">
+                                                        <rect key="frame" x="-100" y="-100" width="225" height="15"/>
+                                                        <autoresizingMask key="autoresizingMask"/>
+                                                    </scroller>
+                                                    <scroller key="verticalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="NO" id="hmn-o9-sSd">
+                                                        <rect key="frame" x="-100" y="-100" width="15" height="324"/>
+                                                        <autoresizingMask key="autoresizingMask"/>
+                                                    </scroller>
+                                                </scrollView>
+                                                <customView translatesAutoresizingMaskIntoConstraints="NO" id="te9-qF-hEX">
+                                                    <rect key="frame" x="0.0" y="0.0" width="371" height="348"/>
+                                                    <subviews>
+                                                        <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="E7R-rj-W7B">
+                                                            <rect key="frame" x="153" y="194" width="64" height="64"/>
+                                                            <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="img_licensecode_successful" id="WmM-Ze-ygh"/>
+                                                        </imageView>
+                                                        <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="jww-Dg-L78">
+                                                            <rect key="frame" x="113" y="162" width="144" height="16"/>
+                                                            <textFieldCell key="cell" lineBreakMode="clipping" title="Translation Completion" id="5TX-Gf-Pdd">
+                                                                <font key="font" metaFont="system"/>
+                                                                <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                                                <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                                            </textFieldCell>
+                                                        </textField>
+                                                        <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Ucz-80-lpx">
+                                                            <rect key="frame" x="43" y="122" width="284" height="32"/>
+                                                            <constraints>
+                                                                <constraint firstAttribute="width" constant="280" id="H14-YK-4dP"/>
+                                                            </constraints>
+                                                            <textFieldCell key="cell" alignment="center" title="You can click the &quot;Save as...&quot; button below to save the translated document." id="uf5-4Y-I3O">
+                                                                <font key="font" metaFont="system"/>
+                                                                <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                                                <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                                            </textFieldCell>
+                                                        </textField>
+                                                    </subviews>
+                                                    <constraints>
+                                                        <constraint firstItem="Ucz-80-lpx" firstAttribute="top" secondItem="jww-Dg-L78" secondAttribute="bottom" constant="8" id="1Yl-0H-mHl"/>
+                                                        <constraint firstItem="jww-Dg-L78" firstAttribute="top" secondItem="E7R-rj-W7B" secondAttribute="bottom" constant="16" id="9Mp-gz-25U"/>
+                                                        <constraint firstItem="Ucz-80-lpx" firstAttribute="centerX" secondItem="te9-qF-hEX" secondAttribute="centerX" id="F1Y-4j-cNe"/>
+                                                        <constraint firstItem="E7R-rj-W7B" firstAttribute="centerX" secondItem="te9-qF-hEX" secondAttribute="centerX" id="XbW-mn-P1R"/>
+                                                        <constraint firstItem="E7R-rj-W7B" firstAttribute="top" secondItem="te9-qF-hEX" secondAttribute="top" constant="90" id="dNi-mc-i8f"/>
+                                                        <constraint firstItem="jww-Dg-L78" firstAttribute="centerX" secondItem="te9-qF-hEX" secondAttribute="centerX" id="mUh-qd-3hE"/>
+                                                    </constraints>
+                                                </customView>
+                                            </subviews>
+                                            <constraints>
+                                                <constraint firstAttribute="bottom" secondItem="te9-qF-hEX" secondAttribute="bottom" id="56h-35-frA"/>
+                                                <constraint firstItem="te9-qF-hEX" firstAttribute="leading" secondItem="DCc-v0-M7o" secondAttribute="leading" id="7xi-YQ-N4g"/>
+                                                <constraint firstItem="SUH-oQ-4P9" firstAttribute="leading" secondItem="DCc-v0-M7o" secondAttribute="leading" constant="10" id="C0S-Pm-lRh"/>
+                                                <constraint firstItem="pfU-N7-nWJ" firstAttribute="centerY" secondItem="DCc-v0-M7o" secondAttribute="centerY" id="IwG-Gt-FZm"/>
+                                                <constraint firstAttribute="bottom" secondItem="SUH-oQ-4P9" secondAttribute="bottom" constant="12" id="OrN-h3-VCZ"/>
+                                                <constraint firstAttribute="trailing" secondItem="te9-qF-hEX" secondAttribute="trailing" id="a3O-gE-xu1"/>
+                                                <constraint firstItem="te9-qF-hEX" firstAttribute="top" secondItem="DCc-v0-M7o" secondAttribute="top" id="eNI-cE-L7S"/>
+                                                <constraint firstItem="SUH-oQ-4P9" firstAttribute="top" secondItem="DCc-v0-M7o" secondAttribute="top" constant="12" id="lkF-ST-9Ju"/>
+                                                <constraint firstItem="pfU-N7-nWJ" firstAttribute="centerX" secondItem="DCc-v0-M7o" secondAttribute="centerX" id="vc3-5f-WEc"/>
+                                            </constraints>
+                                        </customView>
+                                    </subviews>
+                                    <constraints>
+                                        <constraint firstItem="vhY-2U-dEh" firstAttribute="leading" secondItem="lpm-YO-38e" secondAttribute="leading" id="C78-YF-TZJ"/>
+                                        <constraint firstItem="DCc-v0-M7o" firstAttribute="top" secondItem="lpm-YO-38e" secondAttribute="top" id="FsM-dW-seL"/>
+                                        <constraint firstItem="DCc-v0-M7o" firstAttribute="width" secondItem="vhY-2U-dEh" secondAttribute="width" id="IHt-7g-TfE"/>
+                                        <constraint firstItem="vhY-2U-dEh" firstAttribute="width" secondItem="lpm-YO-38e" secondAttribute="width" multiplier="0.5" constant="-6" id="N7p-I8-Tcl"/>
+                                        <constraint firstAttribute="bottom" secondItem="vhY-2U-dEh" secondAttribute="bottom" id="Ssh-xy-VLC"/>
+                                        <constraint firstAttribute="bottom" secondItem="DCc-v0-M7o" secondAttribute="bottom" id="sDK-yE-dO5"/>
+                                        <constraint firstAttribute="trailing" secondItem="DCc-v0-M7o" secondAttribute="trailing" id="uQZ-Ko-z8k"/>
+                                        <constraint firstItem="vhY-2U-dEh" firstAttribute="top" secondItem="lpm-YO-38e" secondAttribute="top" id="xJV-Jv-lio"/>
+                                        <constraint firstAttribute="height" constant="348" id="yJ8-OP-Y2Z"/>
+                                    </constraints>
+                                </customView>
+                                <customView translatesAutoresizingMaskIntoConstraints="NO" id="7wN-h5-0lr">
+                                    <rect key="frame" x="20" y="20" width="755" height="24"/>
+                                    <subviews>
+                                        <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="cjg-NV-eFm">
+                                            <rect key="frame" x="478" y="-5" width="76" height="32"/>
+                                            <buttonCell key="cell" type="push" title="Cancel" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="hfm-qG-k6w">
+                                                <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                                                <font key="font" metaFont="system"/>
+                                                <string key="keyEquivalent" base64-UTF8="YES">
+Gw
+</string>
+                                            </buttonCell>
+                                            <connections>
+                                                <action selector="cancelAction:" target="-2" id="4CX-AE-9eh"/>
+                                            </connections>
+                                        </button>
+                                        <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="ZjF-9J-AhT">
+                                            <rect key="frame" x="548" y="-5" width="110" height="32"/>
+                                            <buttonCell key="cell" type="push" title="Save as Text" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="d7G-ML-86a">
+                                                <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                                                <font key="font" metaFont="system"/>
+                                            </buttonCell>
+                                            <connections>
+                                                <action selector="saveAsTextAction:" target="-2" id="Pp0-wK-rfr"/>
+                                            </connections>
+                                        </button>
+                                        <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="e21-Rh-Sls">
+                                            <rect key="frame" x="652" y="-5" width="110" height="32"/>
+                                            <buttonCell key="cell" type="push" title="Save as PDF" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="MAU-sa-AR7">
+                                                <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                                                <font key="font" metaFont="system"/>
+                                            </buttonCell>
+                                            <connections>
+                                                <action selector="saveAsPDFAction:" target="-2" id="M4l-PJ-03U"/>
+                                            </connections>
+                                        </button>
+                                    </subviews>
+                                    <constraints>
+                                        <constraint firstItem="e21-Rh-Sls" firstAttribute="top" secondItem="7wN-h5-0lr" secondAttribute="top" constant="2" id="7xp-Wr-JJs"/>
+                                        <constraint firstItem="ZjF-9J-AhT" firstAttribute="leading" secondItem="cjg-NV-eFm" secondAttribute="trailing" constant="8" id="9WJ-wJ-rTb"/>
+                                        <constraint firstAttribute="bottom" secondItem="e21-Rh-Sls" secondAttribute="bottom" constant="2" id="IIj-os-1Ef"/>
+                                        <constraint firstItem="ZjF-9J-AhT" firstAttribute="centerY" secondItem="7wN-h5-0lr" secondAttribute="centerY" id="OHk-KW-W5T"/>
+                                        <constraint firstAttribute="trailing" secondItem="e21-Rh-Sls" secondAttribute="trailing" id="VCO-6A-cSJ"/>
+                                        <constraint firstItem="cjg-NV-eFm" firstAttribute="centerY" secondItem="7wN-h5-0lr" secondAttribute="centerY" id="ZMm-V7-rs8"/>
+                                        <constraint firstItem="e21-Rh-Sls" firstAttribute="leading" secondItem="ZjF-9J-AhT" secondAttribute="trailing" constant="8" id="xlw-ma-KiI"/>
+                                    </constraints>
+                                </customView>
+                            </subviews>
+                            <constraints>
+                                <constraint firstItem="lpm-YO-38e" firstAttribute="leading" secondItem="5E2-pO-j3A" secondAttribute="leading" constant="20" id="5rO-Ab-aE3"/>
+                                <constraint firstAttribute="bottom" secondItem="7wN-h5-0lr" secondAttribute="bottom" constant="20" id="6MK-uv-QUU"/>
+                                <constraint firstItem="BOi-Jk-fgK" firstAttribute="leading" secondItem="5E2-pO-j3A" secondAttribute="leading" constant="20" id="7gk-LB-Oqc"/>
+                                <constraint firstItem="WzQ-UG-alX" firstAttribute="leading" secondItem="5E2-pO-j3A" secondAttribute="leading" constant="20" id="MDi-SM-p0q"/>
+                                <constraint firstAttribute="trailing" secondItem="lpm-YO-38e" secondAttribute="trailing" constant="20" id="Pcp-HX-ztg"/>
+                                <constraint firstAttribute="trailing" secondItem="4Yw-6I-7pH" secondAttribute="trailing" constant="20" id="Rbb-Vx-HLi"/>
+                                <constraint firstAttribute="trailing" secondItem="7wN-h5-0lr" secondAttribute="trailing" constant="20" id="Uza-Ig-SAG"/>
+                                <constraint firstItem="g9S-q1-kux" firstAttribute="leading" secondItem="wOE-fG-NKH" secondAttribute="trailing" constant="4" id="W8d-5J-Xb0"/>
+                                <constraint firstItem="lpm-YO-38e" firstAttribute="top" secondItem="5E2-pO-j3A" secondAttribute="top" constant="137" id="XIw-1b-L9B"/>
+                                <constraint firstItem="g9S-q1-kux" firstAttribute="centerY" secondItem="wOE-fG-NKH" secondAttribute="centerY" id="YAL-nG-p6S"/>
+                                <constraint firstAttribute="trailing" secondItem="BOi-Jk-fgK" secondAttribute="trailing" constant="20" id="YPi-aI-zo4"/>
+                                <constraint firstItem="7wN-h5-0lr" firstAttribute="leading" secondItem="5E2-pO-j3A" secondAttribute="leading" constant="20" id="YiL-31-rbG"/>
+                                <constraint firstAttribute="trailing" secondItem="WzQ-UG-alX" secondAttribute="trailing" constant="20" id="fn4-Ho-kl7"/>
+                                <constraint firstItem="BOi-Jk-fgK" firstAttribute="top" secondItem="5E2-pO-j3A" secondAttribute="top" constant="52" id="geW-qd-zko"/>
+                                <constraint firstItem="4Yw-6I-7pH" firstAttribute="top" secondItem="BOi-Jk-fgK" secondAttribute="bottom" constant="8" id="kgP-GR-rmV"/>
+                                <constraint firstItem="lpm-YO-38e" firstAttribute="top" secondItem="WzQ-UG-alX" secondAttribute="bottom" id="r0v-6K-OxU"/>
+                                <constraint firstItem="wOE-fG-NKH" firstAttribute="leading" secondItem="5E2-pO-j3A" secondAttribute="leading" constant="20" id="sg5-cE-e0p"/>
+                                <constraint firstItem="wOE-fG-NKH" firstAttribute="top" secondItem="5E2-pO-j3A" secondAttribute="top" constant="20" id="xlz-uE-hFc"/>
+                                <constraint firstItem="4Yw-6I-7pH" firstAttribute="leading" secondItem="5E2-pO-j3A" secondAttribute="leading" constant="20" id="yPY-hA-U9W"/>
+                            </constraints>
+                        </view>
+                    </box>
+                </subviews>
+                <constraints>
+                    <constraint firstItem="2gG-B2-LaH" firstAttribute="leading" secondItem="se5-gp-TjO" secondAttribute="leading" id="Kbo-DB-wFE"/>
+                    <constraint firstAttribute="trailing" secondItem="2gG-B2-LaH" secondAttribute="trailing" id="Ley-a3-irE"/>
+                    <constraint firstAttribute="bottom" secondItem="2gG-B2-LaH" secondAttribute="bottom" id="Zwu-u3-ZhH"/>
+                    <constraint firstItem="2gG-B2-LaH" firstAttribute="top" secondItem="se5-gp-TjO" secondAttribute="top" id="csr-Tq-5cd"/>
+                </constraints>
+            </view>
+            <connections>
+                <outlet property="delegate" destination="-2" id="0bl-1N-AYu"/>
+            </connections>
+            <point key="canvasLocation" x="129.5" y="-56.5"/>
+        </window>
+    </objects>
+    <resources>
+        <image name="AIChooseFile" width="16" height="16"/>
+        <image name="AIchange" width="24" height="24"/>
+        <image name="aiPDF_Clear" width="17" height="17"/>
+        <image name="ai_summary_Empty" width="80" height="80"/>
+        <image name="ic_btn_arrow_down" width="16" height="16"/>
+        <image name="ic_else_alert" width="14" height="14"/>
+        <image name="ic_else_info_large" width="14" height="14"/>
+        <image name="img_licensecode_successful" width="64" height="64"/>
+        <image name="robot-gray" width="80" height="80"/>
+    </resources>
+</document>

+ 84 - 0
PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/AIChooseFile.imageset/AIChooseFile.pdf

@@ -0,0 +1,84 @@
+%PDF-1.7
+
+1 0 obj
+  << >>
+endobj
+
+2 0 obj
+  << /Length 3 0 R >>
+stream
+/DeviceRGB CS
+/DeviceRGB cs
+q
+1.000000 0.000000 -0.000000 1.000000 3.646484 1.500000 cm
+0.056471 0.065882 0.080000 scn
+4.707107 11.853600 m
+4.353553 12.207153 l
+4.000000 11.853600 l
+0.000000 7.853600 l
+0.707107 7.146493 l
+3.853553 10.292940 l
+3.853553 2.500072 l
+4.853553 2.500072 l
+4.853553 10.292940 l
+8.000000 7.146493 l
+8.707108 7.853600 l
+4.707107 11.853600 l
+h
+0.353516 1.000000 m
+8.353516 1.000000 l
+8.353516 0.000000 l
+0.353516 0.000000 l
+0.353516 1.000000 l
+h
+f*
+n
+Q
+
+endstream
+endobj
+
+3 0 obj
+  476
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 16.000000 16.000000 ]
+     /Resources 1 0 R
+     /Contents 2 0 R
+     /Parent 5 0 R
+  >>
+endobj
+
+5 0 obj
+  << /Kids [ 4 0 R ]
+     /Count 1
+     /Type /Pages
+  >>
+endobj
+
+6 0 obj
+  << /Pages 5 0 R
+     /Type /Catalog
+  >>
+endobj
+
+xref
+0 7
+0000000000 65535 f
+0000000010 00000 n
+0000000034 00000 n
+0000000566 00000 n
+0000000588 00000 n
+0000000761 00000 n
+0000000835 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+894
+%%EOF

+ 22 - 0
PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/AIChooseFile.imageset/Contents.json

@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "filename" : "AIChooseFile.pdf",
+      "idiom" : "universal"
+    },
+    {
+      "appearances" : [
+        {
+          "appearance" : "luminosity",
+          "value" : "dark"
+        }
+      ],
+      "filename" : "ic.pdf",
+      "idiom" : "universal"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

+ 84 - 0
PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/AIChooseFile.imageset/ic.pdf

@@ -0,0 +1,84 @@
+%PDF-1.7
+
+1 0 obj
+  << >>
+endobj
+
+2 0 obj
+  << /Length 3 0 R >>
+stream
+/DeviceRGB CS
+/DeviceRGB cs
+q
+1.000000 0.000000 -0.000000 1.000000 3.646484 1.499939 cm
+1.000000 1.000000 1.000000 scn
+4.707107 11.853600 m
+4.353553 12.207153 l
+4.000000 11.853600 l
+0.000000 7.853600 l
+0.707107 7.146493 l
+3.853553 10.292940 l
+3.853553 2.500072 l
+4.853553 2.500072 l
+4.853553 10.292940 l
+8.000000 7.146493 l
+8.707108 7.853600 l
+4.707107 11.853600 l
+h
+0.353516 1.000000 m
+8.353516 1.000000 l
+8.353516 0.000000 l
+0.353516 0.000000 l
+0.353516 1.000000 l
+h
+f*
+n
+Q
+
+endstream
+endobj
+
+3 0 obj
+  476
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 16.000000 16.000000 ]
+     /Resources 1 0 R
+     /Contents 2 0 R
+     /Parent 5 0 R
+  >>
+endobj
+
+5 0 obj
+  << /Kids [ 4 0 R ]
+     /Count 1
+     /Type /Pages
+  >>
+endobj
+
+6 0 obj
+  << /Pages 5 0 R
+     /Type /Catalog
+  >>
+endobj
+
+xref
+0 7
+0000000000 65535 f
+0000000010 00000 n
+0000000034 00000 n
+0000000566 00000 n
+0000000588 00000 n
+0000000761 00000 n
+0000000835 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+894
+%%EOF

+ 103 - 0
PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/AICreditIcon.imageset/AICreditIcon.pdf

@@ -0,0 +1,103 @@
+%PDF-1.7
+
+1 0 obj
+  << /Length 2 0 R
+     /Range [ 0.000000 1.000000 0.000000 1.000000 0.000000 1.000000 ]
+     /Domain [ 0.000000 1.000000 ]
+     /FunctionType 4
+  >>
+stream
+{  0.901378 exch 0.295557 exch 1.000000 exch dup 0.000000 gt { exch pop exch pop exch pop dup 0.000000 sub -0.901378 mul 0.901378 add exch dup 0.000000 sub 0.524443 mul 0.295557 add exch dup 0.000000 sub 0.000000 mul 1.000000 add exch } if dup 1.000000 gt { exch pop exch pop exch pop 0.000000 exch 0.820000 exch 1.000000 exch } if pop }
+endstream
+endobj
+
+2 0 obj
+  337
+endobj
+
+3 0 obj
+  << /Pattern << /P1 << /Matrix [ 101.520172 -25.818710 25.818710 101.520172 -25.818710 -81.520172 ]
+                        /Shading << /Coords [ 0.000000 0.000000 1.000000 0.000000 ]
+                                    /ColorSpace /DeviceRGB
+                                    /Function 1 0 R
+                                    /Domain [ 0.000000 1.000000 ]
+                                    /ShadingType 2
+                                    /Extend [ true true ]
+                                 >>
+                        /PatternType 2
+                        /Type /Pattern
+                     >> >> >>
+endobj
+
+4 0 obj
+  << /Length 5 0 R >>
+stream
+/DeviceRGB CS
+/DeviceRGB cs
+q
+1.000000 0.000000 -0.000000 1.000000 0.000000 0.000000 cm
+/Pattern cs
+/P1 scn
+0.000000 16.000000 m
+0.000000 18.209139 1.790861 20.000000 4.000000 20.000000 c
+99.000000 20.000000 l
+101.209145 20.000000 103.000000 18.209139 103.000000 16.000000 c
+103.000000 4.000000 l
+103.000000 1.790861 101.209137 0.000000 99.000000 0.000000 c
+3.999998 0.000000 l
+1.790859 0.000000 0.000000 1.790861 0.000000 4.000000 c
+0.000000 16.000000 l
+h
+f
+n
+Q
+
+endstream
+endobj
+
+5 0 obj
+  463
+endobj
+
+6 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 103.000000 20.000000 ]
+     /Resources 3 0 R
+     /Contents 4 0 R
+     /Parent 7 0 R
+  >>
+endobj
+
+7 0 obj
+  << /Kids [ 6 0 R ]
+     /Count 1
+     /Type /Pages
+  >>
+endobj
+
+8 0 obj
+  << /Pages 7 0 R
+     /Type /Catalog
+  >>
+endobj
+
+xref
+0 9
+0000000000 65535 f
+0000000010 00000 n
+0000000531 00000 n
+0000000553 00000 n
+0000001184 00000 n
+0000001703 00000 n
+0000001725 00000 n
+0000001899 00000 n
+0000001973 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 8 0 R
+   /Size 9
+>>
+startxref
+2032
+%%EOF

+ 12 - 0
PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/AICreditIcon.imageset/Contents.json

@@ -0,0 +1,12 @@
+{
+  "images" : [
+    {
+      "filename" : "AICreditIcon.pdf",
+      "idiom" : "universal"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

Diferenças do arquivo suprimidas por serem muito extensas
+ 2981 - 0
PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/AIDMGBG.imageset/AIDMGA.pdf


Diferenças do arquivo suprimidas por serem muito extensas
+ 74550 - 0
PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/AIDMGBG.imageset/AIDMGB.pdf


+ 22 - 0
PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/AIDMGBG.imageset/Contents.json

@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "filename" : "AIDMGA.pdf",
+      "idiom" : "universal"
+    },
+    {
+      "appearances" : [
+        {
+          "appearance" : "luminosity",
+          "value" : "dark"
+        }
+      ],
+      "filename" : "AIDMGB.pdf",
+      "idiom" : "universal"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

+ 140 - 0
PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/AIProofreading.imageset/AIProofreading.pdf

@@ -0,0 +1,140 @@
+%PDF-1.7
+
+1 0 obj
+  << >>
+endobj
+
+2 0 obj
+  << /Length 3 0 R >>
+stream
+/DeviceRGB CS
+/DeviceRGB cs
+q
+1.000000 0.000000 -0.000000 1.000000 0.833374 13.952820 cm
+0.450358 0.116484 0.995101 scn
+16.241201 4.893066 m
+16.137482 5.320801 15.529145 5.320801 15.425426 4.893066 c
+15.140035 3.716126 l
+15.103004 3.563412 14.983768 3.444176 14.831054 3.407145 c
+13.654113 3.121754 l
+13.226378 3.018035 13.226380 2.409699 13.654115 2.305979 c
+14.831054 2.020589 l
+14.983768 1.983558 15.103004 1.864322 15.140035 1.711608 c
+15.425426 0.534667 l
+15.529145 0.106933 16.137482 0.106933 16.241201 0.534668 c
+16.526592 1.711608 l
+16.563623 1.864322 16.682858 1.983558 16.835573 2.020589 c
+18.012514 2.305979 l
+18.440248 2.409699 18.440247 3.018035 18.012512 3.121754 c
+16.835573 3.407145 l
+16.682858 3.444176 16.563623 3.563412 16.526592 3.716126 c
+16.241201 4.893066 l
+h
+4.166667 3.547200 m
+4.626904 3.547200 5.000000 3.920296 5.000000 4.380534 c
+5.000000 4.840771 4.626904 5.213867 4.166667 5.213867 c
+3.706430 5.213867 3.333334 4.840771 3.333334 4.380534 c
+3.333334 3.920296 3.706430 3.547200 4.166667 3.547200 c
+h
+0.833333 1.047200 m
+1.293571 1.047200 1.666667 1.420296 1.666667 1.880533 c
+1.666667 2.340771 1.293571 2.713867 0.833333 2.713867 c
+0.373096 2.713867 0.000000 2.340771 0.000000 1.880533 c
+0.000000 1.420296 0.373096 1.047200 0.833333 1.047200 c
+h
+f*
+n
+Q
+q
+1.000000 0.000000 -0.000000 1.000000 3.508698 1.176758 cm
+0.450358 0.116484 0.995101 scn
+9.735016 5.998462 m
+9.950131 5.430011 9.528882 4.823242 8.921090 4.823242 c
+8.551998 4.823242 8.222885 5.055802 8.100780 5.404111 c
+8.029805 5.606569 7.959042 5.809103 7.888279 6.011637 c
+7.779376 6.323242 l
+3.047196 6.323242 l
+2.587296 5.009241 l
+1.654916 2.389698 l
+1.534032 2.050069 1.212528 1.823240 0.852027 1.823240 c
+0.260608 1.823240 -0.150973 2.410975 0.052770 2.966191 c
+0.378507 3.853852 0.689349 4.690869 0.985296 5.477242 c
+1.405296 6.605242 1.813296 7.673241 2.209296 8.681240 c
+2.617296 9.689241 3.019296 10.649240 3.415296 11.561241 c
+3.728151 12.291236 4.052240 13.013741 4.387565 13.728756 c
+4.550862 14.076955 4.901941 14.297241 5.286530 14.297241 c
+5.630062 14.297241 l
+6.014650 14.297241 6.365730 14.076955 6.529027 13.728756 c
+6.864351 13.013741 7.188441 12.291236 7.501296 11.561241 c
+7.897296 10.649240 8.293297 9.689241 8.689297 8.681240 c
+9.049452 7.791444 9.395310 6.896145 9.735016 5.998462 c
+h
+3.588522 7.823242 m
+7.222031 7.823242 l
+7.009120 8.384309 6.796208 8.934309 6.583296 9.473241 c
+6.211296 10.457241 5.821296 11.399241 5.413296 12.299241 c
+4.993296 11.399241 4.591296 10.457241 4.207296 9.473241 c
+4.001038 8.934309 3.794780 8.384309 3.588522 7.823242 c
+h
+7.960984 2.292912 m
+9.960983 0.292912 l
+10.253877 0.000019 10.728750 0.000019 11.021645 0.292912 c
+15.021645 4.292912 l
+15.314537 4.585805 15.314537 5.060679 15.021645 5.353572 c
+14.728750 5.646465 14.253878 5.646465 13.960983 5.353572 c
+10.491314 1.883903 l
+9.021644 3.353573 l
+8.728751 3.646465 8.253877 3.646465 7.960984 3.353573 c
+7.668091 3.060679 7.668091 2.585806 7.960984 2.292912 c
+h
+f*
+n
+Q
+
+endstream
+endobj
+
+3 0 obj
+  2967
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 20.000000 20.000000 ]
+     /Resources 1 0 R
+     /Contents 2 0 R
+     /Parent 5 0 R
+  >>
+endobj
+
+5 0 obj
+  << /Kids [ 4 0 R ]
+     /Count 1
+     /Type /Pages
+  >>
+endobj
+
+6 0 obj
+  << /Pages 5 0 R
+     /Type /Catalog
+  >>
+endobj
+
+xref
+0 7
+0000000000 65535 f
+0000000010 00000 n
+0000000034 00000 n
+0000003057 00000 n
+0000003080 00000 n
+0000003253 00000 n
+0000003327 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+3386
+%%EOF

+ 140 - 0
PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/AIProofreading.imageset/AIProofreading12.pdf

@@ -0,0 +1,140 @@
+%PDF-1.7
+
+1 0 obj
+  << >>
+endobj
+
+2 0 obj
+  << /Length 3 0 R >>
+stream
+/DeviceRGB CS
+/DeviceRGB cs
+q
+1.000000 0.000000 -0.000000 1.000000 0.833374 13.952881 cm
+0.760784 0.615686 1.000000 scn
+16.241201 4.893066 m
+16.137482 5.320801 15.529145 5.320801 15.425426 4.893066 c
+15.140035 3.716126 l
+15.103004 3.563412 14.983768 3.444176 14.831054 3.407145 c
+13.654113 3.121754 l
+13.226378 3.018035 13.226380 2.409699 13.654115 2.305979 c
+14.831054 2.020589 l
+14.983768 1.983558 15.103004 1.864322 15.140035 1.711608 c
+15.425426 0.534667 l
+15.529145 0.106933 16.137482 0.106933 16.241201 0.534668 c
+16.526592 1.711608 l
+16.563623 1.864322 16.682858 1.983558 16.835573 2.020589 c
+18.012514 2.305979 l
+18.440248 2.409699 18.440247 3.018035 18.012512 3.121754 c
+16.835573 3.407145 l
+16.682858 3.444176 16.563623 3.563412 16.526592 3.716126 c
+16.241201 4.893066 l
+h
+4.166667 3.547200 m
+4.626904 3.547200 5.000000 3.920296 5.000000 4.380534 c
+5.000000 4.840771 4.626904 5.213867 4.166667 5.213867 c
+3.706430 5.213867 3.333334 4.840771 3.333334 4.380534 c
+3.333334 3.920296 3.706430 3.547200 4.166667 3.547200 c
+h
+0.833333 1.047200 m
+1.293571 1.047200 1.666667 1.420296 1.666667 1.880533 c
+1.666667 2.340771 1.293571 2.713867 0.833333 2.713867 c
+0.373096 2.713867 0.000000 2.340771 0.000000 1.880533 c
+0.000000 1.420296 0.373096 1.047200 0.833333 1.047200 c
+h
+f*
+n
+Q
+q
+1.000000 0.000000 -0.000000 1.000000 3.508667 1.176758 cm
+0.760784 0.615686 1.000000 scn
+9.735016 5.998462 m
+9.950131 5.430011 9.528882 4.823242 8.921090 4.823242 c
+8.551998 4.823242 8.222885 5.055802 8.100780 5.404111 c
+8.029805 5.606569 7.959042 5.809103 7.888279 6.011637 c
+7.779376 6.323242 l
+3.047196 6.323242 l
+2.587296 5.009241 l
+1.654916 2.389698 l
+1.534032 2.050069 1.212528 1.823240 0.852027 1.823240 c
+0.260608 1.823240 -0.150973 2.410975 0.052770 2.966191 c
+0.378507 3.853852 0.689349 4.690869 0.985296 5.477242 c
+1.405296 6.605242 1.813296 7.673241 2.209296 8.681240 c
+2.617296 9.689241 3.019296 10.649240 3.415296 11.561241 c
+3.728151 12.291236 4.052240 13.013741 4.387565 13.728756 c
+4.550862 14.076955 4.901941 14.297241 5.286530 14.297241 c
+5.630062 14.297241 l
+6.014650 14.297241 6.365730 14.076955 6.529027 13.728756 c
+6.864351 13.013741 7.188441 12.291236 7.501296 11.561241 c
+7.897296 10.649240 8.293297 9.689241 8.689297 8.681240 c
+9.049452 7.791444 9.395310 6.896145 9.735016 5.998462 c
+h
+3.588522 7.823242 m
+7.222031 7.823242 l
+7.009120 8.384309 6.796208 8.934309 6.583296 9.473241 c
+6.211296 10.457241 5.821296 11.399241 5.413296 12.299241 c
+4.993296 11.399241 4.591296 10.457241 4.207296 9.473241 c
+4.001038 8.934309 3.794780 8.384309 3.588522 7.823242 c
+h
+7.960984 2.292912 m
+9.960983 0.292912 l
+10.253877 0.000019 10.728750 0.000019 11.021645 0.292912 c
+15.021645 4.292912 l
+15.314537 4.585805 15.314537 5.060679 15.021645 5.353572 c
+14.728750 5.646465 14.253878 5.646465 13.960983 5.353572 c
+10.491314 1.883903 l
+9.021644 3.353573 l
+8.728751 3.646465 8.253877 3.646465 7.960984 3.353573 c
+7.668091 3.060679 7.668091 2.585806 7.960984 2.292912 c
+h
+f*
+n
+Q
+
+endstream
+endobj
+
+3 0 obj
+  2967
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 20.000000 20.000000 ]
+     /Resources 1 0 R
+     /Contents 2 0 R
+     /Parent 5 0 R
+  >>
+endobj
+
+5 0 obj
+  << /Kids [ 4 0 R ]
+     /Count 1
+     /Type /Pages
+  >>
+endobj
+
+6 0 obj
+  << /Pages 5 0 R
+     /Type /Catalog
+  >>
+endobj
+
+xref
+0 7
+0000000000 65535 f
+0000000010 00000 n
+0000000034 00000 n
+0000003057 00000 n
+0000003080 00000 n
+0000003253 00000 n
+0000003327 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+3386
+%%EOF

+ 22 - 0
PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/AIProofreading.imageset/Contents.json

@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "filename" : "AIProofreading.pdf",
+      "idiom" : "universal"
+    },
+    {
+      "appearances" : [
+        {
+          "appearance" : "luminosity",
+          "value" : "dark"
+        }
+      ],
+      "filename" : "AIProofreading12.pdf",
+      "idiom" : "universal"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

+ 22 - 0
PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/AIRewriting.imageset/Contents.json

@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "filename" : "icon-4.pdf",
+      "idiom" : "universal"
+    },
+    {
+      "appearances" : [
+        {
+          "appearance" : "luminosity",
+          "value" : "dark"
+        }
+      ],
+      "filename" : "icon-3.pdf",
+      "idiom" : "universal"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

+ 154 - 0
PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/AIRewriting.imageset/icon-3.pdf

@@ -0,0 +1,154 @@
+%PDF-1.7
+
+1 0 obj
+  << >>
+endobj
+
+2 0 obj
+  << /Length 3 0 R >>
+stream
+/DeviceRGB CS
+/DeviceRGB cs
+q
+0.707107 -0.707107 0.707107 0.707107 1.791064 4.833972 cm
+1.000000 0.413200 0.765280 scn
+0.000000 15.045532 m
+0.000000 16.012032 0.783502 16.795532 1.750000 16.795532 c
+4.749979 16.795532 l
+5.716479 16.795532 6.499979 16.012030 6.499979 15.045532 c
+6.499979 4.332330 l
+6.499979 4.004347 6.407808 3.682964 6.233977 3.404834 c
+4.309988 0.326439 l
+3.820405 -0.456898 2.679575 -0.456902 2.189990 0.326439 c
+0.266001 3.404834 l
+0.092171 3.682963 0.000000 4.004346 0.000000 4.332330 c
+0.000000 15.045532 l
+h
+1.750000 15.295532 m
+1.611929 15.295532 1.500000 15.183603 1.500000 15.045532 c
+1.500000 12.502612 l
+4.999979 12.502612 l
+4.999979 15.045532 l
+4.999979 15.183604 4.888050 15.295532 4.749979 15.295532 c
+1.750000 15.295532 l
+h
+4.999979 11.002612 m
+1.500000 11.002612 l
+1.500000 4.332330 l
+1.500000 4.285475 1.513167 4.239563 1.538000 4.199830 c
+3.249989 1.460636 l
+4.961978 4.199830 l
+4.986811 4.239562 4.999979 4.285475 4.999979 4.332330 c
+4.999979 11.002612 l
+h
+f*
+n
+Q
+q
+1.000000 0.000000 -0.000000 1.000000 0.833374 0.583984 cm
+1.000000 0.413200 0.765280 scn
+17.500002 16.916098 m
+17.960239 16.916098 18.333336 17.289192 18.333336 17.749430 c
+18.333336 18.209667 17.960239 18.582764 17.500002 18.582764 c
+17.039764 18.582764 16.666668 18.209667 16.666668 17.749430 c
+16.666668 17.289192 17.039764 16.916098 17.500002 16.916098 c
+h
+2.789484 18.155029 m
+2.927776 18.725342 3.738891 18.725342 3.877183 18.155029 c
+4.257704 16.585775 l
+4.307079 16.382156 4.466060 16.223175 4.669679 16.173801 c
+6.238932 15.793280 l
+6.809245 15.654987 6.809246 14.843873 6.238933 14.705581 c
+4.669679 14.325060 l
+4.466060 14.275684 4.307079 14.116704 4.257705 13.913085 c
+3.877183 12.343832 l
+3.738891 11.773519 2.927776 11.773518 2.789484 12.343830 c
+2.408963 13.913085 l
+2.359588 14.116704 2.200607 14.275684 1.996989 14.325059 c
+0.427735 14.705581 l
+-0.142578 14.843873 -0.142578 15.654987 0.427735 15.793280 c
+1.996989 16.173801 l
+2.200607 16.223175 2.359588 16.382156 2.408962 16.585775 c
+2.789484 18.155029 l
+h
+10.000001 17.749430 m
+10.000001 17.289192 9.626905 16.916098 9.166668 16.916098 c
+8.706430 16.916098 8.333334 17.289192 8.333334 17.749430 c
+8.333334 18.209667 8.706430 18.582764 9.166668 18.582764 c
+9.626905 18.582764 10.000001 18.209667 10.000001 17.749430 c
+h
+1.666667 8.582763 m
+2.126904 8.582763 2.500000 8.955858 2.500000 9.416096 c
+2.500000 9.876333 2.126904 10.249430 1.666667 10.249430 c
+1.206429 10.249430 0.833333 9.876333 0.833333 9.416096 c
+0.833333 8.955858 1.206429 8.582763 1.666667 8.582763 c
+h
+16.241201 4.928650 m
+16.137482 5.356384 15.529145 5.356384 15.425426 4.928650 c
+15.140035 3.751711 l
+15.103004 3.598996 14.983768 3.479760 14.831054 3.442730 c
+13.654113 3.157339 l
+13.226378 3.053619 13.226380 2.445282 13.654115 2.341562 c
+14.831054 2.056173 l
+14.983768 2.019142 15.103004 1.899906 15.140035 1.747192 c
+15.425426 0.570251 l
+15.529145 0.142517 16.137482 0.142517 16.241201 0.570253 c
+16.526592 1.747192 l
+16.563623 1.899906 16.682858 2.019142 16.835573 2.056173 c
+18.012514 2.341562 l
+18.440248 2.445282 18.440247 3.053619 18.012512 3.157339 c
+16.835573 3.442730 l
+16.682858 3.479760 16.563623 3.598996 16.526592 3.751711 c
+16.241201 4.928650 l
+h
+f*
+n
+Q
+
+endstream
+endobj
+
+3 0 obj
+  3211
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 20.000000 20.000000 ]
+     /Resources 1 0 R
+     /Contents 2 0 R
+     /Parent 5 0 R
+  >>
+endobj
+
+5 0 obj
+  << /Kids [ 4 0 R ]
+     /Count 1
+     /Type /Pages
+  >>
+endobj
+
+6 0 obj
+  << /Pages 5 0 R
+     /Type /Catalog
+  >>
+endobj
+
+xref
+0 7
+0000000000 65535 f
+0000000010 00000 n
+0000000034 00000 n
+0000003301 00000 n
+0000003324 00000 n
+0000003497 00000 n
+0000003571 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+3630
+%%EOF

+ 154 - 0
PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/AIRewriting.imageset/icon-4.pdf

@@ -0,0 +1,154 @@
+%PDF-1.7
+
+1 0 obj
+  << >>
+endobj
+
+2 0 obj
+  << /Length 3 0 R >>
+stream
+/DeviceRGB CS
+/DeviceRGB cs
+q
+0.707107 -0.707107 0.707107 0.707107 1.791107 4.834015 cm
+1.000000 0.116178 0.646471 scn
+0.000000 15.045471 m
+0.000000 16.011971 0.783502 16.795471 1.750000 16.795471 c
+4.749979 16.795471 l
+5.716479 16.795471 6.499979 16.011969 6.499979 15.045471 c
+6.499979 4.332269 l
+6.499979 4.004286 6.407808 3.682903 6.233977 3.404773 c
+4.309988 0.326378 l
+3.820405 -0.456959 2.679575 -0.456963 2.189990 0.326378 c
+0.266001 3.404773 l
+0.092171 3.682902 0.000000 4.004285 0.000000 4.332269 c
+0.000000 15.045471 l
+h
+1.750000 15.295471 m
+1.611929 15.295471 1.500000 15.183542 1.500000 15.045471 c
+1.500000 12.502551 l
+4.999979 12.502551 l
+4.999979 15.045471 l
+4.999979 15.183543 4.888050 15.295471 4.749979 15.295471 c
+1.750000 15.295471 l
+h
+4.999979 11.002551 m
+1.500000 11.002551 l
+1.500000 4.332269 l
+1.500000 4.285414 1.513167 4.239502 1.538000 4.199769 c
+3.249989 1.460575 l
+4.961978 4.199769 l
+4.986811 4.239501 4.999979 4.285414 4.999979 4.332269 c
+4.999979 11.002551 l
+h
+f*
+n
+Q
+q
+1.000000 0.000000 -0.000000 1.000000 0.833374 0.583862 cm
+1.000000 0.116178 0.646471 scn
+17.500002 16.916159 m
+17.960239 16.916159 18.333336 17.289253 18.333336 17.749491 c
+18.333336 18.209728 17.960239 18.582825 17.500002 18.582825 c
+17.039764 18.582825 16.666668 18.209728 16.666668 17.749491 c
+16.666668 17.289253 17.039764 16.916159 17.500002 16.916159 c
+h
+2.789484 18.155090 m
+2.927776 18.725403 3.738891 18.725403 3.877183 18.155090 c
+4.257704 16.585836 l
+4.307079 16.382217 4.466060 16.223236 4.669679 16.173862 c
+6.238932 15.793341 l
+6.809245 15.655048 6.809246 14.843934 6.238933 14.705642 c
+4.669679 14.325121 l
+4.466060 14.275745 4.307079 14.116765 4.257705 13.913146 c
+3.877183 12.343893 l
+3.738891 11.773580 2.927776 11.773579 2.789484 12.343891 c
+2.408963 13.913146 l
+2.359588 14.116765 2.200607 14.275745 1.996989 14.325120 c
+0.427735 14.705642 l
+-0.142578 14.843934 -0.142578 15.655048 0.427735 15.793341 c
+1.996989 16.173862 l
+2.200607 16.223236 2.359588 16.382217 2.408962 16.585836 c
+2.789484 18.155090 l
+h
+10.000001 17.749491 m
+10.000001 17.289253 9.626905 16.916159 9.166668 16.916159 c
+8.706430 16.916159 8.333334 17.289253 8.333334 17.749491 c
+8.333334 18.209728 8.706430 18.582825 9.166668 18.582825 c
+9.626905 18.582825 10.000001 18.209728 10.000001 17.749491 c
+h
+1.666667 8.582824 m
+2.126904 8.582824 2.500000 8.955919 2.500000 9.416157 c
+2.500000 9.876394 2.126904 10.249491 1.666667 10.249491 c
+1.206429 10.249491 0.833333 9.876394 0.833333 9.416157 c
+0.833333 8.955919 1.206429 8.582824 1.666667 8.582824 c
+h
+16.241201 4.928711 m
+16.137482 5.356445 15.529145 5.356445 15.425426 4.928711 c
+15.140035 3.751772 l
+15.103004 3.599057 14.983768 3.479821 14.831054 3.442791 c
+13.654113 3.157400 l
+13.226378 3.053680 13.226380 2.445343 13.654115 2.341623 c
+14.831054 2.056234 l
+14.983768 2.019203 15.103004 1.899967 15.140035 1.747253 c
+15.425426 0.570312 l
+15.529145 0.142578 16.137482 0.142578 16.241201 0.570314 c
+16.526592 1.747253 l
+16.563623 1.899967 16.682858 2.019203 16.835573 2.056234 c
+18.012514 2.341623 l
+18.440248 2.445343 18.440247 3.053680 18.012512 3.157400 c
+16.835573 3.442791 l
+16.682858 3.479821 16.563623 3.599057 16.526592 3.751772 c
+16.241201 4.928711 l
+h
+f*
+n
+Q
+
+endstream
+endobj
+
+3 0 obj
+  3211
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 20.000000 20.000000 ]
+     /Resources 1 0 R
+     /Contents 2 0 R
+     /Parent 5 0 R
+  >>
+endobj
+
+5 0 obj
+  << /Kids [ 4 0 R ]
+     /Count 1
+     /Type /Pages
+  >>
+endobj
+
+6 0 obj
+  << /Pages 5 0 R
+     /Type /Catalog
+  >>
+endobj
+
+xref
+0 7
+0000000000 65535 f
+0000000010 00000 n
+0000000034 00000 n
+0000003301 00000 n
+0000003324 00000 n
+0000003497 00000 n
+0000003571 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+3630
+%%EOF

+ 22 - 0
PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/AISummarize.imageset/Contents.json

@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "filename" : "icon.pdf",
+      "idiom" : "universal"
+    },
+    {
+      "appearances" : [
+        {
+          "appearance" : "luminosity",
+          "value" : "dark"
+        }
+      ],
+      "filename" : "icon-2.pdf",
+      "idiom" : "universal"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

+ 143 - 0
PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/AISummarize.imageset/icon-2.pdf

@@ -0,0 +1,143 @@
+%PDF-1.7
+
+1 0 obj
+  << >>
+endobj
+
+2 0 obj
+  << /Length 3 0 R >>
+stream
+/DeviceRGB CS
+/DeviceRGB cs
+q
+1.000000 0.000000 -0.000000 1.000000 3.250000 4.000000 cm
+0.334277 0.960000 1.000000 scn
+0.000000 10.750000 m
+0.000000 11.164213 0.335786 11.500000 0.750000 11.500000 c
+12.750000 11.500000 l
+13.164214 11.500000 13.500000 11.164213 13.500000 10.750000 c
+13.500000 10.335787 13.164214 10.000000 12.750000 10.000000 c
+0.750000 10.000000 l
+0.335786 10.000000 0.000000 10.335787 0.000000 10.750000 c
+h
+0.000000 5.750000 m
+0.000000 6.164214 0.335786 6.500000 0.750000 6.500000 c
+12.750000 6.500000 l
+13.164214 6.500000 13.500000 6.164214 13.500000 5.750000 c
+13.500000 5.335786 13.164214 5.000000 12.750000 5.000000 c
+0.750000 5.000000 l
+0.335786 5.000000 0.000000 5.335786 0.000000 5.750000 c
+h
+0.750000 1.500000 m
+0.335786 1.500000 0.000000 1.164213 0.000000 0.750000 c
+0.000000 0.335787 0.335786 0.000000 0.750000 0.000000 c
+6.750000 0.000000 l
+7.164214 0.000000 7.500000 0.335787 7.500000 0.750000 c
+7.500000 1.164213 7.164214 1.500000 6.750000 1.500000 c
+0.750000 1.500000 l
+h
+f*
+n
+Q
+q
+1.000000 0.000000 -0.000000 1.000000 0.166687 0.914429 cm
+0.334277 0.960000 1.000000 scn
+1.673690 18.328930 m
+1.756666 18.671118 2.243335 18.671118 2.326310 18.328930 c
+2.554623 17.387379 l
+2.584247 17.265207 2.679636 17.169819 2.801807 17.140194 c
+3.743359 16.911882 l
+4.085546 16.828907 4.085548 16.342236 3.743360 16.259260 c
+2.801807 16.030949 l
+2.679636 16.001324 2.584247 15.905936 2.554623 15.783765 c
+2.326310 14.842214 l
+2.243335 14.500025 1.756666 14.500025 1.673690 14.842212 c
+1.445377 15.783765 l
+1.415753 15.905936 1.320364 16.001324 1.198193 16.030949 c
+0.256642 16.259260 l
+-0.085546 16.342236 -0.085548 16.828907 0.256640 16.911882 c
+1.198193 17.140194 l
+1.320364 17.169819 1.415753 17.265207 1.445377 17.387379 c
+1.673690 18.328930 l
+h
+18.833334 14.918904 m
+19.293571 14.918904 19.666666 15.292000 19.666666 15.752237 c
+19.666666 16.212475 19.293571 16.585571 18.833334 16.585571 c
+18.373096 16.585571 18.000000 16.212475 18.000000 15.752237 c
+18.000000 15.292000 18.373096 14.918904 18.833334 14.918904 c
+h
+16.741207 5.764801 m
+16.637487 6.192535 16.029152 6.192535 15.925432 5.764801 c
+15.640041 4.587862 l
+15.603011 4.435147 15.483775 4.315912 15.331060 4.278881 c
+14.154119 3.993490 l
+13.726385 3.889771 13.726387 3.281432 14.154121 3.177713 c
+15.331060 2.892324 l
+15.483775 2.855293 15.603010 2.736057 15.640041 2.583344 c
+15.925432 1.406403 l
+16.029152 0.978668 16.637487 0.978670 16.741207 1.406404 c
+17.026598 2.583344 l
+17.063629 2.736057 17.182865 2.855293 17.335579 2.892324 c
+18.512520 3.177713 l
+18.940254 3.281432 18.940252 3.889771 18.512518 3.993490 c
+17.335579 4.278881 l
+17.182865 4.315911 17.063629 4.435147 17.026598 4.587862 c
+16.741207 5.764801 l
+h
+13.083320 0.085602 m
+13.497533 0.085602 13.833320 0.421389 13.833320 0.835602 c
+13.833320 1.249815 13.497533 1.585602 13.083320 1.585602 c
+12.669106 1.585602 12.333320 1.249815 12.333320 0.835602 c
+12.333320 0.421389 12.669106 0.085602 13.083320 0.085602 c
+h
+f*
+n
+Q
+
+endstream
+endobj
+
+3 0 obj
+  2970
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 20.000000 20.000000 ]
+     /Resources 1 0 R
+     /Contents 2 0 R
+     /Parent 5 0 R
+  >>
+endobj
+
+5 0 obj
+  << /Kids [ 4 0 R ]
+     /Count 1
+     /Type /Pages
+  >>
+endobj
+
+6 0 obj
+  << /Pages 5 0 R
+     /Type /Catalog
+  >>
+endobj
+
+xref
+0 7
+0000000000 65535 f
+0000000010 00000 n
+0000000034 00000 n
+0000003060 00000 n
+0000003083 00000 n
+0000003256 00000 n
+0000003330 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+3389
+%%EOF

+ 143 - 0
PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/AISummarize.imageset/icon.pdf

@@ -0,0 +1,143 @@
+%PDF-1.7
+
+1 0 obj
+  << >>
+endobj
+
+2 0 obj
+  << /Length 3 0 R >>
+stream
+/DeviceRGB CS
+/DeviceRGB cs
+q
+1.000000 0.000000 -0.000000 1.000000 3.250000 4.000000 cm
+0.000000 0.858824 0.913725 scn
+0.000000 10.750000 m
+0.000000 11.164213 0.335786 11.500000 0.750000 11.500000 c
+12.750000 11.500000 l
+13.164214 11.500000 13.500000 11.164213 13.500000 10.750000 c
+13.500000 10.335787 13.164214 10.000000 12.750000 10.000000 c
+0.750000 10.000000 l
+0.335786 10.000000 0.000000 10.335787 0.000000 10.750000 c
+h
+0.000000 5.750000 m
+0.000000 6.164214 0.335786 6.500000 0.750000 6.500000 c
+12.750000 6.500000 l
+13.164214 6.500000 13.500000 6.164214 13.500000 5.750000 c
+13.500000 5.335786 13.164214 5.000000 12.750000 5.000000 c
+0.750000 5.000000 l
+0.335786 5.000000 0.000000 5.335786 0.000000 5.750000 c
+h
+0.750000 1.500000 m
+0.335786 1.500000 0.000000 1.164213 0.000000 0.750000 c
+0.000000 0.335787 0.335786 0.000000 0.750000 0.000000 c
+6.750000 0.000000 l
+7.164214 0.000000 7.500000 0.335787 7.500000 0.750000 c
+7.500000 1.164213 7.164214 1.500000 6.750000 1.500000 c
+0.750000 1.500000 l
+h
+f*
+n
+Q
+q
+1.000000 0.000000 -0.000000 1.000000 0.166687 0.914429 cm
+0.000000 0.858824 0.913725 scn
+1.673690 18.328930 m
+1.756666 18.671118 2.243335 18.671118 2.326310 18.328930 c
+2.554623 17.387379 l
+2.584247 17.265207 2.679636 17.169819 2.801807 17.140194 c
+3.743359 16.911882 l
+4.085546 16.828907 4.085548 16.342236 3.743360 16.259260 c
+2.801807 16.030949 l
+2.679636 16.001324 2.584247 15.905936 2.554623 15.783765 c
+2.326310 14.842214 l
+2.243335 14.500025 1.756666 14.500025 1.673690 14.842212 c
+1.445377 15.783765 l
+1.415753 15.905936 1.320364 16.001324 1.198193 16.030949 c
+0.256642 16.259260 l
+-0.085546 16.342236 -0.085548 16.828907 0.256640 16.911882 c
+1.198193 17.140194 l
+1.320364 17.169819 1.415753 17.265207 1.445377 17.387379 c
+1.673690 18.328930 l
+h
+18.833334 14.918904 m
+19.293571 14.918904 19.666666 15.292000 19.666666 15.752237 c
+19.666666 16.212475 19.293571 16.585571 18.833334 16.585571 c
+18.373096 16.585571 18.000000 16.212475 18.000000 15.752237 c
+18.000000 15.292000 18.373096 14.918904 18.833334 14.918904 c
+h
+16.741207 5.764801 m
+16.637487 6.192535 16.029152 6.192535 15.925432 5.764801 c
+15.640041 4.587862 l
+15.603011 4.435147 15.483775 4.315912 15.331060 4.278881 c
+14.154119 3.993490 l
+13.726385 3.889771 13.726387 3.281432 14.154121 3.177713 c
+15.331060 2.892324 l
+15.483775 2.855293 15.603010 2.736057 15.640041 2.583344 c
+15.925432 1.406403 l
+16.029152 0.978668 16.637487 0.978670 16.741207 1.406404 c
+17.026598 2.583344 l
+17.063629 2.736057 17.182865 2.855293 17.335579 2.892324 c
+18.512520 3.177713 l
+18.940254 3.281432 18.940252 3.889771 18.512518 3.993490 c
+17.335579 4.278881 l
+17.182865 4.315911 17.063629 4.435147 17.026598 4.587862 c
+16.741207 5.764801 l
+h
+13.083320 0.085602 m
+13.497533 0.085602 13.833320 0.421389 13.833320 0.835602 c
+13.833320 1.249815 13.497533 1.585602 13.083320 1.585602 c
+12.669106 1.585602 12.333320 1.249815 12.333320 0.835602 c
+12.333320 0.421389 12.669106 0.085602 13.083320 0.085602 c
+h
+f*
+n
+Q
+
+endstream
+endobj
+
+3 0 obj
+  2970
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 20.000000 20.000000 ]
+     /Resources 1 0 R
+     /Contents 2 0 R
+     /Parent 5 0 R
+  >>
+endobj
+
+5 0 obj
+  << /Kids [ 4 0 R ]
+     /Count 1
+     /Type /Pages
+  >>
+endobj
+
+6 0 obj
+  << /Pages 5 0 R
+     /Type /Catalog
+  >>
+endobj
+
+xref
+0 7
+0000000000 65535 f
+0000000010 00000 n
+0000000034 00000 n
+0000003060 00000 n
+0000003083 00000 n
+0000003256 00000 n
+0000003330 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+3389
+%%EOF

+ 22 - 0
PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/AITranslate.imageset/Contents.json

@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "filename" : "icon-5.pdf",
+      "idiom" : "universal"
+    },
+    {
+      "appearances" : [
+        {
+          "appearance" : "luminosity",
+          "value" : "dark"
+        }
+      ],
+      "filename" : "icon-6.pdf",
+      "idiom" : "universal"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

+ 175 - 0
PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/AITranslate.imageset/icon-5.pdf

@@ -0,0 +1,175 @@
+%PDF-1.7
+
+1 0 obj
+  << >>
+endobj
+
+2 0 obj
+  << /Length 3 0 R >>
+stream
+/DeviceRGB CS
+/DeviceRGB cs
+q
+1.000000 0.000000 -0.000000 1.000000 2.900024 2.824036 cm
+1.000000 0.420000 0.000000 scn
+9.928583 8.166849 m
+9.500806 8.166849 9.156050 7.881697 8.955010 7.545436 c
+6.795929 3.212516 l
+6.795387 3.211443 l
+5.721610 1.119634 l
+5.491413 0.801723 5.662201 0.358570 6.081868 0.211926 c
+6.445554 -0.000009 6.888319 0.144075 7.039588 0.516734 c
+7.897947 2.239575 l
+11.895809 2.239575 l
+12.755947 0.513164 l
+12.825253 0.374056 12.914949 0.263672 13.027635 0.188280 c
+13.140964 0.112458 13.271753 0.075939 13.416145 0.075939 c
+13.419182 0.075939 l
+13.480439 0.075936 13.534207 0.075934 13.596788 0.084907 c
+13.660581 0.094052 13.730319 0.111955 13.828331 0.144741 c
+13.835087 0.147001 l
+13.841455 0.150197 l
+13.997949 0.228723 14.107859 0.381171 14.161489 0.551605 c
+14.215387 0.722894 14.216177 0.921853 14.143560 1.104041 c
+13.061780 3.211443 l
+13.061237 3.212516 l
+10.905832 7.538716 l
+10.699438 7.952976 10.348627 8.166849 9.928583 8.166849 c
+h
+0.439171 3.512560 m
+0.064982 3.359577 -0.072407 2.915682 0.070517 2.557096 c
+0.073904 2.549527 l
+0.143211 2.410419 0.232906 2.300035 0.345592 2.224644 c
+0.458921 2.148822 0.589710 2.112303 0.734102 2.112303 c
+0.763747 2.112303 0.794229 2.119313 0.817885 2.125506 c
+0.834252 2.129791 0.853129 2.135336 0.871317 2.140678 c
+0.896411 2.147995 l
+0.950946 2.163631 1.002789 2.175940 1.051153 2.175940 c
+1.074835 2.175940 l
+1.096002 2.186561 l
+2.595602 2.939034 3.912421 3.937211 4.986314 5.121434 c
+5.165391 4.941719 l
+5.458113 4.647953 5.902085 4.647953 6.194807 4.941719 c
+6.487332 5.235288 6.487332 5.680228 6.194807 5.973797 c
+5.875175 6.294569 l
+6.982987 7.794393 7.848243 9.536171 8.234822 11.403213 c
+9.167661 11.403213 l
+9.380723 11.403213 9.565998 11.474933 9.698221 11.607628 c
+9.830413 11.740292 9.901763 11.926049 9.901763 12.139576 c
+9.901763 12.353104 9.830413 12.538861 9.698221 12.671524 c
+9.565998 12.804219 9.380723 12.875939 9.167661 12.875939 c
+5.716689 12.875939 l
+5.716689 13.539577 l
+5.716689 13.753103 5.645339 13.938861 5.513147 14.071525 c
+5.380924 14.204220 5.195649 14.275940 4.982587 14.275940 c
+4.769524 14.275940 4.584249 14.204220 4.452026 14.071525 c
+4.319834 13.938861 4.248484 13.753103 4.248484 13.539577 c
+4.248484 12.875939 l
+0.734102 12.875939 l
+0.521040 12.875939 0.335765 12.804219 0.203542 12.671524 c
+0.071350 12.538861 0.000000 12.353104 0.000000 12.139576 c
+0.000000 11.926049 0.071350 11.740292 0.203542 11.607628 c
+0.335765 11.474933 0.521040 11.403213 0.734102 11.403213 c
+6.692879 11.403213 l
+6.324330 9.982353 5.732687 8.673977 4.917889 7.477555 c
+4.457571 8.137022 4.104811 8.850985 3.807004 9.568192 c
+3.662195 9.930420 3.227630 10.155573 2.852796 10.005106 c
+2.491004 9.859873 2.266990 9.423603 2.416695 9.048006 c
+2.792500 8.105143 3.350812 7.164945 4.029933 6.227780 c
+3.034266 5.120024 1.797754 4.194805 0.439171 3.512560 c
+h
+11.160457 3.648666 m
+8.630098 3.648666 l
+9.867163 6.188049 l
+11.160457 3.648666 l
+h
+f*
+n
+Q
+q
+1.000000 0.000000 -0.000000 1.000000 14.000000 13.773376 cm
+1.000000 0.420000 0.000000 scn
+2.371294 5.562620 m
+2.542292 5.955602 3.147929 5.927532 3.256834 5.478411 c
+3.576472 4.160237 l
+3.617947 3.989198 3.751490 3.855654 3.922530 3.814179 c
+5.240702 3.494542 l
+5.719765 3.378376 5.719765 2.697039 5.240703 2.580873 c
+3.922530 2.261236 l
+3.751490 2.219761 3.617947 2.086218 3.576472 1.915178 c
+3.256834 0.597005 l
+3.140669 0.117942 2.459331 0.117942 2.343166 0.597004 c
+2.023529 1.915178 l
+2.020937 1.925868 2.017985 1.936411 2.014687 1.946795 c
+1.965214 2.102551 1.837820 2.222353 1.677470 2.261236 c
+0.359297 2.580873 l
+0.353705 2.582261 l
+-0.119758 2.702354 -0.117894 3.378829 0.359297 3.494542 c
+1.677470 3.814179 l
+1.848510 3.855654 1.982054 3.989198 2.023528 4.160237 c
+2.343166 5.478410 l
+2.350426 5.508351 2.359895 5.536422 2.371294 5.562620 c
+h
+f
+n
+Q
+q
+1.000000 0.000000 -0.000000 1.000000 14.000000 18.211060 cm
+1.000000 0.420000 0.000000 scn
+5.600000 -5.599976 m
+5.986599 -5.599976 6.300000 -5.286575 6.300000 -4.899975 c
+6.300000 -4.513376 5.986599 -4.199975 5.600000 -4.199975 c
+5.213401 -4.199975 4.900000 -4.513376 4.900000 -4.899975 c
+4.900000 -5.286575 5.213401 -5.599976 5.600000 -5.599976 c
+h
+f
+n
+Q
+
+endstream
+endobj
+
+3 0 obj
+  4158
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 20.300003 20.000000 ]
+     /Resources 1 0 R
+     /Contents 2 0 R
+     /Parent 5 0 R
+  >>
+endobj
+
+5 0 obj
+  << /Kids [ 4 0 R ]
+     /Count 1
+     /Type /Pages
+  >>
+endobj
+
+6 0 obj
+  << /Pages 5 0 R
+     /Type /Catalog
+  >>
+endobj
+
+xref
+0 7
+0000000000 65535 f
+0000000010 00000 n
+0000000034 00000 n
+0000004248 00000 n
+0000004271 00000 n
+0000004444 00000 n
+0000004518 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+4577
+%%EOF

+ 175 - 0
PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/AITranslate.imageset/icon-6.pdf

@@ -0,0 +1,175 @@
+%PDF-1.7
+
+1 0 obj
+  << >>
+endobj
+
+2 0 obj
+  << /Length 3 0 R >>
+stream
+/DeviceRGB CS
+/DeviceRGB cs
+q
+1.000000 0.000000 -0.000000 1.000000 2.900024 2.823975 cm
+1.000000 0.596011 0.303467 scn
+9.928583 8.166910 m
+9.500806 8.166910 9.156050 7.881758 8.955010 7.545497 c
+6.795929 3.212577 l
+6.795387 3.211504 l
+5.721610 1.119695 l
+5.491413 0.801785 5.662201 0.358631 6.081868 0.211987 c
+6.445554 0.000052 6.888319 0.144136 7.039588 0.516795 c
+7.897947 2.239636 l
+11.895809 2.239636 l
+12.755947 0.513225 l
+12.825253 0.374117 12.914949 0.263733 13.027635 0.188341 c
+13.140964 0.112519 13.271753 0.076000 13.416145 0.076000 c
+13.419182 0.076000 l
+13.480439 0.075997 13.534207 0.075995 13.596788 0.084968 c
+13.660581 0.094113 13.730319 0.112016 13.828331 0.144802 c
+13.835087 0.147062 l
+13.841455 0.150258 l
+13.997949 0.228784 14.107859 0.381232 14.161489 0.551666 c
+14.215387 0.722955 14.216177 0.921914 14.143560 1.104102 c
+13.061780 3.211504 l
+13.061237 3.212577 l
+10.905832 7.538777 l
+10.699438 7.953037 10.348627 8.166910 9.928583 8.166910 c
+h
+0.439171 3.512621 m
+0.064982 3.359638 -0.072407 2.915743 0.070517 2.557157 c
+0.073904 2.549588 l
+0.143211 2.410480 0.232906 2.300097 0.345592 2.224705 c
+0.458921 2.148883 0.589710 2.112364 0.734102 2.112364 c
+0.763747 2.112364 0.794229 2.119374 0.817885 2.125567 c
+0.834252 2.129852 0.853129 2.135397 0.871317 2.140739 c
+0.896411 2.148056 l
+0.950946 2.163692 1.002789 2.176001 1.051153 2.176001 c
+1.074835 2.176001 l
+1.096002 2.186622 l
+2.595602 2.939095 3.912421 3.937272 4.986314 5.121495 c
+5.165391 4.941780 l
+5.458113 4.648014 5.902085 4.648014 6.194807 4.941780 c
+6.487332 5.235349 6.487332 5.680289 6.194807 5.973858 c
+5.875175 6.294630 l
+6.982987 7.794454 7.848243 9.536232 8.234822 11.403274 c
+9.167661 11.403274 l
+9.380723 11.403274 9.565998 11.474994 9.698221 11.607689 c
+9.830413 11.740353 9.901763 11.926110 9.901763 12.139637 c
+9.901763 12.353165 9.830413 12.538922 9.698221 12.671585 c
+9.565998 12.804280 9.380723 12.876000 9.167661 12.876000 c
+5.716689 12.876000 l
+5.716689 13.539638 l
+5.716689 13.753164 5.645339 13.938922 5.513147 14.071586 c
+5.380924 14.204281 5.195649 14.276001 4.982587 14.276001 c
+4.769524 14.276001 4.584249 14.204281 4.452026 14.071586 c
+4.319834 13.938922 4.248484 13.753164 4.248484 13.539638 c
+4.248484 12.876000 l
+0.734102 12.876000 l
+0.521040 12.876000 0.335765 12.804280 0.203542 12.671585 c
+0.071350 12.538922 0.000000 12.353165 0.000000 12.139637 c
+0.000000 11.926110 0.071350 11.740353 0.203542 11.607689 c
+0.335765 11.474994 0.521040 11.403274 0.734102 11.403274 c
+6.692879 11.403274 l
+6.324330 9.982414 5.732687 8.674038 4.917889 7.477616 c
+4.457571 8.137083 4.104811 8.851046 3.807004 9.568253 c
+3.662195 9.930481 3.227630 10.155634 2.852796 10.005167 c
+2.491004 9.859934 2.266990 9.423664 2.416695 9.048067 c
+2.792500 8.105204 3.350812 7.165006 4.029933 6.227841 c
+3.034266 5.120085 1.797754 4.194866 0.439171 3.512621 c
+h
+11.160457 3.648727 m
+8.630098 3.648727 l
+9.867163 6.188110 l
+11.160457 3.648727 l
+h
+f*
+n
+Q
+q
+1.000000 0.000000 -0.000000 1.000000 14.000000 13.773438 cm
+1.000000 0.596011 0.303467 scn
+2.371294 5.562559 m
+2.542292 5.955541 3.147929 5.927471 3.256834 5.478350 c
+3.576472 4.160176 l
+3.617947 3.989137 3.751490 3.855593 3.922530 3.814118 c
+5.240702 3.494481 l
+5.719765 3.378315 5.719765 2.696978 5.240703 2.580812 c
+3.922530 2.261175 l
+3.751490 2.219700 3.617947 2.086157 3.576472 1.915117 c
+3.256834 0.596944 l
+3.140669 0.117881 2.459331 0.117881 2.343166 0.596943 c
+2.023529 1.915117 l
+2.020937 1.925807 2.017985 1.936350 2.014687 1.946734 c
+1.965214 2.102490 1.837820 2.222292 1.677470 2.261175 c
+0.359297 2.580812 l
+0.353705 2.582200 l
+-0.119758 2.702293 -0.117894 3.378768 0.359297 3.494481 c
+1.677470 3.814118 l
+1.848510 3.855593 1.982054 3.989137 2.023528 4.160176 c
+2.343166 5.478349 l
+2.350426 5.508290 2.359895 5.536361 2.371294 5.562559 c
+h
+f
+n
+Q
+q
+1.000000 0.000000 -0.000000 1.000000 14.000000 18.211060 cm
+1.000000 0.596011 0.303467 scn
+5.600000 -5.599976 m
+5.986599 -5.599976 6.300000 -5.286575 6.300000 -4.899975 c
+6.300000 -4.513376 5.986599 -4.199975 5.600000 -4.199975 c
+5.213401 -4.199975 4.900000 -4.513376 4.900000 -4.899975 c
+4.900000 -5.286575 5.213401 -5.599976 5.600000 -5.599976 c
+h
+f
+n
+Q
+
+endstream
+endobj
+
+3 0 obj
+  4157
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 20.299988 20.000000 ]
+     /Resources 1 0 R
+     /Contents 2 0 R
+     /Parent 5 0 R
+  >>
+endobj
+
+5 0 obj
+  << /Kids [ 4 0 R ]
+     /Count 1
+     /Type /Pages
+  >>
+endobj
+
+6 0 obj
+  << /Pages 5 0 R
+     /Type /Catalog
+  >>
+endobj
+
+xref
+0 7
+0000000000 65535 f
+0000000010 00000 n
+0000000034 00000 n
+0000004247 00000 n
+0000004270 00000 n
+0000004443 00000 n
+0000004517 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+4576
+%%EOF

+ 105 - 0
PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/AIchange.imageset/AIchange.pdf

@@ -0,0 +1,105 @@
+%PDF-1.7
+
+1 0 obj
+  << >>
+endobj
+
+2 0 obj
+  << /Length 3 0 R >>
+stream
+/DeviceRGB CS
+/DeviceRGB cs
+q
+1.000000 0.000000 -0.000000 1.000000 7.000000 14.000000 cm
+0.460000 0.465714 0.500000 scn
+0.000000 1.000000 m
+12.000000 1.000000 l
+12.000000 3.000000 l
+0.000000 3.000000 l
+0.000000 1.000000 l
+h
+f
+n
+Q
+q
+1.000000 0.000000 -0.000000 1.000000 5.000000 6.000000 cm
+0.460000 0.465714 0.500000 scn
+0.000000 1.000000 m
+12.000000 1.000000 l
+12.000000 3.000000 l
+0.000000 3.000000 l
+0.000000 1.000000 l
+h
+f
+n
+Q
+q
+1.000000 0.000000 -0.000000 1.000000 17.000000 12.000000 cm
+0.460000 0.465714 0.500000 scn
+0.000000 8.000000 m
+4.000000 4.000000 l
+0.000000 0.000000 l
+0.000000 8.000000 l
+h
+f
+n
+Q
+q
+-1.000000 -0.000000 -0.000000 1.000000 7.000000 4.000000 cm
+0.460000 0.465714 0.500000 scn
+0.000000 8.000000 m
+4.000000 4.000000 l
+0.000000 0.000000 l
+0.000000 8.000000 l
+h
+f
+n
+Q
+
+endstream
+endobj
+
+3 0 obj
+  793
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 24.000000 24.000000 ]
+     /Resources 1 0 R
+     /Contents 2 0 R
+     /Parent 5 0 R
+  >>
+endobj
+
+5 0 obj
+  << /Kids [ 4 0 R ]
+     /Count 1
+     /Type /Pages
+  >>
+endobj
+
+6 0 obj
+  << /Pages 5 0 R
+     /Type /Catalog
+  >>
+endobj
+
+xref
+0 7
+0000000000 65535 f
+0000000010 00000 n
+0000000034 00000 n
+0000000883 00000 n
+0000000905 00000 n
+0000001078 00000 n
+0000001152 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+1211
+%%EOF

+ 12 - 0
PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/AIchange.imageset/Contents.json

@@ -0,0 +1,12 @@
+{
+  "images" : [
+    {
+      "filename" : "AIchange.pdf",
+      "idiom" : "universal"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

+ 95 - 0
PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/AItime.imageset/AItime.pdf

@@ -0,0 +1,95 @@
+%PDF-1.7
+
+1 0 obj
+  << >>
+endobj
+
+2 0 obj
+  << /Length 3 0 R >>
+stream
+/DeviceRGB CS
+/DeviceRGB cs
+q
+1.000000 0.000000 -0.000000 1.000000 0.000000 0.000000 cm
+0.854870 0.858652 0.870000 scn
+12.000000 6.000000 m
+12.000000 2.686292 9.313708 0.000000 6.000000 0.000000 c
+2.686291 0.000000 0.000000 2.686292 0.000000 6.000000 c
+0.000000 9.313708 2.686291 12.000000 6.000000 12.000000 c
+9.313708 12.000000 12.000000 9.313708 12.000000 6.000000 c
+h
+f
+n
+Q
+q
+1.000000 0.000000 -0.000000 1.000000 6.000000 3.646446 cm
+0.460000 0.465714 0.500000 scn
+0.000000 2.353554 m
+-0.500000 2.353554 l
+-0.500000 2.146447 l
+-0.353553 2.000000 l
+0.000000 2.353554 l
+h
+-0.500000 5.353554 m
+-0.500000 2.353554 l
+0.500000 2.353554 l
+0.500000 5.353554 l
+-0.500000 5.353554 l
+h
+-0.353553 2.000000 m
+1.646447 0.000000 l
+2.353553 0.707107 l
+0.353553 2.707107 l
+-0.353553 2.000000 l
+h
+f
+n
+Q
+
+endstream
+endobj
+
+3 0 obj
+  789
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 12.000000 12.000000 ]
+     /Resources 1 0 R
+     /Contents 2 0 R
+     /Parent 5 0 R
+  >>
+endobj
+
+5 0 obj
+  << /Kids [ 4 0 R ]
+     /Count 1
+     /Type /Pages
+  >>
+endobj
+
+6 0 obj
+  << /Pages 5 0 R
+     /Type /Catalog
+  >>
+endobj
+
+xref
+0 7
+0000000000 65535 f
+0000000010 00000 n
+0000000034 00000 n
+0000000879 00000 n
+0000000901 00000 n
+0000001074 00000 n
+0000001148 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+1207
+%%EOF

+ 22 - 0
PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/AItime.imageset/Contents.json

@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "filename" : "AItime.pdf",
+      "idiom" : "universal"
+    },
+    {
+      "appearances" : [
+        {
+          "appearance" : "luminosity",
+          "value" : "dark"
+        }
+      ],
+      "filename" : "time.pdf",
+      "idiom" : "universal"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

+ 99 - 0
PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/AItime.imageset/time.pdf

@@ -0,0 +1,99 @@
+%PDF-1.7
+
+1 0 obj
+  << /ExtGState << /E2 << /ca 0.500000 >>
+                   /E1 << /ca 0.300000 >>
+                >> >>
+endobj
+
+2 0 obj
+  << /Length 3 0 R >>
+stream
+/DeviceRGB CS
+/DeviceRGB cs
+q
+/E1 gs
+1.000000 0.000000 -0.000000 1.000000 0.000000 0.000000 cm
+1.000000 1.000000 1.000000 scn
+12.000000 6.000000 m
+12.000000 2.686292 9.313708 0.000000 6.000000 0.000000 c
+2.686291 0.000000 0.000000 2.686292 0.000000 6.000000 c
+0.000000 9.313708 2.686291 12.000000 6.000000 12.000000 c
+9.313708 12.000000 12.000000 9.313708 12.000000 6.000000 c
+h
+f
+n
+Q
+q
+/E2 gs
+1.000000 0.000000 -0.000000 1.000000 6.000000 3.646484 cm
+1.000000 1.000000 1.000000 scn
+0.000000 2.353516 m
+-0.500000 2.353516 l
+-0.500000 2.146409 l
+-0.353553 1.999962 l
+0.000000 2.353516 l
+h
+-0.500000 5.353516 m
+-0.500000 2.353516 l
+0.500000 2.353516 l
+0.500000 5.353516 l
+-0.500000 5.353516 l
+h
+-0.353553 1.999962 m
+1.646447 -0.000038 l
+2.353553 0.707069 l
+0.353553 2.707069 l
+-0.353553 1.999962 l
+h
+f
+n
+Q
+
+endstream
+endobj
+
+3 0 obj
+  804
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 12.000000 12.000000 ]
+     /Resources 1 0 R
+     /Contents 2 0 R
+     /Parent 5 0 R
+  >>
+endobj
+
+5 0 obj
+  << /Kids [ 4 0 R ]
+     /Count 1
+     /Type /Pages
+  >>
+endobj
+
+6 0 obj
+  << /Pages 5 0 R
+     /Type /Catalog
+  >>
+endobj
+
+xref
+0 7
+0000000000 65535 f
+0000000010 00000 n
+0000000132 00000 n
+0000000992 00000 n
+0000001014 00000 n
+0000001187 00000 n
+0000001261 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+1320
+%%EOF

+ 6 - 0
PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/Contents.json

@@ -0,0 +1,6 @@
+{
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

+ 12 - 0
PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/aiIconA.imageset/Contents.json

@@ -0,0 +1,12 @@
+{
+  "images" : [
+    {
+      "filename" : "aiIconA.pdf",
+      "idiom" : "universal"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

+ 157 - 0
PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/aiIconA.imageset/aiIconA.pdf

@@ -0,0 +1,157 @@
+%PDF-1.7
+
+1 0 obj
+  << >>
+endobj
+
+2 0 obj
+  << /Length 3 0 R >>
+stream
+/DeviceRGB CS
+/DeviceRGB cs
+q
+1.000000 0.000000 -0.000000 1.000000 1.334229 4.295898 cm
+1.000000 1.000000 1.000000 scn
+3.626329 6.481543 m
+3.806109 7.222950 4.860559 7.222950 5.040339 6.481543 c
+5.535016 4.441514 l
+5.599203 4.176809 5.805878 3.970134 6.070583 3.905948 c
+8.110613 3.411270 l
+8.852019 3.231489 8.852019 2.177041 8.110613 1.997260 c
+6.070583 1.502584 l
+5.805878 1.438396 5.599203 1.231721 5.535017 0.967017 c
+5.040339 -1.073012 l
+4.860559 -1.814419 3.806109 -1.814419 3.626329 -1.073013 c
+3.131652 0.967017 l
+3.067465 1.231721 2.860789 1.438396 2.596085 1.502583 c
+0.556056 1.997260 l
+-0.185351 2.177041 -0.185352 3.231489 0.556055 3.411270 c
+2.596085 3.905947 l
+2.860789 3.970134 3.067465 4.176809 3.131651 4.441514 c
+3.626329 6.481543 l
+h
+f
+n
+Q
+q
+1.000000 0.000000 -0.000000 1.000000 1.334229 9.684082 cm
+1.000000 1.000000 1.000000 scn
+11.047813 1.174854 m
+11.120417 1.474268 11.546252 1.474268 11.618855 1.174854 c
+11.818629 0.350996 l
+11.844551 0.244096 11.928016 0.160631 12.034916 0.134709 c
+12.858774 -0.065064 l
+13.158188 -0.137668 13.158189 -0.563503 12.858774 -0.636106 c
+12.034916 -0.835880 l
+11.928016 -0.861802 11.844551 -0.945266 11.818629 -1.052166 c
+11.618855 -1.876024 l
+11.546252 -2.175438 11.120417 -2.175439 11.047813 -1.876025 c
+10.848041 -1.052166 l
+10.822119 -0.945266 10.738653 -0.861802 10.631753 -0.835880 c
+9.807896 -0.636106 l
+9.508481 -0.563503 9.508481 -0.137668 9.807895 -0.065064 c
+10.631753 0.134709 l
+10.738653 0.160631 10.822119 0.244096 10.848041 0.350996 c
+11.047813 1.174854 l
+h
+f
+n
+Q
+q
+1.000000 0.000000 -0.000000 1.000000 1.334229 9.162598 cm
+1.000000 1.000000 1.000000 scn
+11.333335 1.550170 m
+11.170284 0.877755 l
+11.105110 0.608979 10.895254 0.399124 10.626477 0.333950 c
+9.954063 0.170899 l
+10.626477 0.007848 l
+10.895254 -0.057326 11.105110 -0.267181 11.170284 -0.535958 c
+11.333335 -1.208373 l
+11.496387 -0.535958 l
+11.561561 -0.267181 11.771415 -0.057326 12.040192 0.007848 c
+12.712606 0.170899 l
+12.040192 0.333950 l
+11.771415 0.399124 11.561561 0.608979 11.496387 0.877755 c
+11.333335 1.550170 l
+h
+11.659645 1.914258 m
+11.576670 2.256446 11.090000 2.256445 11.007024 1.914258 c
+10.778712 0.972706 l
+10.749087 0.850534 10.653698 0.755146 10.531528 0.725521 c
+9.589975 0.497209 l
+9.247787 0.414233 9.247787 -0.072435 9.589975 -0.155411 c
+10.531528 -0.383724 l
+10.653698 -0.413349 10.749087 -0.508737 10.778712 -0.630908 c
+11.007024 -1.572461 l
+11.090000 -1.914648 11.576670 -1.914648 11.659645 -1.572460 c
+11.887958 -0.630908 l
+11.917582 -0.508737 12.012971 -0.413349 12.135142 -0.383724 c
+13.076694 -0.155411 l
+13.418882 -0.072435 13.418882 0.414233 13.076694 0.497209 c
+12.135142 0.725522 l
+12.012971 0.755146 11.917583 0.850534 11.887958 0.972706 c
+11.659645 1.914258 l
+h
+f*
+n
+Q
+q
+1.000000 0.000000 -0.000000 1.000000 1.334229 12.000000 cm
+1.000000 1.000000 1.000000 scn
+8.000001 0.000163 m
+7.631811 0.000163 7.333334 0.298640 7.333334 0.666830 c
+7.333334 1.035019 7.631811 1.333496 8.000001 1.333496 c
+8.368191 1.333496 8.666668 1.035019 8.666668 0.666830 c
+8.666668 0.298640 8.368191 0.000163 8.000001 0.000163 c
+h
+f
+n
+Q
+
+endstream
+endobj
+
+3 0 obj
+  3087
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 16.000000 16.000000 ]
+     /Resources 1 0 R
+     /Contents 2 0 R
+     /Parent 5 0 R
+  >>
+endobj
+
+5 0 obj
+  << /Kids [ 4 0 R ]
+     /Count 1
+     /Type /Pages
+  >>
+endobj
+
+6 0 obj
+  << /Pages 5 0 R
+     /Type /Catalog
+  >>
+endobj
+
+xref
+0 7
+0000000000 65535 f
+0000000010 00000 n
+0000000034 00000 n
+0000003177 00000 n
+0000003200 00000 n
+0000003373 00000 n
+0000003447 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+3506
+%%EOF

+ 22 - 0
PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/aiInfoIcon.imageset/Contents.json

@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "filename" : "aiInfoIcon.pdf",
+      "idiom" : "universal"
+    },
+    {
+      "appearances" : [
+        {
+          "appearance" : "luminosity",
+          "value" : "dark"
+        }
+      ],
+      "filename" : "ic.pdf",
+      "idiom" : "universal"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

+ 94 - 0
PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/aiInfoIcon.imageset/aiInfoIcon.pdf

@@ -0,0 +1,94 @@
+%PDF-1.7
+
+1 0 obj
+  << /ExtGState << /E1 << /ca 0.300000 >> >> >>
+endobj
+
+2 0 obj
+  << /Length 3 0 R >>
+stream
+/DeviceRGB CS
+/DeviceRGB cs
+q
+/E1 gs
+1.000000 0.000000 -0.000000 1.000000 2.000000 2.000000 cm
+0.000000 0.000000 0.000000 scn
+12.000000 6.000000 m
+12.000000 2.723529 9.282353 0.000000 6.000000 0.000000 c
+2.723529 0.000000 0.000000 2.723529 0.000000 6.000000 c
+0.000000 9.282352 2.717647 12.000000 5.994118 12.000000 c
+9.276471 12.000000 12.000000 9.282352 12.000000 6.000000 c
+h
+6.030401 8.094555 m
+5.505007 8.094555 5.084692 8.514874 5.084692 9.047277 c
+5.084692 9.579681 5.505007 10.000000 6.030401 10.000000 c
+6.555795 10.000000 6.969105 9.579681 6.969105 9.047277 c
+6.969105 8.514874 6.555795 8.094555 6.030401 8.094555 c
+h
+7.767650 2.403337 m
+4.832448 2.403337 l
+4.531222 2.403337 4.300049 2.620502 4.300049 2.921730 c
+4.300049 3.201942 4.531222 3.433119 4.832448 3.433119 c
+5.722116 3.433119 l
+5.722116 6.225616 l
+4.951538 6.225616 l
+4.657317 6.225616 4.426143 6.442780 4.426143 6.744009 c
+4.426143 7.024221 4.657317 7.255397 4.951538 7.255397 c
+6.310556 7.255397 l
+6.681835 7.255397 6.877982 6.989195 6.877982 6.596897 c
+6.877982 3.433119 l
+7.767650 3.433119 l
+8.068875 3.433119 8.300049 3.201942 8.300049 2.921730 c
+8.300049 2.620502 8.068875 2.403337 7.767650 2.403337 c
+h
+f*
+n
+Q
+
+endstream
+endobj
+
+3 0 obj
+  1189
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 16.000000 16.000000 ]
+     /Resources 1 0 R
+     /Contents 2 0 R
+     /Parent 5 0 R
+  >>
+endobj
+
+5 0 obj
+  << /Kids [ 4 0 R ]
+     /Count 1
+     /Type /Pages
+  >>
+endobj
+
+6 0 obj
+  << /Pages 5 0 R
+     /Type /Catalog
+  >>
+endobj
+
+xref
+0 7
+0000000000 65535 f
+0000000010 00000 n
+0000000074 00000 n
+0000001319 00000 n
+0000001342 00000 n
+0000001515 00000 n
+0000001589 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+1648
+%%EOF

+ 94 - 0
PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/aiInfoIcon.imageset/ic.pdf

@@ -0,0 +1,94 @@
+%PDF-1.7
+
+1 0 obj
+  << /ExtGState << /E1 << /ca 0.500000 >> >> >>
+endobj
+
+2 0 obj
+  << /Length 3 0 R >>
+stream
+/DeviceRGB CS
+/DeviceRGB cs
+q
+/E1 gs
+1.000000 0.000000 -0.000000 1.000000 2.000000 2.000000 cm
+1.000000 1.000000 1.000000 scn
+12.000000 6.000000 m
+12.000000 2.723529 9.282353 0.000000 6.000000 0.000000 c
+2.723529 0.000000 0.000000 2.723529 0.000000 6.000000 c
+0.000000 9.282352 2.717647 12.000000 5.994118 12.000000 c
+9.276471 12.000000 12.000000 9.282352 12.000000 6.000000 c
+h
+6.030401 8.094555 m
+5.505007 8.094555 5.084692 8.514874 5.084692 9.047277 c
+5.084692 9.579681 5.505007 10.000000 6.030401 10.000000 c
+6.555795 10.000000 6.969105 9.579681 6.969105 9.047277 c
+6.969105 8.514874 6.555795 8.094555 6.030401 8.094555 c
+h
+7.767650 2.403337 m
+4.832448 2.403337 l
+4.531222 2.403337 4.300049 2.620502 4.300049 2.921730 c
+4.300049 3.201942 4.531222 3.433119 4.832448 3.433119 c
+5.722116 3.433119 l
+5.722116 6.225616 l
+4.951538 6.225616 l
+4.657317 6.225616 4.426143 6.442780 4.426143 6.744009 c
+4.426143 7.024221 4.657317 7.255397 4.951538 7.255397 c
+6.310556 7.255397 l
+6.681835 7.255397 6.877982 6.989195 6.877982 6.596897 c
+6.877982 3.433119 l
+7.767650 3.433119 l
+8.068875 3.433119 8.300049 3.201942 8.300049 2.921730 c
+8.300049 2.620502 8.068875 2.403337 7.767650 2.403337 c
+h
+f*
+n
+Q
+
+endstream
+endobj
+
+3 0 obj
+  1189
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 16.000000 16.000000 ]
+     /Resources 1 0 R
+     /Contents 2 0 R
+     /Parent 5 0 R
+  >>
+endobj
+
+5 0 obj
+  << /Kids [ 4 0 R ]
+     /Count 1
+     /Type /Pages
+  >>
+endobj
+
+6 0 obj
+  << /Pages 5 0 R
+     /Type /Catalog
+  >>
+endobj
+
+xref
+0 7
+0000000000 65535 f
+0000000010 00000 n
+0000000074 00000 n
+0000001319 00000 n
+0000001342 00000 n
+0000001515 00000 n
+0000001589 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+1648
+%%EOF

+ 12 - 0
PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/aiPDF_Clear.imageset/Contents.json

@@ -0,0 +1,12 @@
+{
+  "images" : [
+    {
+      "filename" : "aiPDF_Clear.pdf",
+      "idiom" : "universal"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

+ 172 - 0
PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/aiPDF_Clear.imageset/aiPDF_Clear.pdf

@@ -0,0 +1,172 @@
+%PDF-1.7
+
+1 0 obj
+  << /Length 2 0 R >>
+stream
+1.170898 0 0.087402 -0.145508 1.083496 1.083496 d1
+
+endstream
+endobj
+
+2 0 obj
+  51
+endobj
+
+3 0 obj
+  [ 1.170898 ]
+endobj
+
+4 0 obj
+  << /Length 5 0 R >>
+stream
+/CIDInit /ProcSet findresource begin
+12 dict begin
+begincmap
+/CIDSystemInfo
+<< /Registry (FigmaPDF)
+   /Ordering (FigmaPDF)
+   /Supplement 0
+>> def
+/CMapName /A-B-C def
+/CMapType 2 def
+1 begincodespacerange
+<00> <FF>
+endcodespacerange
+1 beginbfchar
+<00> <DBC0DC61>
+endbfchar
+endcmap
+CMapName currentdict /CMap defineresource pop
+end
+end
+endstream
+endobj
+
+5 0 obj
+  336
+endobj
+
+6 0 obj
+  << /Subtype /Type3
+     /CharProcs << /C0 1 0 R >>
+     /Encoding << /Type /Encoding
+                  /Differences [ 0 /C0 ]
+               >>
+     /Widths 3 0 R
+     /FontBBox [ 0.000000 0.000000 0.000000 0.000000 ]
+     /FontMatrix [ 1.000000 0.000000 0.000000 1.000000 0.000000 0.000000 ]
+     /Type /Font
+     /ToUnicode 4 0 R
+     /FirstChar 0
+     /LastChar 0
+     /Resources << >>
+  >>
+endobj
+
+7 0 obj
+  << /Font << /F1 6 0 R >> >>
+endobj
+
+8 0 obj
+  << /Length 9 0 R >>
+stream
+/DeviceRGB CS
+/DeviceRGB cs
+q
+1.000000 0.000000 -0.000000 1.000000 -2.393188 2.177979 cm
+0.501961 0.501961 0.501961 scn
+0.972900 0.186523 m
+h
+10.486450 -2.177979 m
+6.066895 -2.177979 2.393188 1.495728 2.393188 5.915283 c
+2.393188 10.342773 6.058960 14.008545 10.478516 14.008545 c
+14.906006 14.008545 18.579712 10.342773 18.579712 5.915283 c
+18.579712 1.495728 14.913940 -2.177979 10.486450 -2.177979 c
+h
+7.820435 2.582764 m
+8.002930 2.582764 8.169556 2.646240 8.296509 2.773193 c
+10.486450 4.979004 l
+12.684326 2.773193 l
+12.803345 2.646240 12.969971 2.582764 13.152466 2.582764 c
+13.525391 2.582764 13.818970 2.876343 13.818970 3.241333 c
+13.818970 3.423828 13.755493 3.590454 13.620605 3.709473 c
+11.422729 5.907349 l
+13.628540 8.113159 l
+13.771362 8.255981 13.826904 8.398804 13.826904 8.581299 c
+13.826904 8.946289 13.533325 9.231934 13.168335 9.231934 c
+12.993774 9.231934 12.850952 9.176392 12.716064 9.041504 c
+10.486450 6.827759 l
+8.272705 9.033569 l
+8.145752 9.152588 8.002930 9.216064 7.820435 9.216064 c
+7.455444 9.216064 7.169800 8.938354 7.169800 8.565430 c
+7.169800 8.390869 7.233276 8.232178 7.360229 8.105225 c
+9.558105 5.907349 l
+7.360229 3.701538 l
+7.233276 3.582520 7.169800 3.415894 7.169800 3.241333 c
+7.169800 2.876343 7.455444 2.582764 7.820435 2.582764 c
+h
+f
+n
+Q
+q
+1.000000 0.000000 -0.000000 1.000000 -2.393188 2.177979 cm
+BT
+16.250000 0.000000 0.000000 16.250000 0.972900 0.186523 Tm
+/F1 1.000000 Tf
+[ (\000) ] TJ
+ET
+Q
+
+endstream
+endobj
+
+9 0 obj
+  1446
+endobj
+
+10 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 16.186523 16.186523 ]
+     /Resources 7 0 R
+     /Contents 8 0 R
+     /Parent 11 0 R
+  >>
+endobj
+
+11 0 obj
+  << /Kids [ 10 0 R ]
+     /Count 1
+     /Type /Pages
+  >>
+endobj
+
+12 0 obj
+  << /Pages 11 0 R
+     /Type /Catalog
+  >>
+endobj
+
+xref
+0 13
+0000000000 65535 f
+0000000010 00000 n
+0000000117 00000 n
+0000000138 00000 n
+0000000169 00000 n
+0000000561 00000 n
+0000000583 00000 n
+0000000995 00000 n
+0000001041 00000 n
+0000002543 00000 n
+0000002566 00000 n
+0000002741 00000 n
+0000002817 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 12 0 R
+   /Size 13
+>>
+startxref
+2878
+%%EOF

+ 12 - 0
PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/aiTipBtnA.imageset/Contents.json

@@ -0,0 +1,12 @@
+{
+  "images" : [
+    {
+      "filename" : "aiTipBtnA.pdf",
+      "idiom" : "universal"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

BIN
PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/aiTipBtnA.imageset/aiTipBtnA.pdf


+ 22 - 0
PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/ai_Appstore.imageset/Contents.json

@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "filename" : "ai_Appstore.png",
+      "idiom" : "universal"
+    },
+    {
+      "appearances" : [
+        {
+          "appearance" : "luminosity",
+          "value" : "dark"
+        }
+      ],
+      "filename" : "img.png",
+      "idiom" : "universal"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

BIN
PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/ai_Appstore.imageset/ai_Appstore.png


BIN
PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/ai_Appstore.imageset/img.png


+ 12 - 0
PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/ai_proofreading_empty.imageset/Contents.json

@@ -0,0 +1,12 @@
+{
+  "images" : [
+    {
+      "filename" : "ai_proofreading_empty.pdf",
+      "idiom" : "universal"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

+ 144 - 0
PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/ai_proofreading_empty.imageset/ai_proofreading_empty.pdf

@@ -0,0 +1,144 @@
+%PDF-1.7
+
+1 0 obj
+  << /ExtGState << /E2 << /ca 0.050000 >>
+                   /E1 << /ca 0.050000 >>
+                >> >>
+endobj
+
+2 0 obj
+  << /Length 3 0 R >>
+stream
+/DeviceRGB CS
+/DeviceRGB cs
+q
+/E1 gs
+1.000000 0.000000 -0.000000 1.000000 3.333496 55.811523 cm
+0.000000 0.000000 0.000000 scn
+64.965050 19.572266 m
+64.550171 21.283205 62.116825 21.283203 61.701950 19.572264 c
+60.560383 14.864503 l
+60.412262 14.253647 59.935318 13.776703 59.324459 13.628580 c
+54.616695 12.487018 l
+52.905758 12.072140 52.905766 9.638796 54.616703 9.223918 c
+59.324459 8.082355 l
+59.935318 7.934231 60.412262 7.457289 60.560383 6.846432 c
+61.701950 2.138668 l
+62.116825 0.427731 64.550171 0.427732 64.965050 2.138672 c
+66.106613 6.846432 l
+66.254738 7.457289 66.731674 7.934232 67.342537 8.082355 c
+72.050301 9.223918 l
+73.761238 9.638796 73.761230 12.072140 72.050293 12.487018 c
+67.342537 13.628581 l
+66.731674 13.776705 66.254738 14.253647 66.106613 14.864503 c
+64.965050 19.572266 l
+h
+16.666668 14.188801 m
+18.507618 14.188801 20.000002 15.681186 20.000002 17.522135 c
+20.000002 19.363085 18.507618 20.855469 16.666668 20.855469 c
+14.825719 20.855469 13.333335 19.363085 13.333335 17.522135 c
+13.333335 15.681186 14.825719 14.188801 16.666668 14.188801 c
+h
+3.333334 4.188801 m
+5.174283 4.188801 6.666667 5.681185 6.666667 7.522134 c
+6.666667 9.363083 5.174283 10.855468 3.333334 10.855468 c
+1.492384 10.855468 0.000000 9.363083 0.000000 7.522134 c
+0.000000 5.681185 1.492384 4.188801 3.333334 4.188801 c
+h
+f*
+n
+Q
+q
+/E2 gs
+1.000000 0.000000 -0.000000 1.000000 14.034668 4.707031 cm
+0.000000 0.000000 0.000000 scn
+38.940063 23.994335 m
+39.800526 21.720531 38.115528 19.293457 35.684361 19.293457 c
+34.207993 19.293457 32.891541 20.223698 32.403122 21.616932 c
+32.119221 22.426765 31.836168 23.236900 31.553118 24.047035 c
+31.117504 25.293457 l
+12.188786 25.293457 l
+10.349184 20.037453 l
+6.619665 9.559280 l
+6.136127 8.200764 4.850110 7.293449 3.408108 7.293449 c
+1.042433 7.293449 -0.603891 9.644390 0.211081 11.865253 c
+1.514029 15.415897 2.757397 18.763966 3.941184 21.909454 c
+5.621184 26.421455 7.253184 30.693451 8.837184 34.725449 c
+10.469184 38.757454 12.077184 42.597450 13.661184 46.245453 c
+14.912603 49.165432 16.208963 52.055450 17.550261 54.915512 c
+18.203447 56.308308 19.607763 57.189453 21.146118 57.189453 c
+22.520248 57.189453 l
+24.058601 57.189453 25.462919 56.308308 26.116106 54.915512 c
+27.457405 52.055450 28.753765 49.165432 30.005184 46.245453 c
+31.589184 42.597450 33.173187 38.757454 34.757187 34.725449 c
+36.197811 31.166265 37.581242 27.585068 38.940063 23.994335 c
+h
+14.354087 31.293457 m
+28.888124 31.293457 l
+28.036478 33.537724 27.184832 35.737724 26.333185 37.893452 c
+24.845184 41.829453 23.285183 45.597454 21.653185 49.197453 c
+19.973183 45.597454 18.365185 41.829453 16.829185 37.893452 c
+16.004152 35.737724 15.179119 33.537724 14.354087 31.293457 c
+h
+60.086823 17.171650 m
+61.258392 18.343220 61.258392 20.242718 60.086823 21.414288 c
+58.915245 22.585861 57.015755 22.585861 55.844177 21.414288 c
+41.965500 7.535610 l
+36.086819 13.414291 l
+34.915249 14.585861 33.015751 14.585861 31.844179 13.414291 c
+30.672607 12.242718 30.672607 10.343224 31.844179 9.171646 c
+39.844177 1.171646 l
+41.015751 0.000076 42.915245 0.000076 44.086823 1.171646 c
+60.086823 17.171650 l
+h
+f*
+n
+Q
+
+endstream
+endobj
+
+3 0 obj
+  3135
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 80.000000 80.000000 ]
+     /Resources 1 0 R
+     /Contents 2 0 R
+     /Parent 5 0 R
+  >>
+endobj
+
+5 0 obj
+  << /Kids [ 4 0 R ]
+     /Count 1
+     /Type /Pages
+  >>
+endobj
+
+6 0 obj
+  << /Pages 5 0 R
+     /Type /Catalog
+  >>
+endobj
+
+xref
+0 7
+0000000000 65535 f
+0000000010 00000 n
+0000000132 00000 n
+0000003323 00000 n
+0000003346 00000 n
+0000003519 00000 n
+0000003593 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+3652
+%%EOF

+ 12 - 0
PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/ai_rewriting_empty.imageset/Contents.json

@@ -0,0 +1,12 @@
+{
+  "images" : [
+    {
+      "filename" : "ai_rewriting_empty.pdf",
+      "idiom" : "universal"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

+ 158 - 0
PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/ai_rewriting_empty.imageset/ai_rewriting_empty.pdf

@@ -0,0 +1,158 @@
+%PDF-1.7
+
+1 0 obj
+  << /ExtGState << /E2 << /ca 0.050000 >>
+                   /E1 << /ca 0.050000 >>
+                >> >>
+endobj
+
+2 0 obj
+  << /Length 3 0 R >>
+stream
+/DeviceRGB CS
+/DeviceRGB cs
+q
+/E1 gs
+0.707107 -0.707107 0.707107 0.707107 7.164185 19.336060 cm
+0.000000 0.000000 0.000000 scn
+0.000000 60.181885 m
+0.000000 64.047882 3.134007 67.181885 7.000000 67.181885 c
+18.999918 67.181885 l
+22.865915 67.181885 25.999914 64.047874 25.999914 60.181885 c
+25.999914 17.329075 l
+25.999914 16.017143 25.631231 14.731613 24.935909 13.619091 c
+17.239954 1.305511 l
+15.281621 -1.827835 10.718300 -1.827850 8.759960 1.305511 c
+1.064005 13.619091 l
+0.368685 14.731609 0.000000 16.017139 0.000000 17.329075 c
+0.000000 60.181885 l
+h
+7.000000 61.181885 m
+6.447715 61.181885 6.000000 60.734169 6.000000 60.181885 c
+6.000000 50.010204 l
+19.999914 50.010204 l
+19.999914 60.181885 l
+19.999914 60.734173 19.552198 61.181885 18.999918 61.181885 c
+7.000000 61.181885 l
+h
+19.999914 44.010204 m
+6.000000 44.010204 l
+6.000000 17.329075 l
+6.000000 17.141655 6.052670 16.958008 6.152001 16.799076 c
+12.999956 5.842300 l
+19.847914 16.799076 l
+19.947245 16.958004 19.999914 17.141655 19.999914 17.329075 c
+19.999914 44.010204 l
+h
+f*
+n
+Q
+q
+/E2 gs
+1.000000 0.000000 -0.000000 1.000000 3.333496 2.335938 cm
+0.000000 0.000000 0.000000 scn
+70.000008 67.664391 m
+71.840958 67.664391 73.333344 69.156769 73.333344 70.997719 c
+73.333344 72.838669 71.840958 74.331055 70.000008 74.331055 c
+68.159058 74.331055 66.666672 72.838669 66.666672 70.997719 c
+66.666672 69.156769 68.159058 67.664391 70.000008 67.664391 c
+h
+11.157934 72.620117 m
+11.711104 74.901367 14.955564 74.901367 15.508733 72.620117 c
+17.030817 66.343102 l
+17.228315 65.528625 17.864239 64.892700 18.678715 64.695206 c
+24.955729 63.173119 l
+27.236980 62.619949 27.236984 59.375492 24.955732 58.822323 c
+18.678715 57.300240 l
+17.864239 57.102737 17.228317 56.466816 17.030819 55.652340 c
+15.508733 49.375328 l
+14.955564 47.094074 11.711104 47.094070 11.157934 49.375320 c
+9.635852 55.652340 l
+9.438354 56.466816 8.802429 57.102737 7.987954 57.300236 c
+1.710940 58.822323 l
+-0.570312 59.375492 -0.570314 62.619949 1.710938 63.173119 c
+7.987954 64.695206 l
+8.802429 64.892700 9.438352 65.528625 9.635850 66.343102 c
+11.157934 72.620117 l
+h
+40.000004 70.997719 m
+40.000004 69.156769 38.507622 67.664391 36.666672 67.664391 c
+34.825722 67.664391 33.333336 69.156769 33.333336 70.997719 c
+33.333336 72.838669 34.825722 74.331055 36.666672 74.331055 c
+38.507622 74.331055 40.000004 72.838669 40.000004 70.997719 c
+h
+6.666667 34.331051 m
+8.507617 34.331051 10.000001 35.823433 10.000001 37.664383 c
+10.000001 39.505333 8.507617 40.997719 6.666667 40.997719 c
+4.825718 40.997719 3.333334 39.505333 3.333334 37.664383 c
+3.333334 35.823433 4.825718 34.331051 6.666667 34.331051 c
+h
+64.965050 19.714844 m
+64.550171 21.425781 62.116825 21.425781 61.701950 19.714844 c
+60.560383 15.007088 l
+60.412262 14.396229 59.935318 13.919285 59.324459 13.771164 c
+54.616695 12.629601 l
+52.905758 12.214722 52.905766 9.781372 54.616703 9.366493 c
+59.324459 8.224937 l
+59.935318 8.076813 60.412262 7.599869 60.560383 6.989014 c
+61.701950 2.281250 l
+62.116825 0.570312 64.550171 0.570312 64.965050 2.281258 c
+66.106613 6.989014 l
+66.254738 7.599869 66.731674 8.076813 67.342537 8.224937 c
+72.050301 9.366493 l
+73.761238 9.781372 73.761230 12.214722 72.050293 12.629601 c
+67.342537 13.771164 l
+66.731674 13.919285 66.254738 14.396229 66.106613 15.007088 c
+64.965050 19.714844 l
+h
+f*
+n
+Q
+
+endstream
+endobj
+
+3 0 obj
+  3325
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 80.000000 80.000000 ]
+     /Resources 1 0 R
+     /Contents 2 0 R
+     /Parent 5 0 R
+  >>
+endobj
+
+5 0 obj
+  << /Kids [ 4 0 R ]
+     /Count 1
+     /Type /Pages
+  >>
+endobj
+
+6 0 obj
+  << /Pages 5 0 R
+     /Type /Catalog
+  >>
+endobj
+
+xref
+0 7
+0000000000 65535 f
+0000000010 00000 n
+0000000132 00000 n
+0000003513 00000 n
+0000003536 00000 n
+0000003709 00000 n
+0000003783 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+3842
+%%EOF

+ 12 - 0
PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/ai_summary_Empty.imageset/Contents.json

@@ -0,0 +1,12 @@
+{
+  "images" : [
+    {
+      "filename" : "aiFileEmpty.pdf",
+      "idiom" : "universal"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

+ 147 - 0
PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/ai_summary_Empty.imageset/aiFileEmpty.pdf

@@ -0,0 +1,147 @@
+%PDF-1.7
+
+1 0 obj
+  << /ExtGState << /E2 << /ca 0.050000 >>
+                   /E1 << /ca 0.050000 >>
+                >> >>
+endobj
+
+2 0 obj
+  << /Length 3 0 R >>
+stream
+/DeviceRGB CS
+/DeviceRGB cs
+q
+/E1 gs
+1.000000 0.000000 -0.000000 1.000000 13.000000 16.000000 cm
+0.000000 0.000000 0.000000 scn
+0.000000 43.000000 m
+0.000000 44.656853 1.343146 46.000000 3.000000 46.000000 c
+51.000000 46.000000 l
+52.656857 46.000000 54.000000 44.656853 54.000000 43.000000 c
+54.000000 41.343147 52.656857 40.000000 51.000000 40.000000 c
+3.000000 40.000000 l
+1.343146 40.000000 0.000000 41.343147 0.000000 43.000000 c
+h
+0.000000 23.000000 m
+0.000000 24.656855 1.343146 26.000000 3.000000 26.000000 c
+51.000000 26.000000 l
+52.656857 26.000000 54.000000 24.656855 54.000000 23.000000 c
+54.000000 21.343145 52.656857 20.000000 51.000000 20.000000 c
+3.000000 20.000000 l
+1.343146 20.000000 0.000000 21.343145 0.000000 23.000000 c
+h
+3.000000 6.000000 m
+1.343146 6.000000 0.000000 4.656853 0.000000 3.000000 c
+0.000000 1.343147 1.343146 0.000000 3.000000 0.000000 c
+27.000000 0.000000 l
+28.656855 0.000000 30.000000 1.343147 30.000000 3.000000 c
+30.000000 4.656853 28.656855 6.000000 27.000000 6.000000 c
+3.000000 6.000000 l
+h
+f*
+n
+Q
+q
+/E2 gs
+1.000000 0.000000 -0.000000 1.000000 0.666504 3.657837 cm
+0.000000 0.000000 0.000000 scn
+6.694761 73.315598 m
+7.026663 74.684349 8.973338 74.684349 9.305241 73.315598 c
+10.218491 69.549393 l
+10.336989 69.060707 10.718544 68.679153 11.207230 68.560654 c
+14.973434 67.647408 l
+16.342186 67.315506 16.342192 65.368820 14.973441 65.036919 c
+11.207230 64.123672 l
+10.718544 64.005173 10.336989 63.623623 10.218491 63.134937 c
+9.305241 59.368732 l
+8.973338 57.999977 7.026663 57.999977 6.694761 59.368725 c
+5.781510 63.134937 l
+5.663011 63.623623 5.281456 64.005173 4.792771 64.123672 c
+1.026567 65.036919 l
+-0.342185 65.368820 -0.342191 67.315506 1.026561 67.647408 c
+4.792771 68.560654 l
+5.281456 68.679153 5.663012 69.060707 5.781510 69.549393 c
+6.694761 73.315598 l
+h
+75.333336 59.675495 m
+77.174286 59.675495 78.666664 61.167877 78.666664 63.008827 c
+78.666664 64.849777 77.174286 66.342163 75.333336 66.342163 c
+73.492386 66.342163 72.000000 64.849777 72.000000 63.008827 c
+72.000000 61.167877 73.492386 59.675495 75.333336 59.675495 c
+h
+66.965050 23.058960 m
+66.550171 24.769897 64.116821 24.769897 63.701946 23.058960 c
+62.560383 18.351204 l
+62.412262 17.740345 61.935318 17.263405 61.324459 17.115280 c
+56.616695 15.973717 l
+54.905758 15.558838 54.905766 13.125484 56.616703 12.710609 c
+61.324459 11.569054 l
+61.935318 11.420929 62.412258 10.943985 62.560383 10.333130 c
+63.701946 5.625366 l
+64.116821 3.914429 66.550171 3.914436 66.965050 5.625374 c
+68.106613 10.333130 l
+68.254730 10.943985 68.731674 11.420929 69.342529 11.569054 c
+74.050293 12.710609 l
+75.761238 13.125484 75.761230 15.558838 74.050293 15.973717 c
+69.342529 17.115280 l
+68.731674 17.263401 68.254730 17.740345 68.106613 18.351204 c
+66.965050 23.058960 l
+h
+52.333496 0.342163 m
+53.990349 0.342163 55.333496 1.685310 55.333496 3.342163 c
+55.333496 4.999016 53.990349 6.342163 52.333496 6.342163 c
+50.676643 6.342163 49.333496 4.999016 49.333496 3.342163 c
+49.333496 1.685310 50.676643 0.342163 52.333496 0.342163 c
+h
+f*
+n
+Q
+
+endstream
+endobj
+
+3 0 obj
+  3049
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 80.000000 80.000000 ]
+     /Resources 1 0 R
+     /Contents 2 0 R
+     /Parent 5 0 R
+  >>
+endobj
+
+5 0 obj
+  << /Kids [ 4 0 R ]
+     /Count 1
+     /Type /Pages
+  >>
+endobj
+
+6 0 obj
+  << /Pages 5 0 R
+     /Type /Catalog
+  >>
+endobj
+
+xref
+0 7
+0000000000 65535 f
+0000000010 00000 n
+0000000132 00000 n
+0000003237 00000 n
+0000003260 00000 n
+0000003433 00000 n
+0000003507 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+3566
+%%EOF

+ 12 - 0
PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/ai_translate_empty.imageset/Contents.json

@@ -0,0 +1,12 @@
+{
+  "images" : [
+    {
+      "filename" : "ai_translate_empty.pdf",
+      "idiom" : "universal"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

+ 181 - 0
PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/ai_translate_empty.imageset/ai_translate_empty.pdf

@@ -0,0 +1,181 @@
+%PDF-1.7
+
+1 0 obj
+  << /ExtGState << /E2 << /ca 0.050000 >>
+                   /E3 << /ca 0.050000 >>
+                   /E1 << /ca 0.050000 >>
+                >> >>
+endobj
+
+2 0 obj
+  << /Length 3 0 R >>
+stream
+/DeviceRGB CS
+/DeviceRGB cs
+q
+/E1 gs
+1.000000 0.000000 -0.000000 1.000000 11.600098 11.296387 cm
+0.000000 0.000000 0.000000 scn
+39.714333 32.667641 m
+38.003223 32.667641 36.624199 31.527031 35.820042 30.181990 c
+27.183718 12.850307 l
+27.181547 12.846016 l
+22.886438 4.478779 l
+21.965652 3.207138 22.648804 1.434525 24.327471 0.847950 c
+25.782217 0.000210 27.553278 0.576546 28.158352 2.067181 c
+31.591789 8.958546 l
+47.583237 8.958546 l
+51.023788 2.052898 l
+51.301014 1.496468 51.659798 1.054932 52.110538 0.753365 c
+52.563854 0.450077 53.087013 0.304001 53.664581 0.304001 c
+53.676727 0.304001 l
+53.921757 0.303989 54.136829 0.303982 54.387154 0.339870 c
+54.642323 0.376453 54.921276 0.448063 55.313324 0.579208 c
+55.340347 0.588249 l
+55.365822 0.601032 l
+55.991795 0.915134 56.431435 1.524929 56.645954 2.206665 c
+56.861549 2.891819 56.864708 3.687656 56.574242 4.416409 c
+52.247120 12.846016 l
+52.244949 12.850307 l
+43.623329 30.155107 l
+42.797752 31.812149 41.394508 32.667641 39.714333 32.667641 c
+h
+1.756684 14.050484 m
+0.259927 13.438553 -0.289630 11.662971 0.282068 10.228626 c
+0.295616 10.198353 l
+0.572843 9.641922 0.931626 9.200386 1.382367 8.898819 c
+1.835683 8.595531 2.358841 8.449455 2.936409 8.449455 c
+3.054990 8.449455 3.176915 8.477497 3.271540 8.502270 c
+3.337007 8.519409 3.412517 8.541588 3.485269 8.562958 c
+3.585646 8.592224 l
+3.803784 8.654770 4.011155 8.704002 4.204613 8.704002 c
+4.299341 8.704002 l
+4.384008 8.746487 l
+10.382406 11.756382 15.649686 15.749088 19.945257 20.485981 c
+20.661564 19.767120 l
+21.832451 18.592056 23.608339 18.592056 24.779228 19.767120 c
+25.949329 20.941395 25.949329 22.721157 24.779228 23.895432 c
+23.500700 25.178520 l
+27.931950 31.177814 31.392971 38.144928 32.939289 45.613094 c
+36.670643 45.613094 l
+37.522892 45.613094 38.263992 45.899975 38.792885 46.430756 c
+39.321651 46.961411 39.607052 47.704441 39.607052 48.558548 c
+39.607052 49.412659 39.321651 50.155689 38.792885 50.686340 c
+38.263992 51.217121 37.522892 51.504002 36.670643 51.504002 c
+22.866755 51.504002 l
+22.866755 54.158550 l
+22.866755 55.012657 22.581356 55.755688 22.052589 56.286343 c
+21.523695 56.817123 20.782597 57.104004 19.930347 57.104004 c
+19.078096 57.104004 18.336998 56.817123 17.808105 56.286343 c
+17.279337 55.755688 16.993937 55.012657 16.993937 54.158550 c
+16.993937 51.504002 l
+2.936409 51.504002 l
+2.084158 51.504002 1.343061 51.217121 0.814167 50.686340 c
+0.285399 50.155689 0.000000 49.412659 0.000000 48.558548 c
+0.000000 47.704441 0.285399 46.961411 0.814167 46.430756 c
+1.343060 45.899975 2.084158 45.613094 2.936409 45.613094 c
+26.771517 45.613094 l
+25.297319 39.929657 22.930746 34.696152 19.671556 29.910463 c
+17.830282 32.548332 16.419243 35.404182 15.228015 38.273010 c
+14.648781 39.721924 12.910520 40.622536 11.411184 40.020668 c
+9.964018 39.439735 9.067959 37.694656 9.666780 36.192268 c
+11.169999 32.420815 13.403247 28.660023 16.119734 24.911366 c
+12.137066 20.480339 7.191017 16.779465 1.756684 14.050484 c
+h
+44.641827 14.594910 m
+34.520393 14.594910 l
+39.468651 24.752441 l
+44.641827 14.594910 l
+h
+f*
+n
+Q
+q
+/E2 gs
+1.000000 0.000000 -0.000000 1.000000 56.000000 55.094727 cm
+0.000000 0.000000 0.000000 scn
+9.485178 22.250237 m
+10.169168 23.822163 12.591717 23.709885 13.027337 21.913399 c
+14.305887 16.640705 l
+14.471787 15.956547 15.005961 15.422371 15.690122 15.256473 c
+20.962809 13.977922 l
+22.879061 13.513259 22.879061 10.787912 20.962812 10.323249 c
+15.690122 9.044701 l
+15.005961 8.878801 14.471787 8.344626 14.305887 7.660466 c
+13.027337 2.387775 l
+12.562675 0.471523 9.837325 0.471523 9.372663 2.387774 c
+8.094115 7.660466 l
+8.083747 7.703227 8.071941 7.745399 8.058747 7.786935 c
+7.860858 8.409959 7.351279 8.889170 6.709881 9.044700 c
+1.437189 10.323249 l
+1.414820 10.328798 l
+-0.479033 10.809171 -0.471578 13.515074 1.437189 13.977922 c
+6.709881 15.256472 l
+7.394039 15.422371 7.928216 15.956547 8.094112 16.640705 c
+9.372663 21.913397 l
+9.401705 22.033161 9.439581 22.145443 9.485178 22.250237 c
+h
+f
+n
+Q
+q
+/E3 gs
+1.000000 0.000000 -0.000000 1.000000 56.000000 72.845215 cm
+0.000000 0.000000 0.000000 scn
+22.400000 -22.399902 m
+23.946396 -22.399902 25.200001 -21.146299 25.200001 -19.599901 c
+25.200001 -18.053503 23.946396 -16.799902 22.400000 -16.799902 c
+20.853603 -16.799902 19.600000 -18.053503 19.600000 -19.599901 c
+19.600000 -21.146299 20.853603 -22.399902 22.400000 -22.399902 c
+h
+f
+n
+Q
+
+endstream
+endobj
+
+3 0 obj
+  4371
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 81.199951 80.000000 ]
+     /Resources 1 0 R
+     /Contents 2 0 R
+     /Parent 5 0 R
+  >>
+endobj
+
+5 0 obj
+  << /Kids [ 4 0 R ]
+     /Count 1
+     /Type /Pages
+  >>
+endobj
+
+6 0 obj
+  << /Pages 5 0 R
+     /Type /Catalog
+  >>
+endobj
+
+xref
+0 7
+0000000000 65535 f
+0000000010 00000 n
+0000000174 00000 n
+0000004601 00000 n
+0000004624 00000 n
+0000004797 00000 n
+0000004871 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+4930
+%%EOF

+ 21 - 0
PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/creditEmptyIcon.imageset/Contents.json

@@ -0,0 +1,21 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal"
+    },
+    {
+      "appearances" : [
+        {
+          "appearance" : "luminosity",
+          "value" : "dark"
+        }
+      ],
+      "filename" : "creditEmptyIcon.pdf",
+      "idiom" : "universal"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

BIN
PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/creditEmptyIcon.imageset/creditEmptyIcon.pdf


+ 12 - 0
PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/ic_btn_arrow_down.imageset/Contents.json

@@ -0,0 +1,12 @@
+{
+  "images" : [
+    {
+      "filename" : "ic_btn_arrow_down.pdf",
+      "idiom" : "universal"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

+ 73 - 0
PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/ic_btn_arrow_down.imageset/ic_btn_arrow_down.pdf

@@ -0,0 +1,73 @@
+%PDF-1.7
+
+1 0 obj
+  << >>
+endobj
+
+2 0 obj
+  << /Length 3 0 R >>
+stream
+/DeviceRGB CS
+/DeviceRGB cs
+q
+1.000000 0.000000 -0.000000 1.000000 4.559570 5.293213 cm
+0.494118 0.498039 0.521569 scn
+6.500000 4.798096 m
+7.380231 3.982502 l
+3.690115 -0.000062 l
+0.000000 3.982502 l
+0.880231 4.798096 l
+3.690115 1.765949 l
+6.500000 4.798096 l
+h
+f*
+n
+Q
+
+endstream
+endobj
+
+3 0 obj
+  269
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 16.000000 16.000000 ]
+     /Resources 1 0 R
+     /Contents 2 0 R
+     /Parent 5 0 R
+  >>
+endobj
+
+5 0 obj
+  << /Kids [ 4 0 R ]
+     /Count 1
+     /Type /Pages
+  >>
+endobj
+
+6 0 obj
+  << /Pages 5 0 R
+     /Type /Catalog
+  >>
+endobj
+
+xref
+0 7
+0000000000 65535 f
+0000000010 00000 n
+0000000034 00000 n
+0000000359 00000 n
+0000000381 00000 n
+0000000554 00000 n
+0000000628 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+687
+%%EOF

+ 22 - 0
PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/ic_else_alert.imageset/Contents.json

@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "filename" : "ic_else_alert.pdf",
+      "idiom" : "universal"
+    },
+    {
+      "appearances" : [
+        {
+          "appearance" : "luminosity",
+          "value" : "dark"
+        }
+      ],
+      "filename" : "ic_else_alert 1.pdf",
+      "idiom" : "universal"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

+ 90 - 0
PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/ic_else_alert.imageset/ic_else_alert 1.pdf

@@ -0,0 +1,90 @@
+%PDF-1.7
+
+1 0 obj
+  << >>
+endobj
+
+2 0 obj
+  << /Length 3 0 R >>
+stream
+/DeviceRGB CS
+/DeviceRGB cs
+q
+1.000000 0.000000 -0.000000 1.000000 1.469727 2.332520 cm
+1.000000 1.000000 1.000000 scn
+11.059082 1.310547 m
+11.059082 0.580078 10.554199 0.000000 9.748535 0.000000 c
+1.310547 0.000000 l
+0.504883 0.000000 0.000000 0.580078 0.000000 1.310547 c
+0.000000 1.530762 0.064453 1.745605 0.177246 1.949707 c
+4.398926 9.501465 l
+4.640625 9.936523 5.086426 10.167480 5.532227 10.167480 c
+5.972656 10.167480 6.418457 9.936523 6.660156 9.501465 c
+10.887207 1.955078 l
+11.005371 1.750977 11.059082 1.530762 11.059082 1.310547 c
+h
+5.532227 3.587891 m
+5.252930 3.587891 5.102539 3.749023 5.097168 4.033691 c
+5.021973 6.955566 l
+5.016602 7.240234 5.226074 7.444336 5.526855 7.444336 c
+5.822266 7.444336 6.042480 7.234863 6.037109 6.950195 c
+5.961914 4.033691 l
+5.956543 3.743652 5.800781 3.587891 5.532227 3.587891 c
+h
+5.532227 1.788574 m
+5.215332 1.788574 4.936035 2.046387 4.936035 2.363281 c
+4.936035 2.685547 5.209961 2.943359 5.532227 2.943359 c
+5.859863 2.943359 6.133789 2.690918 6.133789 2.363281 c
+6.133789 2.041016 5.854492 1.788574 5.532227 1.788574 c
+h
+f*
+n
+Q
+
+endstream
+endobj
+
+3 0 obj
+  1086
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 14.000000 14.000000 ]
+     /Resources 1 0 R
+     /Contents 2 0 R
+     /Parent 5 0 R
+  >>
+endobj
+
+5 0 obj
+  << /Kids [ 4 0 R ]
+     /Count 1
+     /Type /Pages
+  >>
+endobj
+
+6 0 obj
+  << /Pages 5 0 R
+     /Type /Catalog
+  >>
+endobj
+
+xref
+0 7
+0000000000 65535 f
+0000000010 00000 n
+0000000034 00000 n
+0000001176 00000 n
+0000001199 00000 n
+0000001372 00000 n
+0000001446 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+1505
+%%EOF

+ 90 - 0
PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/ic_else_alert.imageset/ic_else_alert.pdf

@@ -0,0 +1,90 @@
+%PDF-1.7
+
+1 0 obj
+  << >>
+endobj
+
+2 0 obj
+  << /Length 3 0 R >>
+stream
+/DeviceRGB CS
+/DeviceRGB cs
+q
+1.000000 0.000000 -0.000000 1.000000 1.469727 2.332520 cm
+0.056471 0.065882 0.080000 scn
+11.059082 1.310547 m
+11.059082 0.580078 10.554199 0.000000 9.748535 0.000000 c
+1.310547 0.000000 l
+0.504883 0.000000 0.000000 0.580078 0.000000 1.310547 c
+0.000000 1.530762 0.064453 1.745605 0.177246 1.949707 c
+4.398926 9.501465 l
+4.640625 9.936523 5.086426 10.167480 5.532227 10.167480 c
+5.972656 10.167480 6.418457 9.936523 6.660156 9.501465 c
+10.887207 1.955078 l
+11.005371 1.750977 11.059082 1.530762 11.059082 1.310547 c
+h
+5.532227 3.587891 m
+5.252930 3.587891 5.102539 3.749023 5.097168 4.033691 c
+5.021973 6.955566 l
+5.016602 7.240234 5.226074 7.444336 5.526855 7.444336 c
+5.822266 7.444336 6.042480 7.234863 6.037109 6.950195 c
+5.961914 4.033691 l
+5.956543 3.743652 5.800781 3.587891 5.532227 3.587891 c
+h
+5.532227 1.788574 m
+5.215332 1.788574 4.936035 2.046387 4.936035 2.363281 c
+4.936035 2.685547 5.209961 2.943359 5.532227 2.943359 c
+5.859863 2.943359 6.133789 2.690918 6.133789 2.363281 c
+6.133789 2.041016 5.854492 1.788574 5.532227 1.788574 c
+h
+f*
+n
+Q
+
+endstream
+endobj
+
+3 0 obj
+  1086
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 14.000000 14.000000 ]
+     /Resources 1 0 R
+     /Contents 2 0 R
+     /Parent 5 0 R
+  >>
+endobj
+
+5 0 obj
+  << /Kids [ 4 0 R ]
+     /Count 1
+     /Type /Pages
+  >>
+endobj
+
+6 0 obj
+  << /Pages 5 0 R
+     /Type /Catalog
+  >>
+endobj
+
+xref
+0 7
+0000000000 65535 f
+0000000010 00000 n
+0000000034 00000 n
+0000001176 00000 n
+0000001199 00000 n
+0000001372 00000 n
+0000001446 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+1505
+%%EOF

+ 22 - 0
PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/ic_else_info_large.imageset/Contents.json

@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "filename" : "ic_else_info_large.pdf",
+      "idiom" : "universal"
+    },
+    {
+      "appearances" : [
+        {
+          "appearance" : "luminosity",
+          "value" : "dark"
+        }
+      ],
+      "filename" : "ic_else_info_large 1.pdf",
+      "idiom" : "universal"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

+ 93 - 0
PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/ic_else_info_large.imageset/ic_else_info_large 1.pdf

@@ -0,0 +1,93 @@
+%PDF-1.7
+
+1 0 obj
+  << >>
+endobj
+
+2 0 obj
+  << /Length 3 0 R >>
+stream
+/DeviceRGB CS
+/DeviceRGB cs
+q
+1.000000 0.000000 -0.000000 1.000000 0.000000 0.000000 cm
+1.000000 1.000000 1.000000 scn
+14.000000 7.000000 m
+14.000000 3.177451 10.829412 0.000000 7.000000 0.000000 c
+3.177451 0.000000 0.000000 3.177451 0.000000 7.000000 c
+0.000000 10.829412 3.170588 14.000000 6.993137 14.000000 c
+10.822549 14.000000 14.000000 10.829412 14.000000 7.000000 c
+h
+6.947363 9.249903 m
+6.471289 9.249903 6.090430 9.630762 6.090430 10.113184 c
+6.090430 10.595606 6.471289 10.976465 6.947363 10.976465 c
+7.423438 10.976465 7.797949 10.595606 7.797949 10.113184 c
+7.797949 9.630762 7.423438 9.249903 6.947363 9.249903 c
+h
+8.521582 3.321192 m
+5.861914 3.321192 l
+5.588965 3.321192 5.379492 3.517969 5.379492 3.790918 c
+5.379492 4.044825 5.588965 4.254297 5.861914 4.254297 c
+6.668067 4.254297 l
+6.668067 7.237695 l
+5.969824 7.237695 l
+5.703223 7.237695 5.493750 7.434473 5.493750 7.707422 c
+5.493750 7.961328 5.703223 8.170801 5.969824 8.170801 c
+7.201270 8.170801 l
+7.537695 8.170801 7.715430 7.929590 7.715430 7.574121 c
+7.715430 4.254297 l
+8.521582 4.254297 l
+8.794531 4.254297 9.004004 4.044825 9.004004 3.790918 c
+9.004004 3.517969 8.794531 3.321192 8.521582 3.321192 c
+h
+f*
+n
+Q
+
+endstream
+endobj
+
+3 0 obj
+  1190
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 14.000000 14.000000 ]
+     /Resources 1 0 R
+     /Contents 2 0 R
+     /Parent 5 0 R
+  >>
+endobj
+
+5 0 obj
+  << /Kids [ 4 0 R ]
+     /Count 1
+     /Type /Pages
+  >>
+endobj
+
+6 0 obj
+  << /Pages 5 0 R
+     /Type /Catalog
+  >>
+endobj
+
+xref
+0 7
+0000000000 65535 f
+0000000010 00000 n
+0000000034 00000 n
+0000001280 00000 n
+0000001303 00000 n
+0000001476 00000 n
+0000001550 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+1609
+%%EOF

+ 93 - 0
PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/ic_else_info_large.imageset/ic_else_info_large.pdf

@@ -0,0 +1,93 @@
+%PDF-1.7
+
+1 0 obj
+  << >>
+endobj
+
+2 0 obj
+  << /Length 3 0 R >>
+stream
+/DeviceRGB CS
+/DeviceRGB cs
+q
+1.000000 0.000000 -0.000000 1.000000 0.000000 0.000000 cm
+0.258000 0.273273 0.300000 scn
+14.000000 7.000000 m
+14.000000 3.177451 10.829412 0.000000 7.000000 0.000000 c
+3.177451 0.000000 0.000000 3.177451 0.000000 7.000000 c
+0.000000 10.829412 3.170588 14.000000 6.993137 14.000000 c
+10.822549 14.000000 14.000000 10.829412 14.000000 7.000000 c
+h
+6.947363 9.249903 m
+6.471289 9.249903 6.090430 9.630762 6.090430 10.113184 c
+6.090430 10.595606 6.471289 10.976465 6.947363 10.976465 c
+7.423438 10.976465 7.797949 10.595606 7.797949 10.113184 c
+7.797949 9.630762 7.423438 9.249903 6.947363 9.249903 c
+h
+8.521582 3.321192 m
+5.861914 3.321192 l
+5.588965 3.321192 5.379492 3.517969 5.379492 3.790918 c
+5.379492 4.044825 5.588965 4.254297 5.861914 4.254297 c
+6.668067 4.254297 l
+6.668067 7.237695 l
+5.969824 7.237695 l
+5.703223 7.237695 5.493750 7.434473 5.493750 7.707422 c
+5.493750 7.961328 5.703223 8.170801 5.969824 8.170801 c
+7.201270 8.170801 l
+7.537695 8.170801 7.715430 7.929590 7.715430 7.574121 c
+7.715430 4.254297 l
+8.521582 4.254297 l
+8.794531 4.254297 9.004004 4.044825 9.004004 3.790918 c
+9.004004 3.517969 8.794531 3.321192 8.521582 3.321192 c
+h
+f*
+n
+Q
+
+endstream
+endobj
+
+3 0 obj
+  1190
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 14.000000 14.000000 ]
+     /Resources 1 0 R
+     /Contents 2 0 R
+     /Parent 5 0 R
+  >>
+endobj
+
+5 0 obj
+  << /Kids [ 4 0 R ]
+     /Count 1
+     /Type /Pages
+  >>
+endobj
+
+6 0 obj
+  << /Pages 5 0 R
+     /Type /Catalog
+  >>
+endobj
+
+xref
+0 7
+0000000000 65535 f
+0000000010 00000 n
+0000000034 00000 n
+0000001280 00000 n
+0000001303 00000 n
+0000001476 00000 n
+0000001550 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+1609
+%%EOF

+ 12 - 0
PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/img_licensecode_successful.imageset/Contents.json

@@ -0,0 +1,12 @@
+{
+  "images" : [
+    {
+      "filename" : "img_licensecode_successful.pdf",
+      "idiom" : "universal"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

+ 86 - 0
PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/img_licensecode_successful.imageset/img_licensecode_successful.pdf

@@ -0,0 +1,86 @@
+%PDF-1.7
+
+1 0 obj
+  << >>
+endobj
+
+2 0 obj
+  << /Length 3 0 R >>
+stream
+/DeviceRGB CS
+/DeviceRGB cs
+q
+1.000000 0.000000 -0.000000 1.000000 2.909180 2.909180 cm
+0.235294 0.803922 0.458824 scn
+29.090910 58.181641 m
+13.024418 58.181641 0.000000 45.157223 0.000000 29.090731 c
+0.000000 13.024239 13.024418 -0.000179 29.090910 -0.000179 c
+45.157402 -0.000179 58.181820 13.024239 58.181820 29.090731 c
+58.181820 45.157223 45.157402 58.181641 29.090910 58.181641 c
+h
+14.886293 29.049498 m
+14.431865 29.503925 14.431864 30.240702 14.886292 30.695129 c
+18.177551 33.986389 l
+18.631979 34.440819 19.368753 34.440819 19.823183 33.986389 c
+26.576174 27.233400 l
+39.728943 40.386169 l
+40.183369 40.840599 40.920143 40.840599 41.374573 40.386169 c
+44.665833 37.094910 l
+45.120262 36.640480 45.120262 35.903709 44.665833 35.449280 c
+27.386717 18.170162 l
+26.932289 17.715733 26.195515 17.715733 25.741085 18.170162 c
+22.449825 21.461422 l
+22.401272 21.509975 22.357904 21.561752 22.319727 21.616062 c
+14.886293 29.049498 l
+h
+f*
+n
+Q
+
+endstream
+endobj
+
+3 0 obj
+  945
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 64.000000 64.000000 ]
+     /Resources 1 0 R
+     /Contents 2 0 R
+     /Parent 5 0 R
+  >>
+endobj
+
+5 0 obj
+  << /Kids [ 4 0 R ]
+     /Count 1
+     /Type /Pages
+  >>
+endobj
+
+6 0 obj
+  << /Pages 5 0 R
+     /Type /Catalog
+  >>
+endobj
+
+xref
+0 7
+0000000000 65535 f
+0000000010 00000 n
+0000000034 00000 n
+0000001035 00000 n
+0000001057 00000 n
+0000001230 00000 n
+0000001304 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+1363
+%%EOF

+ 12 - 0
PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/pop-btn.imageset/Contents.json

@@ -0,0 +1,12 @@
+{
+  "images" : [
+    {
+      "filename" : "pop-btn.pdf",
+      "idiom" : "universal"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

BIN
PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/pop-btn.imageset/pop-btn.pdf


+ 12 - 0
PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/pop-btn_hover.imageset/Contents.json

@@ -0,0 +1,12 @@
+{
+  "images" : [
+    {
+      "filename" : "pop-btn_hover.pdf",
+      "idiom" : "universal"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

BIN
PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/pop-btn_hover.imageset/pop-btn_hover.pdf


+ 22 - 0
PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/robot-gray.imageset/Contents.json

@@ -0,0 +1,22 @@
+{
+  "images" : [
+    {
+      "filename" : "robot-gray.pdf",
+      "idiom" : "universal"
+    },
+    {
+      "appearances" : [
+        {
+          "appearance" : "luminosity",
+          "value" : "dark"
+        }
+      ],
+      "filename" : "robot-gray 1.pdf",
+      "idiom" : "universal"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

+ 187 - 0
PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/robot-gray.imageset/robot-gray 1.pdf

@@ -0,0 +1,187 @@
+%PDF-1.7
+
+1 0 obj
+  << /ExtGState << /E2 << /ca 0.050000 >>
+                   /E1 << /ca 0.044000 >>
+                >> >>
+endobj
+
+2 0 obj
+  << /Length 3 0 R >>
+stream
+/DeviceRGB CS
+/DeviceRGB cs
+q
+/E1 gs
+1.000000 0.000000 -0.000000 1.000000 10.000000 11.838257 cm
+1.000000 1.000000 1.000000 scn
+3.198828 46.569649 m
+3.398271 45.670017 4.002666 44.785404 5.197785 43.077850 c
+2.874804 40.150791 1.221158 36.664711 0.461154 32.843914 c
+0.000000 30.525539 0.000000 27.737608 0.000000 22.161743 c
+0.000000 15.018887 l
+0.000000 10.116192 0.000000 7.664841 0.874325 5.758919 c
+1.832560 3.670082 3.508339 1.994305 5.597176 1.036068 c
+7.503099 0.161743 9.954447 0.161743 14.857141 0.161743 c
+45.142857 0.161743 l
+50.045551 0.161743 52.496899 0.161743 54.402824 1.036068 c
+56.491661 1.994305 58.167439 3.670082 59.125675 5.758919 c
+60.000000 7.664841 60.000000 10.116192 60.000000 15.018887 c
+60.000000 22.161743 l
+60.000000 27.737608 60.000000 30.525539 59.538845 32.843914 c
+58.808010 36.518066 57.250816 39.882702 55.066719 42.738365 c
+55.172497 42.889431 l
+56.455311 44.721478 57.096718 45.637501 57.303371 46.569649 c
+57.578907 47.812511 57.349430 49.113926 56.665428 50.187599 c
+56.152424 50.992851 55.236401 51.634258 53.404350 52.917072 c
+51.572304 54.199886 50.656277 54.841293 49.724133 55.047947 c
+48.481266 55.323483 47.179852 55.094009 46.106182 54.410004 c
+45.300930 53.897003 44.659523 52.980976 43.376709 51.148930 c
+43.291897 51.027805 l
+42.441990 51.298557 41.571140 51.523762 40.682171 51.700588 c
+38.363796 52.161743 35.575863 52.161743 30.000000 52.161743 c
+24.424135 52.161743 21.636204 52.161743 19.317829 51.700588 c
+18.572269 51.552288 17.839453 51.369957 17.121048 51.155270 c
+15.841194 52.983093 15.200339 53.897594 14.396017 54.410004 c
+13.322346 55.094009 12.020930 55.323483 10.778066 55.047947 c
+9.845922 54.841293 8.929899 54.199890 7.097856 52.917080 c
+7.097850 52.917076 l
+7.097846 52.917072 l
+7.097842 52.917068 l
+5.265795 51.634254 4.349771 50.992851 3.836770 50.187599 c
+3.152766 49.113926 2.923291 47.812511 3.198828 46.569649 c
+h
+10.441752 38.500935 m
+9.308377 36.186359 9.212001 33.198677 9.019247 27.223322 c
+8.814944 20.889919 8.712792 17.723217 9.781059 15.255836 c
+10.940097 12.578804 13.034607 10.415642 15.672879 9.170895 c
+18.104532 8.023632 21.272886 8.023632 27.609594 8.023632 c
+32.390228 8.023632 l
+38.726925 8.023632 41.895275 8.023632 44.326927 9.170895 c
+46.965199 10.415642 49.059708 12.578804 50.218746 15.255836 c
+51.287014 17.723217 51.184864 20.889915 50.980560 27.223320 c
+50.787807 33.198677 50.691429 36.186359 49.558052 38.500935 c
+48.327835 41.013283 46.258549 43.016895 43.707844 44.165474 c
+41.357929 45.223633 38.368698 45.223633 32.390232 45.223633 c
+27.609583 45.223633 l
+21.631111 45.223633 18.641876 45.223633 16.291962 44.165474 c
+13.741258 43.016895 11.671969 41.013283 10.441752 38.500935 c
+h
+20.680481 27.506844 m
+20.803808 27.728050 20.953878 27.936029 21.129255 28.125437 c
+21.440115 28.461969 21.813635 28.721777 22.220806 28.897083 c
+22.626783 29.072870 23.053598 29.158836 23.476444 29.161629 c
+23.927456 29.165426 24.384068 29.074736 24.816111 28.881475 c
+25.194584 28.713125 25.542959 28.471243 25.837591 28.162169 c
+26.028542 27.962339 26.190685 27.740896 26.322279 27.504370 c
+30.568050 20.150551 l
+31.460047 18.605579 30.930702 16.630039 29.385725 15.738052 c
+27.840746 14.846069 25.865187 15.375420 24.973188 16.920387 c
+23.500666 19.470848 l
+22.028168 16.920433 l
+21.136169 15.375462 19.160610 14.846111 17.615633 15.738098 c
+16.070654 16.630081 15.541309 18.605625 16.433308 20.150597 c
+20.680481 27.506844 l
+h
+38.230194 29.160278 m
+36.446209 29.160278 35.000000 27.714071 35.000000 25.930084 c
+35.000000 18.393101 l
+35.000000 16.609112 36.446209 15.162907 38.230194 15.162907 c
+40.014183 15.162907 41.460388 16.609112 41.460388 18.393101 c
+41.460388 25.930084 l
+41.460388 27.714071 40.014183 29.160278 38.230194 29.160278 c
+h
+f*
+n
+Q
+q
+/E2 gs
+1.000000 0.000000 -0.000000 1.000000 0.000000 -0.008881 cm
+1.000000 1.000000 1.000000 scn
+70.694763 78.982315 m
+71.026665 80.351067 72.973335 80.351067 73.305244 78.982315 c
+74.218491 75.216110 l
+74.336990 74.727425 74.718544 74.345871 75.207230 74.227371 c
+78.973434 73.314117 l
+80.342186 72.982216 80.342194 71.035545 78.973442 70.703644 c
+75.207230 69.790390 l
+74.718544 69.671890 74.336990 69.290337 74.218491 68.801651 c
+73.305244 65.035446 l
+72.973335 63.666695 71.026665 63.666691 70.694763 65.035439 c
+69.781509 68.801651 l
+69.663010 69.290337 69.281456 69.671890 68.792770 69.790390 c
+65.026566 70.703644 l
+63.657814 71.035545 63.657814 72.982216 65.026558 73.314117 c
+68.792770 74.227371 l
+69.281456 74.345871 69.663010 74.727425 69.781509 75.216110 c
+70.694763 78.982315 l
+h
+0.000000 13.675545 m
+0.000000 11.834595 1.492385 10.342216 3.333334 10.342216 c
+5.174283 10.342216 6.666667 11.834595 6.666667 13.675545 c
+6.666667 15.516495 5.174283 17.008881 3.333334 17.008881 c
+1.492385 17.008881 0.000000 15.516495 0.000000 13.675545 c
+h
+13.333334 3.675545 m
+13.333334 1.834595 14.825719 0.342209 16.666668 0.342209 c
+18.507618 0.342209 20.000002 1.834595 20.000002 3.675545 c
+20.000002 5.516495 18.507618 7.008881 16.666668 7.008881 c
+14.825719 7.008881 13.333334 5.516495 13.333334 3.675545 c
+h
+76.666664 55.342213 m
+74.825714 55.342213 73.333336 56.834599 73.333336 58.675545 c
+73.333336 60.516495 74.825714 62.008881 76.666664 62.008881 c
+78.507614 62.008881 80.000000 60.516495 80.000000 58.675545 c
+80.000000 56.834599 78.507614 55.342213 76.666664 55.342213 c
+h
+f*
+n
+Q
+
+endstream
+endobj
+
+3 0 obj
+  5338
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 80.000000 80.000000 ]
+     /Resources 1 0 R
+     /Contents 2 0 R
+     /Parent 5 0 R
+  >>
+endobj
+
+5 0 obj
+  << /Kids [ 4 0 R ]
+     /Count 1
+     /Type /Pages
+  >>
+endobj
+
+6 0 obj
+  << /Pages 5 0 R
+     /Type /Catalog
+  >>
+endobj
+
+xref
+0 7
+0000000000 65535 f
+0000000010 00000 n
+0000000132 00000 n
+0000005526 00000 n
+0000005549 00000 n
+0000005722 00000 n
+0000005796 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+5855
+%%EOF

+ 187 - 0
PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/robot-gray.imageset/robot-gray.pdf

@@ -0,0 +1,187 @@
+%PDF-1.7
+
+1 0 obj
+  << /ExtGState << /E2 << /ca 0.050000 >>
+                   /E1 << /ca 0.044000 >>
+                >> >>
+endobj
+
+2 0 obj
+  << /Length 3 0 R >>
+stream
+/DeviceRGB CS
+/DeviceRGB cs
+q
+/E1 gs
+1.000000 0.000000 -0.000000 1.000000 10.000000 11.838257 cm
+0.000000 0.000000 0.000000 scn
+3.198828 46.569649 m
+3.398271 45.670017 4.002666 44.785404 5.197785 43.077850 c
+2.874804 40.150791 1.221158 36.664711 0.461154 32.843914 c
+0.000000 30.525539 0.000000 27.737608 0.000000 22.161743 c
+0.000000 15.018887 l
+0.000000 10.116192 0.000000 7.664841 0.874325 5.758919 c
+1.832560 3.670082 3.508339 1.994305 5.597176 1.036068 c
+7.503099 0.161743 9.954447 0.161743 14.857141 0.161743 c
+45.142857 0.161743 l
+50.045551 0.161743 52.496899 0.161743 54.402824 1.036068 c
+56.491661 1.994305 58.167439 3.670082 59.125675 5.758919 c
+60.000000 7.664841 60.000000 10.116192 60.000000 15.018887 c
+60.000000 22.161743 l
+60.000000 27.737608 60.000000 30.525539 59.538845 32.843914 c
+58.808010 36.518066 57.250816 39.882702 55.066719 42.738365 c
+55.172497 42.889431 l
+56.455311 44.721478 57.096718 45.637501 57.303371 46.569649 c
+57.578907 47.812511 57.349430 49.113926 56.665428 50.187599 c
+56.152424 50.992851 55.236401 51.634258 53.404350 52.917072 c
+51.572304 54.199886 50.656277 54.841293 49.724133 55.047947 c
+48.481266 55.323483 47.179852 55.094009 46.106182 54.410004 c
+45.300930 53.897003 44.659523 52.980976 43.376709 51.148930 c
+43.291897 51.027805 l
+42.441990 51.298557 41.571140 51.523762 40.682171 51.700588 c
+38.363796 52.161743 35.575863 52.161743 30.000000 52.161743 c
+24.424135 52.161743 21.636204 52.161743 19.317829 51.700588 c
+18.572269 51.552288 17.839453 51.369957 17.121048 51.155270 c
+15.841194 52.983093 15.200339 53.897594 14.396017 54.410004 c
+13.322346 55.094009 12.020930 55.323483 10.778066 55.047947 c
+9.845922 54.841293 8.929899 54.199890 7.097856 52.917080 c
+7.097850 52.917076 l
+7.097846 52.917072 l
+7.097842 52.917068 l
+5.265795 51.634254 4.349771 50.992851 3.836770 50.187599 c
+3.152766 49.113926 2.923291 47.812511 3.198828 46.569649 c
+h
+10.441752 38.500935 m
+9.308377 36.186359 9.212001 33.198677 9.019247 27.223322 c
+8.814944 20.889919 8.712792 17.723217 9.781059 15.255836 c
+10.940097 12.578804 13.034607 10.415642 15.672879 9.170895 c
+18.104532 8.023632 21.272886 8.023632 27.609594 8.023632 c
+32.390228 8.023632 l
+38.726925 8.023632 41.895275 8.023632 44.326927 9.170895 c
+46.965199 10.415642 49.059708 12.578804 50.218746 15.255836 c
+51.287014 17.723217 51.184864 20.889915 50.980560 27.223320 c
+50.787807 33.198677 50.691429 36.186359 49.558052 38.500935 c
+48.327835 41.013283 46.258549 43.016895 43.707844 44.165474 c
+41.357929 45.223633 38.368698 45.223633 32.390232 45.223633 c
+27.609583 45.223633 l
+21.631111 45.223633 18.641876 45.223633 16.291962 44.165474 c
+13.741258 43.016895 11.671969 41.013283 10.441752 38.500935 c
+h
+20.680481 27.506844 m
+20.803808 27.728050 20.953878 27.936029 21.129255 28.125437 c
+21.440115 28.461969 21.813635 28.721777 22.220806 28.897083 c
+22.626783 29.072870 23.053598 29.158836 23.476444 29.161629 c
+23.927456 29.165426 24.384068 29.074736 24.816111 28.881475 c
+25.194584 28.713125 25.542959 28.471243 25.837591 28.162169 c
+26.028542 27.962339 26.190685 27.740896 26.322279 27.504370 c
+30.568050 20.150551 l
+31.460047 18.605579 30.930702 16.630039 29.385725 15.738052 c
+27.840746 14.846069 25.865187 15.375420 24.973188 16.920387 c
+23.500666 19.470848 l
+22.028168 16.920433 l
+21.136169 15.375462 19.160610 14.846111 17.615633 15.738098 c
+16.070654 16.630081 15.541309 18.605625 16.433308 20.150597 c
+20.680481 27.506844 l
+h
+38.230194 29.160278 m
+36.446209 29.160278 35.000000 27.714071 35.000000 25.930084 c
+35.000000 18.393101 l
+35.000000 16.609112 36.446209 15.162907 38.230194 15.162907 c
+40.014183 15.162907 41.460388 16.609112 41.460388 18.393101 c
+41.460388 25.930084 l
+41.460388 27.714071 40.014183 29.160278 38.230194 29.160278 c
+h
+f*
+n
+Q
+q
+/E2 gs
+1.000000 0.000000 -0.000000 1.000000 0.000000 -0.008911 cm
+0.000000 0.000000 0.000000 scn
+70.694763 78.982346 m
+71.026665 80.351097 72.973335 80.351097 73.305244 78.982346 c
+74.218491 75.216141 l
+74.336990 74.727455 74.718544 74.345901 75.207230 74.227402 c
+78.973434 73.314148 l
+80.342186 72.982246 80.342194 71.035576 78.973442 70.703674 c
+75.207230 69.790421 l
+74.718544 69.671921 74.336990 69.290367 74.218491 68.801682 c
+73.305244 65.035477 l
+72.973335 63.666725 71.026665 63.666721 70.694763 65.035469 c
+69.781509 68.801682 l
+69.663010 69.290367 69.281456 69.671921 68.792770 69.790421 c
+65.026566 70.703674 l
+63.657814 71.035576 63.657814 72.982246 65.026558 73.314148 c
+68.792770 74.227402 l
+69.281456 74.345901 69.663010 74.727455 69.781509 75.216141 c
+70.694763 78.982346 l
+h
+0.000000 13.675575 m
+0.000000 11.834625 1.492385 10.342247 3.333334 10.342247 c
+5.174283 10.342247 6.666667 11.834625 6.666667 13.675575 c
+6.666667 15.516525 5.174283 17.008911 3.333334 17.008911 c
+1.492385 17.008911 0.000000 15.516525 0.000000 13.675575 c
+h
+13.333334 3.675575 m
+13.333334 1.834625 14.825719 0.342239 16.666668 0.342239 c
+18.507618 0.342239 20.000002 1.834625 20.000002 3.675575 c
+20.000002 5.516525 18.507618 7.008911 16.666668 7.008911 c
+14.825719 7.008911 13.333334 5.516525 13.333334 3.675575 c
+h
+76.666664 55.342243 m
+74.825714 55.342243 73.333336 56.834629 73.333336 58.675575 c
+73.333336 60.516525 74.825714 62.008911 76.666664 62.008911 c
+78.507614 62.008911 80.000000 60.516525 80.000000 58.675575 c
+80.000000 56.834629 78.507614 55.342243 76.666664 55.342243 c
+h
+f*
+n
+Q
+
+endstream
+endobj
+
+3 0 obj
+  5338
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 80.000000 80.000000 ]
+     /Resources 1 0 R
+     /Contents 2 0 R
+     /Parent 5 0 R
+  >>
+endobj
+
+5 0 obj
+  << /Kids [ 4 0 R ]
+     /Count 1
+     /Type /Pages
+  >>
+endobj
+
+6 0 obj
+  << /Pages 5 0 R
+     /Type /Catalog
+  >>
+endobj
+
+xref
+0 7
+0000000000 65535 f
+0000000010 00000 n
+0000000132 00000 n
+0000005526 00000 n
+0000005549 00000 n
+0000005722 00000 n
+0000005796 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+5855
+%%EOF

+ 12 - 0
PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/vipAbleIcon.imageset/Contents.json

@@ -0,0 +1,12 @@
+{
+  "images" : [
+    {
+      "filename" : "vipAbleIcon.pdf",
+      "idiom" : "universal"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

+ 81 - 0
PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/vipAbleIcon.imageset/vipAbleIcon.pdf

@@ -0,0 +1,81 @@
+%PDF-1.7
+
+1 0 obj
+  << >>
+endobj
+
+2 0 obj
+  << /Length 3 0 R >>
+stream
+/DeviceRGB CS
+/DeviceRGB cs
+q
+1.000000 0.000000 -0.000000 1.000000 2.500000 2.500000 cm
+0.711765 0.423529 1.000000 scn
+7.500000 0.000000 m
+11.642136 0.000000 15.000000 3.357864 15.000000 7.500000 c
+15.000000 11.642136 11.642136 15.000000 7.500000 15.000000 c
+3.357864 15.000000 0.000000 11.642136 0.000000 7.500000 c
+0.000000 3.357864 3.357864 0.000000 7.500000 0.000000 c
+h
+7.242832 4.519862 m
+11.409499 9.519861 l
+10.257167 10.480139 l
+6.616268 6.111059 l
+4.696997 8.030331 l
+3.636337 6.969670 l
+6.136336 4.469670 l
+6.717065 3.888942 l
+7.242832 4.519862 l
+h
+f*
+n
+Q
+
+endstream
+endobj
+
+3 0 obj
+  567
+endobj
+
+4 0 obj
+  << /Annots []
+     /Type /Page
+     /MediaBox [ 0.000000 0.000000 20.000000 20.000000 ]
+     /Resources 1 0 R
+     /Contents 2 0 R
+     /Parent 5 0 R
+  >>
+endobj
+
+5 0 obj
+  << /Kids [ 4 0 R ]
+     /Count 1
+     /Type /Pages
+  >>
+endobj
+
+6 0 obj
+  << /Pages 5 0 R
+     /Type /Catalog
+  >>
+endobj
+
+xref
+0 7
+0000000000 65535 f
+0000000010 00000 n
+0000000034 00000 n
+0000000657 00000 n
+0000000679 00000 n
+0000000852 00000 n
+0000000926 00000 n
+trailer
+<< /ID [ (some) (id) ]
+   /Root 6 0 R
+   /Size 7
+>>
+startxref
+985
+%%EOF

BIN
PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/whatNew_AIGuide.imageset/AIGuide.png


+ 12 - 0
PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/whatNew_AIGuide.imageset/Contents.json

@@ -0,0 +1,12 @@
+{
+  "images" : [
+    {
+      "filename" : "AIGuide.png",
+      "idiom" : "universal"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

+ 29 - 0
PDF Office/PDF Master/Class/AIInfo/AIInfoConfig.swift

@@ -0,0 +1,29 @@
+//
+//  AIInfoConfig.swift
+//  PDF Reader Pro Edition
+//
+//  Created by Niehaoyu on 2024/1/17.
+//
+
+import Foundation
+
+@objc public enum AIConfigType: NSInteger {
+    case none = 0
+    case summarize = 1
+    case reWriting = 2
+    case proofreading = 3
+    case translate = 4
+}
+
+class AIInfoConfig: NSObject {
+    var aiActionURL: String {
+        get {
+//            #if DEBUG
+            return kVerificationServer
+//            #else
+//            //正式服务器
+//            return "https://store.pdfreaderpro.com"
+//            #endif
+        }
+    }
+}

+ 307 - 0
PDF Office/PDF Master/Class/AIInfo/AIPurchaseWindowController/AIPurchaseWindowController.swift

@@ -0,0 +1,307 @@
+//
+//  AIPurchaseWindowController.swift
+//  PDF Reader Pro Edition
+//
+//  Created by Niehaoyu on 2024/1/18.
+//
+
+import Cocoa
+
+class AIPurchaseWindowController: NSWindowController, NSWindowDelegate {
+
+    @IBOutlet weak var contendBox: NSBox!
+    @IBOutlet weak var tipImage: NSImageView!
+    @IBOutlet weak var titleLabel: NSTextField!
+    @IBOutlet weak var subTitleLabel: NSTextField!
+    @IBOutlet weak var purchaseBox: NSBox!
+    @IBOutlet weak var purchaseButton: KMButton!
+    @IBOutlet weak var priceLabel: NSTextField!
+    @IBOutlet weak var priceDesLabel: NSTextField!
+    @IBOutlet weak var restoreButton: HyperLinkButton!
+    @IBOutlet weak var privacyButton: HyperLinkButton!
+    @IBOutlet weak var termOfButton: HyperLinkButton!
+    
+    static var currentWindowController: AIPurchaseWindowController!
+    
+    @objc static func currentWC() -> AIPurchaseWindowController {
+        if currentWindowController != nil {
+            return currentWindowController
+        } else {
+            let guideInfoWC: AIPurchaseWindowController = AIPurchaseWindowController.init(windowNibName: "AIPurchaseWindowController")
+            currentWindowController = guideInfoWC;
+            return guideInfoWC
+        }
+    }
+    
+    override func showWindow(_ sender: Any?) {
+        super.showWindow(sender)
+        if let window = self.window {
+            window.center()
+            self.reloadData()
+        }
+    }
+    
+    deinit {
+        NotificationCenter.default.removeObserver(self)
+    }
+    
+    override func windowDidLoad() {
+        super.windowDidLoad()
+
+        // Implement this method to handle any initialization after your window controller's window has been loaded from its nib file.
+        
+        
+        self.titleLabel.font = NSFont.UbuntuBoldFontWithSize(20)
+        self.subTitleLabel.font = NSFont.SFProTextRegularFont(14)
+        self.priceLabel.font = NSFont.UbuntuBoldFontWithSize(20)
+        self.priceDesLabel.font = NSFont.SFProTextSemiboldFont(13)
+        self.restoreButton.font = NSFont.SFProTextRegularFont(14)
+        self.privacyButton.font = NSFont.SFProTextRegularFont(14)
+        self.termOfButton.font = NSFont.SFProTextRegularFont(14)
+        
+        self.titleLabel.stringValue = NSLocalizedString("Purchase AI Tools", comment: "")
+        self.subTitleLabel.stringValue = NSLocalizedString("Level up your PDF workflow with AI assistant. Unlock advanced features like AI Summarize, AI Translate, AI Rewrite, AI Proofread. ", comment: "")
+        self.priceDesLabel.stringValue = NSLocalizedString("Purchase for 50 credits within 30 days", comment: "")
+        self.restoreButton.title = NSLocalizedString("Restore", comment: "")
+        self.privacyButton.title = NSLocalizedString("Privacy Policy", comment: "")
+        self.termOfButton.title = NSLocalizedString("Terms of Service", comment: "")
+        
+        self.purchaseBox.wantsLayer = true
+        self.purchaseBox.layer?.cornerRadius = CGRectGetHeight(self.purchaseBox.frame)/2
+        self.purchaseBox.layer?.masksToBounds = true
+        
+        self.purchaseButton.wantsLayer = true
+        self.purchaseButton.mouseMoveCallback = {[unowned self] mouseEntered in
+            if self.purchaseButton.isEnabled == false {
+                return
+            }
+            if mouseEntered {
+                self.purchaseButton.layer?.backgroundColor = NSColor.white.withAlphaComponent(0.2).cgColor
+            } else {
+                self.purchaseButton.layer?.backgroundColor = NSColor.clear.cgColor
+            }
+        }
+        
+        self.restoreButton.mouseMoveCallback = {[unowned self] mouseEntered in
+            if mouseEntered {
+                if KMAppearance.isDarkMode() {
+                    self.restoreButton.setTitleColor(NSColor(red: 1, green: 1, blue: 1, alpha: 0.7))
+                } else {
+                    self.restoreButton.setTitleColor(NSColor(red: 0, green: 0, blue: 0, alpha: 0.7))
+                }
+            } else {
+                self.restoreButton.setTitleColor(KMAppearance.KMColor_Layout_H2())
+            }
+        }
+        self.privacyButton.mouseMoveCallback = {[weak self] mouseEntered in
+            if mouseEntered {
+                if KMAppearance.isDarkMode() {
+                    self?.privacyButton.setTitleColor(NSColor(red: 1, green: 1, blue: 1, alpha: 0.7))
+                } else {
+                    self?.privacyButton.setTitleColor(NSColor(red: 0, green: 0, blue: 0, alpha: 0.7))
+                }
+            } else {
+                self?.privacyButton.setTitleColor(KMAppearance.KMColor_Layout_H2())
+            }
+        }
+        self.termOfButton.mouseMoveCallback = {[weak self] mouseEntered in
+            if mouseEntered {
+                if KMAppearance.isDarkMode() {
+                    self?.termOfButton.setTitleColor(NSColor(red: 1, green: 1, blue: 1, alpha: 0.7))
+                } else {
+                    self?.termOfButton.setTitleColor(NSColor(red: 0, green: 0, blue: 0, alpha: 0.7))
+                }
+            } else {
+                self?.termOfButton.setTitleColor(KMAppearance.KMColor_Layout_H2())
+            }
+        }
+        
+        self.refreshUI()
+        
+        self.addNotiObserver()
+    }
+    
+    func addNotiObserver() -> Void {
+        NotificationCenter.default.addObserver(self, selector: #selector(IAPProductLoadedNotification), name: NSNotification.Name(rawValue: NSNotification.Name.KMIAPProductLoaded.rawValue), object: nil)
+        NotificationCenter.default.addObserver(self, selector: #selector(IAPSubscriptionLoadedNotification), name: NSNotification.Name(rawValue: NSNotification.Name.KMIAPSubscriptionLoaded.rawValue), object: nil)
+        NotificationCenter.default.addObserver(self, selector: #selector(IAPProductPurchasedNotification), name: NSNotification.Name(rawValue: NSNotification.Name.KMIAPProductPurchased.rawValue), object: nil)
+        NotificationCenter.default.addObserver(self, selector: #selector(IAPProductFailedNotification), name: NSNotification.Name(rawValue: NSNotification.Name.KMIAPProductFailed.rawValue), object: nil)
+        NotificationCenter.default.addObserver(self, selector: #selector(IAPProductRestoreFinishedNotification), name: NSNotification.Name(rawValue: NSNotification.Name.KMIAPProductRestoreFinished.rawValue), object: nil)
+        NotificationCenter.default.addObserver(self, selector: #selector(IAPProductRestoreFailedNotification), name: NSNotification.Name(rawValue: NSNotification.Name.KMIAPProductRestoreFailed.rawValue), object: nil)
+        NotificationCenter.default.addObserver(self, selector: #selector(AIDeviceStatusChangeNotification), name: NSNotification.Name(rawValue: "kDeviceAIStatusChangeNotification"), object: nil)
+        
+    }
+    
+    func refreshUI() -> Void {
+        if KMAppearance.isDarkMode() {
+            self.contendBox.fillColor = NSColor(red: 24/255, green: 22/255, blue: 31/255, alpha: 1)
+        } else {
+            self.contendBox.fillColor = NSColor(red: 247/255, green: 245/255, blue: 1, alpha: 1)
+        }
+    }
+    
+    func reloadData() -> Void {
+        self.purchaseButton.isEnabled = true
+#if VERSION_FREE
+        let priceLabel = IAPProductsManager.default().liteAIProduct.price()
+#else
+        let priceLabel = IAPProductsManager.default().proAIProduct.price()
+#endif
+        
+        let aiInfoValid = AIInfoManager.default().aiInfoValid
+        if  aiInfoValid {
+            self.purchaseButton.isEnabled = false
+            self.purchaseButton.layer?.backgroundColor = NSColor.white.withAlphaComponent(0.2).cgColor
+        } else {
+            self.purchaseButton.isEnabled = true
+            self.purchaseButton.layer?.backgroundColor = NSColor.clear.cgColor
+        }
+        self.priceLabel.stringValue = priceLabel!
+    }
+    
+    func appStoreRestoreFinish() -> Void {
+        var didPurchased: Bool = false
+#if VERSION_FREE
+        didPurchased = IAPProductsManager.default().liteAIProduct.isSubscribed
+#else
+        didPurchased = IAPProductsManager.default().proAIProduct.isSubscribed
+#endif
+        if didPurchased {
+            AIInfoManager.default().restoreAI(withInfo: ["receipt_str":IAPProductsManager.default().temptransactioReceipt as Any]) { dict, error in
+                if AIInfoManager.default().aiInfo.infoDict.keys.count > 0 {
+                    let alert = NSAlert.init()
+                    alert.messageText = NSLocalizedString("Restore successfully", comment: "")
+                    alert.addButton(withTitle: NSLocalizedString("OK", comment: ""))
+                    alert.runModal()
+                }
+                self.removeWaitingView((self.window?.contentView)!)
+            }
+        }
+        
+    }
+    
+    func addWaingView(_ view: NSView) -> Void {
+        self.removeWaitingView(view)
+        
+        let wView = WaitingView.init(frame: view.bounds)
+        wView.autoresizingMask = [.width, .height]
+        view.addSubview(wView)
+        wView.startAnimation()
+    }
+    
+    func removeWaitingView(_ view: NSView) -> Void {
+        for view in view.subviews {
+            if view.className == WaitingView.className() {
+                view.removeFromSuperview()
+                break
+            }
+        }
+    }
+    
+    //MARK: - IBAction
+    @IBAction func purchaseAction(_ sender: KMButton) {
+#if VERSION_FREE
+        IAPProductsManager.default().make(IAPProductsManager.default().liteAIProduct)
+#else
+        IAPProductsManager.default().make(IAPProductsManager.default().proAIProduct)
+#endif
+        self.addWaingView((self.window?.contentView)!)
+//        FMTrackEventManager.default().trackOnceEvent("PUW", withProperties: ["PUW_Btn":"PUW_Btn_BuyAITools"])
+    }
+    
+    @IBAction func restoreAction(_ sender: Any) {
+        IAPProductsManager.default().restoreSubscriptions()
+
+        self.addWaingView((self.window?.contentView)!)
+    }
+    
+    @IBAction func privacyAction(_ sender: Any) {
+        var url = URL(string:"https://www.pdfreaderpro.com/privacy-policy")!
+        NSWorkspace.shared.open(url)
+    }
+    
+    @IBAction func termOfAction(_ sender: Any) {
+        var url = URL(string:"https://www.pdfreaderpro.com/terms_of_service")!
+        NSWorkspace.shared.open(url)
+    }
+    
+    //MARK: - Notification
+    func windowWillClose(_ notification: Notification) {
+//        FMTrackEventManager.default().trackOnceEvent("PUW", withProperties: ["PUW_Btn":"PUW_Btn_BuyAITools_Cancel"])
+        AIPurchaseWindowController.currentWindowController = nil
+    }
+    
+    @objc func IAPProductLoadedNotification() {
+        DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 0.3) {
+            
+            self.reloadData()
+        }
+    }
+    
+    @objc func IAPSubscriptionLoadedNotification() {
+        DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 0.3) {
+            self.removeWaitingView((self.window?.contentView)!)
+            
+            self.reloadData()
+        }
+    }
+    
+    @objc func IAPProductPurchasedNotification() {
+        DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 0.3) {
+            self.removeWaitingView((self.window?.contentView)!)
+            
+            self.reloadData()
+            
+            //Appstore购买结束后绑定票据信息
+#if VERSION_FREE
+            if IAPProductsManager.default().liteAIProduct.isSubscribed {
+                AIInfoManager.default().activateAI(withInfo: ["receipt_str":IAPProductsManager.default().temptransactioReceipt as Any]) { dict, error in
+                    self.reloadData()
+                    if AIInfoManager.default().aiInfoValid {
+                        self.close()
+                    }
+                }
+            }
+#else
+            if IAPProductsManager.default().proAIProduct.isSubscribed {
+                AIInfoManager.default().activateAI(withInfo: ["receipt_str":IAPProductsManager.default().temptransactioReceipt as Any]) { dict, error in
+                    self.reloadData()
+                    if AIInfoManager.default().aiInfoValid {
+                        self.close()
+                    }
+                }
+            }
+#endif
+        }
+    }
+    
+    @objc func IAPProductFailedNotification() {
+        DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 0.3) {
+            self.removeWaitingView((self.window?.contentView)!)
+        }
+    }
+    
+    @objc func IAPProductRestoreFinishedNotification() {
+        self.reloadData()
+        self.appStoreRestoreFinish()
+    }
+    
+    @objc func IAPProductRestoreFailedNotification() {
+        DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 0.3) {
+            self.removeWaitingView((self.window?.contentView)!)
+            
+        }
+    }
+    
+    @objc func AIDeviceStatusChangeNotification() {
+        DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 0.3) {
+            self.reloadData()
+            if AIInfoManager.default().aiInfoValid {
+                self.close()
+            }
+        }
+    }
+    
+    
+    
+}

+ 218 - 0
PDF Office/PDF Master/Class/AIInfo/AIPurchaseWindowController/AIPurchaseWindowController.xib

@@ -0,0 +1,218 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="22505" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
+    <dependencies>
+        <deployment identifier="macosx"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="22505"/>
+        <capability name="Named colors" minToolsVersion="9.0"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <customObject id="-2" userLabel="File's Owner" customClass="AIPurchaseWindowController" customModule="PDF_Reader_Pro" customModuleProvider="target">
+            <connections>
+                <outlet property="contendBox" destination="nfo-M5-w4Q" id="Enr-6q-C7I"/>
+                <outlet property="priceDesLabel" destination="PUd-4Y-sCF" id="u81-7m-Fol"/>
+                <outlet property="priceLabel" destination="Fpk-3x-ujX" id="8bi-Gw-LJR"/>
+                <outlet property="privacyButton" destination="gva-ly-0I8" id="Gmb-GO-JTe"/>
+                <outlet property="purchaseBox" destination="MxD-iI-gPD" id="bqW-Zh-Xc8"/>
+                <outlet property="purchaseButton" destination="YSQ-s1-9UF" id="Lob-Ep-EyC"/>
+                <outlet property="restoreButton" destination="WvO-DX-3U1" id="qzy-DN-gHT"/>
+                <outlet property="subTitleLabel" destination="9Od-nw-vLv" id="w8y-tv-qe6"/>
+                <outlet property="termOfButton" destination="VlN-AZ-5WC" id="rfZ-w1-jaZ"/>
+                <outlet property="tipImage" destination="x0K-kd-2xP" id="ad5-Al-XXa"/>
+                <outlet property="titleLabel" destination="Abl-em-TU7" id="ZzR-Pp-rTn"/>
+                <outlet property="window" destination="F0z-JX-Cv5" id="gIp-Ho-8D9"/>
+            </connections>
+        </customObject>
+        <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
+        <customObject id="-3" userLabel="Application" customClass="NSObject"/>
+        <window title="Window" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" animationBehavior="default" titlebarAppearsTransparent="YES" titleVisibility="hidden" id="F0z-JX-Cv5">
+            <windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES" resizable="YES" fullSizeContentView="YES"/>
+            <windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
+            <rect key="contentRect" x="196" y="240" width="490" height="530"/>
+            <rect key="screenRect" x="0.0" y="0.0" width="1920" height="1055"/>
+            <view key="contentView" id="se5-gp-TjO">
+                <rect key="frame" x="0.0" y="0.0" width="490" height="530"/>
+                <autoresizingMask key="autoresizingMask"/>
+                <subviews>
+                    <box boxType="custom" borderWidth="0.0" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="nfo-M5-w4Q">
+                        <rect key="frame" x="0.0" y="0.0" width="490" height="530"/>
+                        <view key="contentView" id="Ptw-Py-9CW">
+                            <rect key="frame" x="0.0" y="0.0" width="490" height="530"/>
+                            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                            <subviews>
+                                <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="x0K-kd-2xP">
+                                    <rect key="frame" x="17" y="250" width="456" height="240"/>
+                                    <constraints>
+                                        <constraint firstAttribute="height" constant="240" id="J1T-0z-mh3"/>
+                                        <constraint firstAttribute="width" constant="456" id="hyB-8V-rqf"/>
+                                    </constraints>
+                                    <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="axesIndependently" image="ai_Appstore" id="n7U-ZZ-yOu"/>
+                                </imageView>
+                                <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Abl-em-TU7">
+                                    <rect key="frame" x="76" y="200" width="339" height="30"/>
+                                    <textFieldCell key="cell" title="Purchase PDF to Office Pack" id="dXz-FE-Ucw">
+                                        <font key="font" metaFont="systemSemibold" size="26"/>
+                                        <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                        <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                    </textFieldCell>
+                                </textField>
+                                <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="9Od-nw-vLv">
+                                    <rect key="frame" x="30" y="162" width="430" height="34"/>
+                                    <constraints>
+                                        <constraint firstAttribute="width" constant="426" id="yi0-1y-Iea"/>
+                                    </constraints>
+                                    <textFieldCell key="cell" alignment="center" title="Convert first 10 pages only. Purchase PDF to Office Pack to convert all pages." id="Yb3-ZZ-7yB">
+                                        <font key="font" metaFont="system" size="14"/>
+                                        <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                        <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                    </textFieldCell>
+                                </textField>
+                                <box boxType="custom" borderType="none" borderWidth="0.0" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="MxD-iI-gPD">
+                                    <rect key="frame" x="85" y="86" width="320" height="56"/>
+                                    <view key="contentView" id="PyO-oD-pge">
+                                        <rect key="frame" x="0.0" y="0.0" width="320" height="56"/>
+                                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                                        <subviews>
+                                            <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="hN5-hJ-n5O">
+                                                <rect key="frame" x="0.0" y="0.0" width="320" height="56"/>
+                                                <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                                                <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="axesIndependently" image="AICreditIcon" id="Fy6-8w-EzP"/>
+                                            </imageView>
+                                            <customView translatesAutoresizingMaskIntoConstraints="NO" id="OLt-iv-Zsa">
+                                                <rect key="frame" x="0.0" y="11" width="320" height="34"/>
+                                                <subviews>
+                                                    <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Fpk-3x-ujX">
+                                                        <rect key="frame" x="110" y="15" width="101" height="19"/>
+                                                        <textFieldCell key="cell" lineBreakMode="clipping" alignment="center" title="USD $14.99" id="JzE-Rg-QUV">
+                                                            <font key="font" metaFont="systemBold" size="16"/>
+                                                            <color key="textColor" name="Color"/>
+                                                            <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                                        </textFieldCell>
+                                                    </textField>
+                                                    <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="PUd-4Y-sCF">
+                                                        <rect key="frame" x="51" y="0.0" width="219" height="15"/>
+                                                        <textFieldCell key="cell" alignment="center" title="purchase for 50 credit within 30 days" id="8HR-js-jRF">
+                                                            <font key="font" metaFont="cellTitle"/>
+                                                            <color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                                                            <color key="backgroundColor" red="0.55294117649999996" green="0.55294117649999996" blue="0.55294117649999996" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                                                        </textFieldCell>
+                                                    </textField>
+                                                </subviews>
+                                                <constraints>
+                                                    <constraint firstItem="PUd-4Y-sCF" firstAttribute="centerX" secondItem="OLt-iv-Zsa" secondAttribute="centerX" id="2Ru-aa-geN"/>
+                                                    <constraint firstItem="Fpk-3x-ujX" firstAttribute="top" secondItem="OLt-iv-Zsa" secondAttribute="top" id="C1p-AJ-E3t"/>
+                                                    <constraint firstItem="Fpk-3x-ujX" firstAttribute="centerX" secondItem="OLt-iv-Zsa" secondAttribute="centerX" id="Qhx-Pe-umd"/>
+                                                    <constraint firstAttribute="bottom" secondItem="PUd-4Y-sCF" secondAttribute="bottom" id="f2B-M1-HA5"/>
+                                                    <constraint firstItem="PUd-4Y-sCF" firstAttribute="top" secondItem="Fpk-3x-ujX" secondAttribute="bottom" id="kIa-ol-Eib"/>
+                                                </constraints>
+                                            </customView>
+                                            <button focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="YSQ-s1-9UF" customClass="KMButton">
+                                                <rect key="frame" x="0.0" y="0.0" width="320" height="56"/>
+                                                <buttonCell key="cell" type="bevel" bezelStyle="rounded" imagePosition="overlaps" alignment="center" focusRingType="none" imageScaling="axesIndependently" inset="2" id="mWy-BD-0bW">
+                                                    <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                                                    <font key="font" metaFont="systemBold" size="14"/>
+                                                </buttonCell>
+                                                <constraints>
+                                                    <constraint firstAttribute="width" constant="320" id="1yb-Tc-RVe"/>
+                                                    <constraint firstAttribute="height" constant="56" id="84c-yw-o0g"/>
+                                                </constraints>
+                                                <connections>
+                                                    <action selector="purchaseAction:" target="-2" id="Nud-yc-78y"/>
+                                                </connections>
+                                            </button>
+                                        </subviews>
+                                        <constraints>
+                                            <constraint firstAttribute="trailing" secondItem="OLt-iv-Zsa" secondAttribute="trailing" id="HTw-Sy-znK"/>
+                                            <constraint firstItem="YSQ-s1-9UF" firstAttribute="centerY" secondItem="PyO-oD-pge" secondAttribute="centerY" id="HqR-cw-83J"/>
+                                            <constraint firstItem="OLt-iv-Zsa" firstAttribute="centerY" secondItem="PyO-oD-pge" secondAttribute="centerY" id="PWt-tA-X2e"/>
+                                            <constraint firstItem="OLt-iv-Zsa" firstAttribute="leading" secondItem="PyO-oD-pge" secondAttribute="leading" id="gS4-7R-fT9"/>
+                                            <constraint firstItem="YSQ-s1-9UF" firstAttribute="centerX" secondItem="PyO-oD-pge" secondAttribute="centerX" id="ysh-xv-mdG"/>
+                                        </constraints>
+                                    </view>
+                                    <constraints>
+                                        <constraint firstAttribute="height" constant="56" id="JQp-O4-8VZ"/>
+                                        <constraint firstAttribute="width" constant="320" id="tYN-zM-H8d"/>
+                                    </constraints>
+                                </box>
+                                <customView translatesAutoresizingMaskIntoConstraints="NO" id="ttJ-5F-DDB">
+                                    <rect key="frame" x="180" y="50" width="131" height="16"/>
+                                    <subviews>
+                                        <button hidden="YES" focusRingType="none" allowsExpansionToolTips="YES" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="WvO-DX-3U1" customClass="HyperLinkButton">
+                                            <rect key="frame" x="10" y="0.0" width="51" height="16"/>
+                                            <buttonCell key="cell" type="bevel" title="Restore" bezelStyle="rounded" alignment="left" controlSize="mini" lineBreakMode="truncatingTail" focusRingType="none" imageScaling="proportionallyDown" inset="2" id="HPx-Lk-qHk">
+                                                <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                                                <font key="font" metaFont="system"/>
+                                            </buttonCell>
+                                            <connections>
+                                                <action selector="restoreAction:" target="-2" id="S8W-6v-MU7"/>
+                                            </connections>
+                                        </button>
+                                        <button allowsExpansionToolTips="YES" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="gva-ly-0I8" customClass="HyperLinkButton">
+                                            <rect key="frame" x="10" y="0.0" width="49" height="16"/>
+                                            <buttonCell key="cell" type="bevel" title="Privacy" bezelStyle="rounded" alignment="left" controlSize="mini" lineBreakMode="truncatingTail" imageScaling="proportionallyDown" inset="2" id="trQ-kM-beP">
+                                                <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                                                <font key="font" metaFont="system"/>
+                                            </buttonCell>
+                                            <connections>
+                                                <action selector="privacyAction:" target="-2" id="Hr8-wC-oqJ"/>
+                                            </connections>
+                                        </button>
+                                        <button allowsExpansionToolTips="YES" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="VlN-AZ-5WC" customClass="HyperLinkButton">
+                                            <rect key="frame" x="79" y="0.0" width="42" height="16"/>
+                                            <buttonCell key="cell" type="bevel" title="Terms" bezelStyle="rounded" alignment="left" controlSize="mini" lineBreakMode="truncatingTail" imageScaling="proportionallyDown" inset="2" id="Thj-Ma-JuS">
+                                                <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                                                <font key="font" metaFont="system"/>
+                                            </buttonCell>
+                                            <connections>
+                                                <action selector="termOfAction:" target="-2" id="k4S-sr-76I"/>
+                                            </connections>
+                                        </button>
+                                    </subviews>
+                                    <constraints>
+                                        <constraint firstItem="VlN-AZ-5WC" firstAttribute="leading" secondItem="gva-ly-0I8" secondAttribute="trailing" constant="20" id="5h8-Gn-bRs"/>
+                                        <constraint firstItem="WvO-DX-3U1" firstAttribute="leading" secondItem="ttJ-5F-DDB" secondAttribute="leading" constant="10" id="8Jk-wc-ovs"/>
+                                        <constraint firstItem="gva-ly-0I8" firstAttribute="centerY" secondItem="ttJ-5F-DDB" secondAttribute="centerY" id="MUl-wb-xFm"/>
+                                        <constraint firstItem="WvO-DX-3U1" firstAttribute="centerY" secondItem="ttJ-5F-DDB" secondAttribute="centerY" id="bRe-fj-kPa"/>
+                                        <constraint firstItem="VlN-AZ-5WC" firstAttribute="centerY" secondItem="ttJ-5F-DDB" secondAttribute="centerY" id="oNn-HA-plY"/>
+                                        <constraint firstAttribute="height" constant="16" id="of2-aH-2tU"/>
+                                        <constraint firstItem="gva-ly-0I8" firstAttribute="leading" secondItem="ttJ-5F-DDB" secondAttribute="leading" constant="10" id="uWT-Ic-ivx"/>
+                                        <constraint firstAttribute="trailing" secondItem="VlN-AZ-5WC" secondAttribute="trailing" constant="10" id="zks-Nz-aAK"/>
+                                    </constraints>
+                                </customView>
+                            </subviews>
+                            <constraints>
+                                <constraint firstItem="ttJ-5F-DDB" firstAttribute="centerX" secondItem="Ptw-Py-9CW" secondAttribute="centerX" id="4mH-g4-698"/>
+                                <constraint firstItem="9Od-nw-vLv" firstAttribute="centerX" secondItem="Ptw-Py-9CW" secondAttribute="centerX" id="7YZ-O3-LVS"/>
+                                <constraint firstItem="MxD-iI-gPD" firstAttribute="centerX" secondItem="Ptw-Py-9CW" secondAttribute="centerX" id="F53-de-aY2"/>
+                                <constraint firstItem="9Od-nw-vLv" firstAttribute="top" secondItem="Abl-em-TU7" secondAttribute="bottom" constant="4" id="QJw-eC-6S9"/>
+                                <constraint firstItem="x0K-kd-2xP" firstAttribute="centerX" secondItem="Ptw-Py-9CW" secondAttribute="centerX" id="eYI-Q2-Kdf"/>
+                                <constraint firstItem="x0K-kd-2xP" firstAttribute="top" secondItem="Ptw-Py-9CW" secondAttribute="top" constant="40" id="fry-YT-mUN"/>
+                                <constraint firstItem="ttJ-5F-DDB" firstAttribute="top" secondItem="MxD-iI-gPD" secondAttribute="bottom" constant="20" id="lgk-6O-CfX"/>
+                                <constraint firstItem="Abl-em-TU7" firstAttribute="centerX" secondItem="Ptw-Py-9CW" secondAttribute="centerX" id="nf9-2G-j56"/>
+                                <constraint firstItem="MxD-iI-gPD" firstAttribute="top" secondItem="9Od-nw-vLv" secondAttribute="bottom" constant="20" id="vTs-iw-Qax"/>
+                                <constraint firstItem="Abl-em-TU7" firstAttribute="top" secondItem="x0K-kd-2xP" secondAttribute="bottom" constant="20" id="yvD-nF-E4f"/>
+                            </constraints>
+                        </view>
+                    </box>
+                </subviews>
+                <constraints>
+                    <constraint firstItem="nfo-M5-w4Q" firstAttribute="top" secondItem="se5-gp-TjO" secondAttribute="top" id="0pR-N4-2Jb"/>
+                    <constraint firstAttribute="trailing" secondItem="nfo-M5-w4Q" secondAttribute="trailing" id="HqV-7R-Msi"/>
+                    <constraint firstItem="nfo-M5-w4Q" firstAttribute="leading" secondItem="se5-gp-TjO" secondAttribute="leading" id="MdA-4W-JUc"/>
+                    <constraint firstAttribute="bottom" secondItem="nfo-M5-w4Q" secondAttribute="bottom" id="UYd-wl-tFg"/>
+                </constraints>
+            </view>
+            <connections>
+                <outlet property="delegate" destination="-2" id="0bl-1N-AYu"/>
+            </connections>
+            <point key="canvasLocation" x="97" y="104"/>
+        </window>
+    </objects>
+    <resources>
+        <image name="AICreditIcon" width="103" height="20"/>
+        <image name="ai_Appstore" width="1278" height="720"/>
+        <namedColor name="Color">
+            <color red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+        </namedColor>
+    </resources>
+</document>

+ 55 - 0
PDF Office/PDF Master/Class/AIInfo/AITipIcon/AITipIconView.swift

@@ -0,0 +1,55 @@
+//
+//  AITipIconView.swift
+//  PDF Reader Pro Edition
+//
+//  Created by Niehaoyu on 2024/1/17.
+//
+
+import Cocoa
+
+@objcMembers class AITipIconView: NSView, NibLoadable {
+
+    
+    @IBOutlet weak var clickButton: KMButton!
+    @IBOutlet weak var hoverImage: NSImageView!
+    
+    var clickHandle: ((_ view: AITipIconView) -> Void)?
+    
+    override func draw(_ dirtyRect: NSRect) {
+        super.draw(dirtyRect)
+
+        // Drawing code here.
+    }
+    
+    @objc static func ocCreateFunction() -> AITipIconView{
+        return AITipIconView.createFromNib()!
+    }
+    
+    override func awakeFromNib() {
+        super.awakeFromNib()
+        
+        self.clickButton.mouseMoveCallback = {[unowned self] mouseEntered in
+            if mouseEntered {
+                self.hoverImage.image = NSImage(named: "pop-btn_hover")
+            } else {
+                self.hoverImage.image = NSImage(named: "pop-btn")
+            }
+        }
+    }
+    
+    
+    
+    
+    
+    //MARK: IBAction
+    @IBAction func clickAction(_ sender: Any) {
+        guard let callBack = self.clickHandle else {
+            return
+        }
+        callBack(self)
+        
+    }
+    
+    
+    
+}

+ 54 - 0
PDF Office/PDF Master/Class/AIInfo/AITipIcon/AITipIconView.xib

@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="22505" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
+    <dependencies>
+        <deployment identifier="macosx"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="22505"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <customObject id="-2" userLabel="File's Owner"/>
+        <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
+        <customObject id="-3" userLabel="Application" customClass="NSObject"/>
+        <customView id="c22-O7-iKe" customClass="AITipIconView" customModule="PDF_Reader_Pro" customModuleProvider="target">
+            <rect key="frame" x="0.0" y="0.0" width="72" height="72"/>
+            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+            <subviews>
+                <customView translatesAutoresizingMaskIntoConstraints="NO" id="I74-vT-Xez">
+                    <rect key="frame" x="0.0" y="0.0" width="72" height="72"/>
+                    <subviews>
+                        <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="8WG-dd-2tm">
+                            <rect key="frame" x="0.0" y="0.0" width="72" height="72"/>
+                            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+                            <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="pop-btn" id="9gd-DZ-q1G"/>
+                        </imageView>
+                        <button fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Mqm-IP-WSs" customClass="KMButton">
+                            <rect key="frame" x="13" y="16" width="48" height="48"/>
+                            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                            <buttonCell key="cell" type="square" bezelStyle="shadowlessSquare" imagePosition="only" alignment="center" imageScaling="proportionallyDown" inset="2" id="uCp-tX-ETH">
+                                <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                                <font key="font" metaFont="system"/>
+                            </buttonCell>
+                            <connections>
+                                <action selector="clickAction:" target="c22-O7-iKe" id="M4L-wv-1WT"/>
+                            </connections>
+                        </button>
+                    </subviews>
+                </customView>
+            </subviews>
+            <constraints>
+                <constraint firstAttribute="bottom" secondItem="I74-vT-Xez" secondAttribute="bottom" id="2Ea-eL-EvV"/>
+                <constraint firstItem="I74-vT-Xez" firstAttribute="top" secondItem="c22-O7-iKe" secondAttribute="top" id="HiK-XD-DDN"/>
+                <constraint firstItem="I74-vT-Xez" firstAttribute="leading" secondItem="c22-O7-iKe" secondAttribute="leading" id="ULu-DB-z14"/>
+                <constraint firstAttribute="trailing" secondItem="I74-vT-Xez" secondAttribute="trailing" id="lhJ-a0-M2L"/>
+            </constraints>
+            <connections>
+                <outlet property="clickButton" destination="Mqm-IP-WSs" id="8MN-Vf-54Z"/>
+                <outlet property="hoverImage" destination="8WG-dd-2tm" id="cKM-W6-EXp"/>
+            </connections>
+            <point key="canvasLocation" x="60" y="114"/>
+        </customView>
+    </objects>
+    <resources>
+        <image name="pop-btn" width="80" height="80"/>
+    </resources>
+</document>

+ 137 - 0
PDF Office/PDF Master/Class/AIInfo/AITypeChooseView/AITypeChooseView.swift

@@ -0,0 +1,137 @@
+//
+//  AITypeChooseView.swift
+//  PDF Reader Pro Edition
+//
+//  Created by Niehaoyu on 2024/1/17.
+//
+
+import Cocoa
+
+@objcMembers class AITypeChooseView: NSView, NibLoadable {
+
+    
+    @IBOutlet weak var contendBox: NSBox!
+    
+    @IBOutlet weak var aiSummaryBox: NSBox!
+    @IBOutlet weak var aiSummaryLabel: NSTextField!
+    @IBOutlet weak var aiSummaryBtn: KMButton!
+    
+    @IBOutlet weak var aiRewritingBox: NSBox!
+    @IBOutlet weak var aiRewritingLabel: NSTextField!
+    @IBOutlet weak var aiRewritingBtn: KMButton!
+    
+    @IBOutlet weak var aiProofreadingBox: NSBox!
+    @IBOutlet weak var aiProofreadingLabel: NSTextField!
+    @IBOutlet weak var aiProofreadingBtn: KMButton!
+    
+    @IBOutlet weak var aiTranslateBox: NSBox!
+    @IBOutlet weak var aiTranslateLabel: NSTextField!
+    @IBOutlet weak var aiTranslateBtn: KMButton!
+    
+    
+    var clickHandle: ((_ view: AITypeChooseView, _ clickType: AIConfigType) -> Void)?
+    
+    override func draw(_ dirtyRect: NSRect) {
+        super.draw(dirtyRect)
+
+        // Drawing code here.
+    }
+    
+    @objc static func ocCreateFunction() -> AITypeChooseView {
+        return AITypeChooseView.createFromNib()!
+    }
+    
+    override func awakeFromNib() {
+        super.awakeFromNib()
+        
+        if KMAppearance.isDarkMode() {
+            self.contendBox.fillColor = NSColor(red: 44/255.0, green: 44/255.0, blue: 44/255.0, alpha: 1)
+        } else {
+            self.contendBox.fillColor = NSColor.white
+        }
+        
+        self.aiSummaryLabel.stringValue = NSLocalizedString("AI Summarize", comment: "")
+        self.aiRewritingLabel.stringValue = NSLocalizedString("AI Rewrite", comment: "")
+        self.aiProofreadingLabel.stringValue = NSLocalizedString("AI Proofread", comment: "")
+        self.aiTranslateLabel.stringValue = NSLocalizedString("AI Translate", comment: "")
+
+        self.aiSummaryLabel.font = NSFont.SFProTextRegularFont(13)
+        self.aiRewritingLabel.font = NSFont.SFProTextRegularFont(13)
+        self.aiProofreadingLabel.font = NSFont.SFProTextRegularFont(13)
+        self.aiTranslateLabel.font = NSFont.SFProTextRegularFont(13)
+        
+        self.aiSummaryLabel.textColor = KMAppearance.KMColor_Layout_H0()
+        self.aiRewritingLabel.textColor = KMAppearance.KMColor_Layout_H0()
+        self.aiProofreadingLabel.textColor = KMAppearance.KMColor_Layout_H0()
+        self.aiTranslateLabel.textColor = KMAppearance.KMColor_Layout_H0()
+        
+        self.aiSummaryBtn.mouseMoveCallback = {[unowned self] mouseEntered in
+            if mouseEntered {
+                if KMAppearance.isDarkMode() {
+                    self.aiSummaryLabel.textColor = NSColor(red: 85/255, green: 245/255, blue: 1, alpha: 1)
+                } else {
+                    self.aiSummaryLabel.textColor = NSColor(red: 0, green: 209/255, blue: 222/255, alpha: 1)
+                }
+            } else {
+                self.aiSummaryLabel.textColor = KMAppearance.KMColor_Layout_H0()
+            }
+        }
+        
+        self.aiRewritingBtn.mouseMoveCallback = {[unowned self] mouseEntered in
+            if mouseEntered {
+                if KMAppearance.isDarkMode() {
+                    self.aiRewritingLabel.textColor = NSColor(red: 255/255, green: 105/255, blue: 195/255, alpha: 1)
+                } else {
+                    self.aiRewritingLabel.textColor = NSColor(red: 240/255, green: 28/255, blue: 155/255, alpha: 1)
+                }
+            } else {
+                self.aiRewritingLabel.textColor = KMAppearance.KMColor_Layout_H0()
+            }
+        }
+        
+        self.aiProofreadingBtn.mouseMoveCallback = {[unowned self] mouseEntered in
+            if mouseEntered {
+                if KMAppearance.isDarkMode() {
+                    self.aiProofreadingLabel.textColor = NSColor(red: 194/255, green: 157/255, blue: 1, alpha: 1)
+                } else {
+                    self.aiProofreadingLabel.textColor = NSColor(red: 108/255, green: 28/255, blue: 240/255, alpha: 1)
+                }
+            } else {
+                self.aiProofreadingLabel.textColor = KMAppearance.KMColor_Layout_H0()
+            }
+        }
+        
+        self.aiTranslateBtn.mouseMoveCallback = {[unowned self] mouseEntered in
+            if mouseEntered {
+                if KMAppearance.isDarkMode() {
+                    self.aiTranslateLabel.textColor = NSColor(red: 255/255, green: 152/255, blue: 77/255, alpha: 1)
+                } else {
+                    self.aiTranslateLabel.textColor = NSColor(red: 240/255, green: 101/255, blue: 0, alpha: 1)
+                }
+            } else {
+                self.aiTranslateLabel.textColor = KMAppearance.KMColor_Layout_H0()
+            }
+        }
+        
+    }
+    
+    @IBAction func typeSelectAction(_ sender: NSButton) {
+        var configType: AIConfigType = .none
+        if sender == self.aiSummaryBtn {
+            configType = .summarize
+        } else if sender == self.aiRewritingBtn {
+            configType = .reWriting
+        } else if sender == self.aiProofreadingBtn {
+            configType = .proofreading
+        } else if sender == self.aiTranslateBtn {
+            configType = .translate
+        }
+        
+        guard let callBack = self.clickHandle else {
+            return
+        }
+        callBack(self, configType)
+    }
+    
+    
+}

+ 279 - 0
PDF Office/PDF Master/Class/AIInfo/AITypeChooseView/AITypeChooseView.xib

@@ -0,0 +1,279 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="22505" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
+    <dependencies>
+        <deployment identifier="macosx"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="22505"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <customObject id="-2" userLabel="File's Owner"/>
+        <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
+        <customObject id="-3" userLabel="Application" customClass="NSObject"/>
+        <customView id="c22-O7-iKe" customClass="AITypeChooseView" customModule="PDF_Reader_Pro" customModuleProvider="target">
+            <rect key="frame" x="0.0" y="0.0" width="170" height="160"/>
+            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+            <subviews>
+                <box boxType="custom" borderWidth="0.0" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="VUy-oG-V3F">
+                    <rect key="frame" x="0.0" y="0.0" width="170" height="160"/>
+                    <view key="contentView" id="UJt-do-ieb">
+                        <rect key="frame" x="0.0" y="0.0" width="170" height="160"/>
+                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                        <subviews>
+                            <box boxType="custom" borderWidth="0.0" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="sCe-f5-ZEE">
+                                <rect key="frame" x="23" y="16" width="124" height="128"/>
+                                <view key="contentView" id="Zmw-d5-rVo">
+                                    <rect key="frame" x="0.0" y="0.0" width="124" height="128"/>
+                                    <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                                    <subviews>
+                                        <box boxType="custom" borderWidth="0.0" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="iDc-fC-55M">
+                                            <rect key="frame" x="0.0" y="108" width="124" height="20"/>
+                                            <view key="contentView" id="LMt-TI-pUO">
+                                                <rect key="frame" x="0.0" y="0.0" width="124" height="20"/>
+                                                <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                                                <subviews>
+                                                    <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="vlU-LZ-88S">
+                                                        <rect key="frame" x="0.0" y="0.0" width="20" height="20"/>
+                                                        <constraints>
+                                                            <constraint firstAttribute="width" constant="20" id="fmd-us-hgw"/>
+                                                            <constraint firstAttribute="height" constant="20" id="j8y-fr-Q4f"/>
+                                                        </constraints>
+                                                        <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="AISummarize" id="WDk-yq-Yot"/>
+                                                    </imageView>
+                                                    <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="xIJ-rU-Wmo">
+                                                        <rect key="frame" x="30" y="2" width="88" height="16"/>
+                                                        <textFieldCell key="cell" lineBreakMode="clipping" title="AI Summarize" id="Ift-aS-ddC">
+                                                            <font key="font" metaFont="system"/>
+                                                            <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                                            <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                                        </textFieldCell>
+                                                    </textField>
+                                                    <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="rjf-II-2Ek" customClass="KMButton">
+                                                        <rect key="frame" x="0.0" y="0.0" width="124" height="20"/>
+                                                        <buttonCell key="cell" type="bevel" bezelStyle="rounded" alignment="center" imageScaling="proportionallyDown" inset="2" id="2RP-Ym-HCQ">
+                                                            <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                                                            <font key="font" metaFont="system"/>
+                                                        </buttonCell>
+                                                        <connections>
+                                                            <action selector="typeSelectAction:" target="c22-O7-iKe" id="ZSe-AI-HJ2"/>
+                                                        </connections>
+                                                    </button>
+                                                </subviews>
+                                                <constraints>
+                                                    <constraint firstItem="rjf-II-2Ek" firstAttribute="leading" secondItem="LMt-TI-pUO" secondAttribute="leading" id="Af0-4J-n1P"/>
+                                                    <constraint firstItem="vlU-LZ-88S" firstAttribute="top" secondItem="LMt-TI-pUO" secondAttribute="top" id="Hje-zZ-9YS"/>
+                                                    <constraint firstAttribute="bottom" secondItem="rjf-II-2Ek" secondAttribute="bottom" id="IU2-ve-vmY"/>
+                                                    <constraint firstAttribute="trailing" secondItem="rjf-II-2Ek" secondAttribute="trailing" id="M7Q-s8-WCG"/>
+                                                    <constraint firstItem="xIJ-rU-Wmo" firstAttribute="leading" secondItem="vlU-LZ-88S" secondAttribute="trailing" constant="12" id="VnM-yu-z6s"/>
+                                                    <constraint firstItem="vlU-LZ-88S" firstAttribute="leading" secondItem="LMt-TI-pUO" secondAttribute="leading" id="bCc-gq-7s3"/>
+                                                    <constraint firstItem="rjf-II-2Ek" firstAttribute="top" secondItem="LMt-TI-pUO" secondAttribute="top" id="dNw-OH-VtH"/>
+                                                    <constraint firstItem="xIJ-rU-Wmo" firstAttribute="centerY" secondItem="LMt-TI-pUO" secondAttribute="centerY" id="zcX-gu-e3g"/>
+                                                </constraints>
+                                            </view>
+                                            <constraints>
+                                                <constraint firstAttribute="height" constant="20" id="PT4-j7-qXG"/>
+                                            </constraints>
+                                        </box>
+                                        <box boxType="custom" borderWidth="0.0" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="f1E-wQ-bKn">
+                                            <rect key="frame" x="0.0" y="72" width="124" height="20"/>
+                                            <view key="contentView" id="dw5-LP-3TB">
+                                                <rect key="frame" x="0.0" y="0.0" width="124" height="20"/>
+                                                <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                                                <subviews>
+                                                    <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="Hr1-Wy-rkN">
+                                                        <rect key="frame" x="0.0" y="0.0" width="20" height="20"/>
+                                                        <constraints>
+                                                            <constraint firstAttribute="width" constant="20" id="bbo-Gv-2IF"/>
+                                                            <constraint firstAttribute="height" constant="20" id="gb2-j4-EJs"/>
+                                                        </constraints>
+                                                        <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="AIRewriting" id="m5n-ve-1Ih"/>
+                                                    </imageView>
+                                                    <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="GHw-yO-3H6">
+                                                        <rect key="frame" x="30" y="2" width="77" height="16"/>
+                                                        <textFieldCell key="cell" lineBreakMode="clipping" title="AI Rewriting" id="RXT-fp-bbY">
+                                                            <font key="font" metaFont="system"/>
+                                                            <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                                            <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                                        </textFieldCell>
+                                                    </textField>
+                                                    <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="qgR-Ii-NXs" customClass="KMButton">
+                                                        <rect key="frame" x="0.0" y="0.0" width="124" height="20"/>
+                                                        <buttonCell key="cell" type="bevel" bezelStyle="rounded" alignment="center" imageScaling="proportionallyDown" inset="2" id="YaZ-ba-7tG">
+                                                            <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                                                            <font key="font" metaFont="system"/>
+                                                        </buttonCell>
+                                                        <connections>
+                                                            <action selector="typeSelectAction:" target="c22-O7-iKe" id="f7N-go-dB7"/>
+                                                        </connections>
+                                                    </button>
+                                                </subviews>
+                                                <constraints>
+                                                    <constraint firstAttribute="trailing" secondItem="qgR-Ii-NXs" secondAttribute="trailing" id="Gdc-t7-TtU"/>
+                                                    <constraint firstItem="qgR-Ii-NXs" firstAttribute="leading" secondItem="dw5-LP-3TB" secondAttribute="leading" id="WIf-5C-Ogr"/>
+                                                    <constraint firstItem="GHw-yO-3H6" firstAttribute="leading" secondItem="Hr1-Wy-rkN" secondAttribute="trailing" constant="12" id="hOW-kN-GEK"/>
+                                                    <constraint firstItem="Hr1-Wy-rkN" firstAttribute="leading" secondItem="dw5-LP-3TB" secondAttribute="leading" id="hhV-RU-jsh"/>
+                                                    <constraint firstAttribute="bottom" secondItem="qgR-Ii-NXs" secondAttribute="bottom" id="iQv-7d-SnD"/>
+                                                    <constraint firstItem="Hr1-Wy-rkN" firstAttribute="top" secondItem="dw5-LP-3TB" secondAttribute="top" id="lrr-Zu-ulc"/>
+                                                    <constraint firstItem="qgR-Ii-NXs" firstAttribute="top" secondItem="dw5-LP-3TB" secondAttribute="top" id="swb-Mu-ueQ"/>
+                                                    <constraint firstItem="GHw-yO-3H6" firstAttribute="centerY" secondItem="dw5-LP-3TB" secondAttribute="centerY" id="tUs-xv-G0k"/>
+                                                </constraints>
+                                            </view>
+                                            <constraints>
+                                                <constraint firstAttribute="height" constant="20" id="F2s-8r-5NG"/>
+                                            </constraints>
+                                        </box>
+                                        <box boxType="custom" borderWidth="0.0" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="xlo-IN-F3R">
+                                            <rect key="frame" x="0.0" y="36" width="124" height="20"/>
+                                            <view key="contentView" id="xxg-zq-bx9">
+                                                <rect key="frame" x="0.0" y="0.0" width="124" height="20"/>
+                                                <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                                                <subviews>
+                                                    <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="vI2-zl-UF7">
+                                                        <rect key="frame" x="0.0" y="0.0" width="20" height="20"/>
+                                                        <constraints>
+                                                            <constraint firstAttribute="height" constant="20" id="SwT-zi-8dC"/>
+                                                            <constraint firstAttribute="width" constant="20" id="mEu-T2-x6r"/>
+                                                        </constraints>
+                                                        <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="AIProofreading" id="gje-Nd-2hs"/>
+                                                    </imageView>
+                                                    <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="gxs-u8-WzL">
+                                                        <rect key="frame" x="30" y="2" width="98" height="16"/>
+                                                        <textFieldCell key="cell" lineBreakMode="clipping" title="AI Proofreading" id="hMx-Ml-GPp">
+                                                            <font key="font" metaFont="system"/>
+                                                            <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                                            <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                                        </textFieldCell>
+                                                    </textField>
+                                                    <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="6fb-DS-sy9" customClass="KMButton">
+                                                        <rect key="frame" x="0.0" y="0.0" width="124" height="20"/>
+                                                        <buttonCell key="cell" type="bevel" bezelStyle="rounded" alignment="center" imageScaling="proportionallyDown" inset="2" id="IGc-hG-aJr">
+                                                            <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                                                            <font key="font" metaFont="system"/>
+                                                        </buttonCell>
+                                                        <connections>
+                                                            <action selector="typeSelectAction:" target="c22-O7-iKe" id="o5X-Mb-UT3"/>
+                                                        </connections>
+                                                    </button>
+                                                </subviews>
+                                                <constraints>
+                                                    <constraint firstItem="6fb-DS-sy9" firstAttribute="leading" secondItem="xxg-zq-bx9" secondAttribute="leading" id="2wh-eW-7Yx"/>
+                                                    <constraint firstItem="gxs-u8-WzL" firstAttribute="leading" secondItem="vI2-zl-UF7" secondAttribute="trailing" constant="12" id="9rF-sk-R2z"/>
+                                                    <constraint firstItem="6fb-DS-sy9" firstAttribute="top" secondItem="xxg-zq-bx9" secondAttribute="top" id="CQ5-sD-IMV"/>
+                                                    <constraint firstAttribute="trailing" secondItem="6fb-DS-sy9" secondAttribute="trailing" id="UXx-Fx-m2o"/>
+                                                    <constraint firstItem="vI2-zl-UF7" firstAttribute="top" secondItem="xxg-zq-bx9" secondAttribute="top" id="Zhe-SU-TKc"/>
+                                                    <constraint firstItem="gxs-u8-WzL" firstAttribute="centerY" secondItem="xxg-zq-bx9" secondAttribute="centerY" id="fae-Rc-xcr"/>
+                                                    <constraint firstItem="vI2-zl-UF7" firstAttribute="leading" secondItem="xxg-zq-bx9" secondAttribute="leading" id="sSy-Y5-PKz"/>
+                                                    <constraint firstAttribute="bottom" secondItem="6fb-DS-sy9" secondAttribute="bottom" id="w8Y-vH-0ew"/>
+                                                </constraints>
+                                            </view>
+                                            <constraints>
+                                                <constraint firstAttribute="height" constant="20" id="6gu-fr-TGh"/>
+                                            </constraints>
+                                        </box>
+                                        <box boxType="custom" borderWidth="0.0" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="JG6-iH-Oem">
+                                            <rect key="frame" x="0.0" y="0.0" width="124" height="20"/>
+                                            <view key="contentView" id="BHr-18-UPC">
+                                                <rect key="frame" x="0.0" y="0.0" width="124" height="20"/>
+                                                <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                                                <subviews>
+                                                    <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="hiO-gy-UDi">
+                                                        <rect key="frame" x="0.0" y="0.0" width="20" height="20"/>
+                                                        <constraints>
+                                                            <constraint firstAttribute="height" constant="20" id="JbZ-IX-XtG"/>
+                                                            <constraint firstAttribute="width" constant="20" id="gya-80-KzX"/>
+                                                        </constraints>
+                                                        <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="AITranslate" id="kZW-YH-dcP"/>
+                                                    </imageView>
+                                                    <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="tYH-aU-eif">
+                                                        <rect key="frame" x="30" y="2" width="76" height="16"/>
+                                                        <textFieldCell key="cell" lineBreakMode="clipping" title="AI Translate" id="tdG-4j-BQt">
+                                                            <font key="font" metaFont="system"/>
+                                                            <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                                            <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                                        </textFieldCell>
+                                                    </textField>
+                                                    <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="uQj-oG-1cn" customClass="KMButton">
+                                                        <rect key="frame" x="0.0" y="0.0" width="124" height="20"/>
+                                                        <buttonCell key="cell" type="bevel" bezelStyle="rounded" alignment="center" imageScaling="proportionallyDown" inset="2" id="gyO-FR-USP">
+                                                            <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                                                            <font key="font" metaFont="system"/>
+                                                        </buttonCell>
+                                                        <connections>
+                                                            <action selector="typeSelectAction:" target="c22-O7-iKe" id="ENI-Nh-eqo"/>
+                                                        </connections>
+                                                    </button>
+                                                </subviews>
+                                                <constraints>
+                                                    <constraint firstAttribute="trailing" secondItem="tYH-aU-eif" secondAttribute="trailing" constant="20" id="0CW-f6-Ll5"/>
+                                                    <constraint firstAttribute="bottom" secondItem="uQj-oG-1cn" secondAttribute="bottom" id="33s-qp-aY5"/>
+                                                    <constraint firstItem="hiO-gy-UDi" firstAttribute="leading" secondItem="BHr-18-UPC" secondAttribute="leading" id="6b3-Gt-53Y"/>
+                                                    <constraint firstAttribute="trailing" secondItem="uQj-oG-1cn" secondAttribute="trailing" id="G1O-GK-hVs"/>
+                                                    <constraint firstItem="tYH-aU-eif" firstAttribute="leading" secondItem="hiO-gy-UDi" secondAttribute="trailing" constant="12" id="Nem-Nx-8bT"/>
+                                                    <constraint firstItem="uQj-oG-1cn" firstAttribute="top" secondItem="BHr-18-UPC" secondAttribute="top" id="Rf2-kE-91I"/>
+                                                    <constraint firstItem="uQj-oG-1cn" firstAttribute="leading" secondItem="BHr-18-UPC" secondAttribute="leading" id="khq-kb-X7b"/>
+                                                    <constraint firstItem="tYH-aU-eif" firstAttribute="centerY" secondItem="BHr-18-UPC" secondAttribute="centerY" id="oYx-oY-QpJ"/>
+                                                    <constraint firstItem="hiO-gy-UDi" firstAttribute="top" secondItem="BHr-18-UPC" secondAttribute="top" id="pAf-BQ-wS0"/>
+                                                </constraints>
+                                            </view>
+                                            <constraints>
+                                                <constraint firstAttribute="height" constant="20" id="MlI-gb-hQb"/>
+                                            </constraints>
+                                        </box>
+                                    </subviews>
+                                    <constraints>
+                                        <constraint firstItem="xlo-IN-F3R" firstAttribute="leading" secondItem="Zmw-d5-rVo" secondAttribute="leading" id="4Nk-3P-A1K"/>
+                                        <constraint firstItem="f1E-wQ-bKn" firstAttribute="top" secondItem="iDc-fC-55M" secondAttribute="bottom" constant="16" id="Efp-PP-yS6"/>
+                                        <constraint firstItem="xlo-IN-F3R" firstAttribute="top" secondItem="f1E-wQ-bKn" secondAttribute="bottom" constant="16" id="Lxj-19-9EB"/>
+                                        <constraint firstItem="f1E-wQ-bKn" firstAttribute="leading" secondItem="Zmw-d5-rVo" secondAttribute="leading" id="MDc-Wy-0be"/>
+                                        <constraint firstItem="JG6-iH-Oem" firstAttribute="leading" secondItem="Zmw-d5-rVo" secondAttribute="leading" id="Qxa-5d-LSL"/>
+                                        <constraint firstAttribute="trailing" secondItem="JG6-iH-Oem" secondAttribute="trailing" id="SwD-Rx-h3f"/>
+                                        <constraint firstItem="JG6-iH-Oem" firstAttribute="top" secondItem="xlo-IN-F3R" secondAttribute="bottom" constant="16" id="bNm-7A-qpD"/>
+                                        <constraint firstItem="iDc-fC-55M" firstAttribute="leading" secondItem="Zmw-d5-rVo" secondAttribute="leading" id="g6y-AO-e5U"/>
+                                        <constraint firstAttribute="trailing" secondItem="iDc-fC-55M" secondAttribute="trailing" id="iVF-cb-xCv"/>
+                                        <constraint firstItem="iDc-fC-55M" firstAttribute="top" secondItem="Zmw-d5-rVo" secondAttribute="top" id="u0M-6V-p1i"/>
+                                        <constraint firstAttribute="trailing" secondItem="xlo-IN-F3R" secondAttribute="trailing" id="wOu-gb-5U8"/>
+                                        <constraint firstAttribute="trailing" secondItem="f1E-wQ-bKn" secondAttribute="trailing" id="wrS-Nd-oFP"/>
+                                    </constraints>
+                                </view>
+                                <constraints>
+                                    <constraint firstAttribute="height" constant="128" id="htp-iB-FjU"/>
+                                </constraints>
+                            </box>
+                        </subviews>
+                        <constraints>
+                            <constraint firstItem="sCe-f5-ZEE" firstAttribute="centerX" secondItem="UJt-do-ieb" secondAttribute="centerX" id="Gd6-Ua-z2y"/>
+                            <constraint firstItem="sCe-f5-ZEE" firstAttribute="centerY" secondItem="UJt-do-ieb" secondAttribute="centerY" id="z8g-w3-WVY"/>
+                        </constraints>
+                    </view>
+                </box>
+            </subviews>
+            <constraints>
+                <constraint firstItem="VUy-oG-V3F" firstAttribute="leading" secondItem="c22-O7-iKe" secondAttribute="leading" id="1Cw-vC-hZl"/>
+                <constraint firstItem="VUy-oG-V3F" firstAttribute="top" secondItem="c22-O7-iKe" secondAttribute="top" id="VdU-cH-MMD"/>
+                <constraint firstAttribute="trailing" secondItem="VUy-oG-V3F" secondAttribute="trailing" id="Wo0-oh-EU7"/>
+                <constraint firstAttribute="bottom" secondItem="VUy-oG-V3F" secondAttribute="bottom" id="dYd-2g-anB"/>
+            </constraints>
+            <connections>
+                <outlet property="aiProofreadingBox" destination="xlo-IN-F3R" id="ybE-r4-FoW"/>
+                <outlet property="aiProofreadingBtn" destination="6fb-DS-sy9" id="VPK-ZV-fPt"/>
+                <outlet property="aiProofreadingLabel" destination="gxs-u8-WzL" id="kl5-SD-0tw"/>
+                <outlet property="aiRewritingBox" destination="f1E-wQ-bKn" id="qZS-eA-0eA"/>
+                <outlet property="aiRewritingBtn" destination="qgR-Ii-NXs" id="i4f-uO-rhJ"/>
+                <outlet property="aiRewritingLabel" destination="GHw-yO-3H6" id="Ozf-h2-bR5"/>
+                <outlet property="aiSummaryBox" destination="iDc-fC-55M" id="p6e-wU-Q4A"/>
+                <outlet property="aiSummaryBtn" destination="rjf-II-2Ek" id="ULd-hK-QWx"/>
+                <outlet property="aiSummaryLabel" destination="xIJ-rU-Wmo" id="aVB-uF-Tf2"/>
+                <outlet property="aiTranslateBox" destination="JG6-iH-Oem" id="KMe-eJ-gAU"/>
+                <outlet property="aiTranslateBtn" destination="uQj-oG-1cn" id="4s3-ue-7Yp"/>
+                <outlet property="aiTranslateLabel" destination="tYH-aU-eif" id="NfI-HR-tRY"/>
+                <outlet property="contendBox" destination="VUy-oG-V3F" id="EMK-ng-Ysi"/>
+            </connections>
+            <point key="canvasLocation" x="-19.5" y="112"/>
+        </customView>
+    </objects>
+    <resources>
+        <image name="AIProofreading" width="20" height="20"/>
+        <image name="AIRewriting" width="20" height="20"/>
+        <image name="AISummarize" width="20" height="20"/>
+        <image name="AITranslate" width="21" height="20"/>
+    </resources>
+</document>

+ 313 - 0
PDF Office/PDF Master/Class/AIInfo/AIUserInfoController/AIUserInfoController.swift

@@ -0,0 +1,313 @@
+//
+//  AIUserInfoController.swift
+//  PDF Reader Pro Edition
+//
+//  Created by Niehaoyu on 2024/1/17.
+//
+
+import Cocoa
+
+@objcMembers class AIUserInfoController: NSViewController {
+
+    @IBOutlet weak var contendBox: NSBox!
+    @IBOutlet weak var titleLabel: NSTextField!
+    @IBOutlet weak var whatNewlabel: NSTextField!
+    
+    @IBOutlet weak var emptyContendBox: NSBox!
+    @IBOutlet weak var emptyTitleLabel: NSTextField!
+    @IBOutlet weak var emptyBuyNowBox: KMBox!
+    @IBOutlet weak var emptyBuyNowLabel: NSTextField!
+    @IBOutlet weak var emptyRestoreBtn: HyperLinkButton!
+    @IBOutlet weak var emptyBuyNowBtn: KMButton!
+    @IBOutlet weak var emptyTipButton: KMButton!
+    
+    
+    @IBOutlet weak var creditsContendBox: NSBox!
+    @IBOutlet weak var creditsInfoBox: KMBox!
+    @IBOutlet weak var creditsTitleLabel: NSTextField!
+    @IBOutlet weak var validCreditLabel: NSTextField!
+    @IBOutlet weak var totalCreditLabel: NSTextField!
+    @IBOutlet weak var alreadCreditBox: NSBox!
+    @IBOutlet weak var alreadyCreditLabel: NSTextField!
+    @IBOutlet weak var alreadySeplineView: NSView!
+    @IBOutlet weak var timeDescriptionInfoLabel: NSTextField!
+    @IBOutlet weak var dateInfoLabel: NSTextField!
+    @IBOutlet weak var creditsBuyNowBox: KMBox!
+    @IBOutlet weak var creditsBuyNowLabel: NSTextField!
+    @IBOutlet weak var creditsRestoreBtn: HyperLinkButton!
+    @IBOutlet weak var creditBuyNowBtn: KMButton!
+    @IBOutlet weak var creditTipBtn: KMButton!
+    
+    var popOver: NSPopover!
+    
+    var guideHandle: ((_ vc: AIUserInfoController) -> Void)?
+    var purchaseHandle: ((_ vc: AIUserInfoController) -> Void)?
+    var enterLicenseHandle: ((_ vc: AIUserInfoController) -> Void)?
+    
+    deinit {
+        NotificationCenter.default.removeObserver(self)
+    }
+    
+    override func viewDidLoad() {
+        super.viewDidLoad()
+        // Do view setup here.
+        
+        self.view.wantsLayer = true
+        if KMAppearance.isDarkMode() {
+            self.view.layer?.backgroundColor = NSColor(red: 43/255, green: 43/255, blue: 43/255, alpha: 1).cgColor
+        } else {
+            self.view.layer?.backgroundColor = NSColor.white.cgColor
+        }
+
+        self.titleLabel.font = NSFont.SFProTextSemiboldFont(18)
+        self.whatNewlabel.font = NSFont.SFProTextSemiboldFont(12)
+        self.titleLabel.textColor = KMAppearance.KMColor_Layout_H0()
+        self.whatNewlabel.textColor = KMAppearance.KMColor_Interactive_A0()
+        
+        self.titleLabel.stringValue = NSLocalizedString("AI Tools", comment: "")
+        self.whatNewlabel.stringValue = NSLocalizedString("What‘s New", comment: "") + " →"
+        
+        self.creditsTitleLabel.stringValue = NSLocalizedString("Available credits this month", comment: "")
+        self.alreadyCreditLabel.stringValue = NSLocalizedString("Credits to be unlocked", comment: "")
+        self.creditsBuyNowLabel.stringValue = NSLocalizedString("Buy Now", comment: "")
+        self.emptyContendBox.isHidden = true
+        self.creditsContendBox.isHidden = true
+        if AIInfoManager.default().aiInfoValid == true {
+            self.creditsContendBox.isHidden = false
+        } else {
+            self.emptyContendBox.isHidden = false
+        }
+        
+        self.creditsRestoreBtn.isHidden = true
+#if VERSION_DMG
+        self.emptyRestoreBtn.isHidden = false
+#else
+        self.emptyRestoreBtn.isHidden = true
+#endif
+        
+        self.updateEmptyCreditViewUI()
+        self.updateCreditsViewUI()
+        
+        NotificationCenter.default.addObserver(self, selector: #selector(aiStatusInfoChangeNoti), name: NSNotification.Name(rawValue: kDeviceAIStatusChangeNotification), object: nil)
+        
+        self.updateCreditsViewInfo()
+        
+        self.creditTipBtn.mouseMoveCallback = {[unowned self] mouseEntered in
+            if mouseEntered {
+                let tipString = NSLocalizedString("Each use of the AI tools costs 1 credit.", comment: "")
+          
+                let popViewController = KMToolbarItemPopViewController.init()
+                if self.popOver == nil {
+                    self.popOver = NSPopover.init()
+                }
+                self.popOver.contentViewController = popViewController
+                self.popOver.animates = false
+                self.popOver.behavior = .semitransient
+                self.popOver.contentSize = (popViewController.view.frame.size)
+                popViewController.updateWithHelpTip(helpTip: tipString)
+                self.popOver.show(relativeTo: self.creditTipBtn.frame, of: self.creditTipBtn.superview!, preferredEdge: .maxY)
+            } else {
+                self.popOver.close()
+            }
+        }
+        
+        self.emptyTipButton.mouseMoveCallback = {[unowned self] mouseEntered in
+            if mouseEntered {
+                let tipString = NSLocalizedString("Each use of the AI tools costs 1 credit.", comment: "")
+          
+                let popViewController = KMToolbarItemPopViewController.init()
+                if self.popOver == nil {
+                    self.popOver = NSPopover.init()
+                }
+                self.popOver.contentViewController = popViewController
+                self.popOver.animates = false
+                self.popOver.behavior = .semitransient
+                self.popOver.contentSize = (popViewController.view.frame.size)
+                popViewController.updateWithHelpTip(helpTip: tipString)
+                self.popOver.show(relativeTo: self.emptyTipButton.frame, of: self.emptyTipButton.superview!, preferredEdge: .maxY)
+            } else {
+                self.popOver.close()
+            }
+        }
+        
+    }
+    
+    
+    
+    func updateEmptyCreditViewUI() -> Void {
+        self.emptyContendBox.cornerRadius = 8
+        if KMAppearance.isDarkMode() {
+            self.emptyContendBox.fillColor = NSColor(red: 0, green: 0, blue: 0, alpha: 0.4)
+        } else {
+            self.emptyContendBox.fillColor = NSColor(red: 249/255, green: 247/255, blue: 250/255, alpha: 1)
+        }
+        self.emptyTitleLabel.textColor = KMAppearance.KMColor_Layout_H0()
+        self.emptyBuyNowLabel.textColor = NSColor.white
+        self.emptyBuyNowBox.fillColor = NSColor.clear
+        
+        self.emptyBuyNowBox.wantsLayer = true
+        self.emptyBuyNowBox.layer?.cornerRadius = 20
+        self.emptyBuyNowBox.layer?.masksToBounds = true
+        
+        self.emptyBuyNowBtn.wantsLayer = true
+        self.emptyBuyNowBtn.layer?.backgroundColor = NSColor.clear.cgColor
+        self.emptyBuyNowBtn.mouseMoveCallback = {[unowned self] mouseEntered in
+            if mouseEntered {
+                self.emptyBuyNowBtn.layer?.backgroundColor = NSColor.white.withAlphaComponent(0.2).cgColor
+            } else {
+                self.emptyBuyNowBtn.layer?.backgroundColor = NSColor.clear.cgColor
+            }
+        }
+        
+        self.emptyTitleLabel.font = NSFont.SFProTextSemiboldFont(14)
+        self.emptyBuyNowLabel.font = NSFont.UbuntuMediumFontWithSize(16)
+        self.emptyRestoreBtn.font = NSFont.SFProTextRegularFont(14)
+        
+        self.emptyTitleLabel.stringValue = NSLocalizedString("You have no credit", comment: "")
+        self.emptyBuyNowLabel.stringValue = NSLocalizedString("Buy Now", comment: "")
+        self.emptyRestoreBtn.title = NSLocalizedString("Enter AI License", comment: "")
+        
+        self.emptyRestoreBtn.setTitleColor(KMAppearance.KMColor_Interactive_M0())
+        self.emptyRestoreBtn.mouseMoveCallback = {[unowned self] mouseEntered in
+            if mouseEntered {
+                self.emptyRestoreBtn.setTitleColor(KMAppearance.KMColor_Interactive_M1())
+            } else {
+                self.emptyRestoreBtn.setTitleColor(KMAppearance.KMColor_Interactive_M0())
+            }
+        }
+        
+    }
+    
+    func updateCreditsViewUI() -> Void {
+        self.creditsInfoBox.cornerRadius = 8
+        self.creditsContendBox.fillColor = NSColor.clear
+        self.alreadySeplineView.wantsLayer = true
+        
+        if KMAppearance.isDarkMode() {
+            self.creditsInfoBox.fillColor = NSColor(red: 0, green: 0, blue: 0, alpha: 0.4)
+            self.creditsTitleLabel.textColor = NSColor.white
+            self.alreadCreditBox.fillColor = NSColor(red: 155/255, green: 83/255, blue: 1, alpha: 0.3)
+            self.alreadySeplineView.layer?.backgroundColor = NSColor.white.withAlphaComponent(0.1).cgColor
+        } else {
+            self.creditsInfoBox.fillColor = NSColor(red: 249/255, green: 247/255, blue: 250/255, alpha: 1)
+            self.creditsTitleLabel.textColor = KMAppearance.KMColor_Layout_H0()
+            self.alreadCreditBox.fillColor = NSColor(red: 155/255, green: 83/255, blue: 1, alpha: 0.1)
+            self.alreadySeplineView.layer?.backgroundColor = NSColor.black.withAlphaComponent(0.05).cgColor
+        }
+        
+        self.creditBuyNowBtn.wantsLayer = true
+        self.creditBuyNowBtn.layer?.backgroundColor = NSColor.clear.cgColor
+        self.creditBuyNowBtn.mouseMoveCallback = {[unowned self] mouseEntered in
+            if mouseEntered {
+                self.creditBuyNowBtn.layer?.backgroundColor = NSColor.white.withAlphaComponent(0.2).cgColor
+            } else {
+                self.creditBuyNowBtn.layer?.backgroundColor = NSColor.clear.cgColor
+            }
+        }
+            
+        self.creditsTitleLabel.font = NSFont.SFProTextSemiboldFont(14)
+        
+        self.validCreditLabel.font = NSFont.UbuntuBoldFontWithSize(32)
+        self.validCreditLabel.textColor = NSColor(red: 166/255, green: 102/255, blue: 1, alpha: 1)
+        self.totalCreditLabel.font = NSFont.UbuntuMediumFontWithSize(20)
+        self.totalCreditLabel.textColor = KMAppearance.KMColor_Layout_H2()
+        
+        self.alreadCreditBox.cornerRadius = 12
+        self.alreadCreditBox.borderWidth = 0
+        self.alreadyCreditLabel.font = NSFont.SFProTextRegularFont(13)
+        self.alreadyCreditLabel.textColor = KMAppearance.KMColor_Layout_H1()
+        
+        self.timeDescriptionInfoLabel.textColor = KMAppearance.KMColor_Status_Err()
+        self.timeDescriptionInfoLabel.font = NSFont.SFProTextRegularFont(13)
+        
+        self.dateInfoLabel.textColor = KMAppearance.KMColor_Layout_H2()
+        self.dateInfoLabel.font = NSFont.SFProTextRegularFont(12)
+        
+        self.creditsRestoreBtn.font = NSFont.SFProTextRegularFont(14)
+        self.creditsBuyNowBox.fillColor = NSColor.clear
+        self.creditsBuyNowBox.wantsLayer = true
+        self.creditsBuyNowBox.layer?.cornerRadius = 18
+        self.creditsBuyNowBox.layer?.masksToBounds = true
+        self.creditsBuyNowLabel.font = NSFont.UbuntuMediumFontWithSize(14)
+        self.creditsBuyNowLabel.textColor = NSColor.white
+
+        self.creditsRestoreBtn.setTitleColor(KMAppearance.KMColor_Interactive_M0())
+        
+#if VERSION_DMG
+        
+#else
+        if AIInfoManager.default().aiInfoValid == true {
+            self.creditsBuyNowBox.isHidden = true
+        } else {
+            self.creditsBuyNowBox.isHidden = false
+        }
+#endif
+        
+    }
+    
+    func updateCreditsViewInfo() -> Void {
+        let aiInfo: AIInfo = AIInfoManager.default().aiInfo
+        if aiInfo.infoDict.keys.count == 0 {
+            return
+        }
+        self.validCreditLabel.stringValue = String(format: "%d", aiInfo.totalToken-aiInfo.usedTimes)
+        self.totalCreditLabel.stringValue = "/" + String(format: "%d", aiInfo.totalToken)
+        
+        self.alreadyCreditLabel.stringValue = NSLocalizedString("Credits to be unlocked", comment: "") + ": 0"
+        
+        let leftDays = String(format: "%ld", aiInfo.remainingDays)
+        self.timeDescriptionInfoLabel.stringValue = String(format: NSLocalizedString("%@ days left on subscription", comment: ""), leftDays)
+        
+        let dateFormatter = DateFormatter.init()
+        dateFormatter.dateFormat = "yyyy.MM.dd"
+        let startDateStr = dateFormatter.string(from: aiInfo.startDate)
+        let endDateStr = dateFormatter.string(from: aiInfo.endDate)
+        self.dateInfoLabel.stringValue = startDateStr + " - " + endDateStr
+        
+        self.emptyContendBox.isHidden = true
+        self.creditsContendBox.isHidden = true
+        if AIInfoManager.default().aiInfoValid == true {
+            self.creditsContendBox.isHidden = false
+        } else {
+            self.emptyContendBox.isHidden = false
+        }
+    }
+    
+    //MARK: - IBAction
+    
+    @IBAction func newGuideAction(_ sender: Any) {
+        guard let callBack = self.guideHandle else {
+            return
+        }
+        callBack(self)
+    }
+    
+    @IBAction func purchaseAction(_ sender: KMButton) {
+        guard let callBack = self.purchaseHandle else {
+            return
+        }
+        
+        let newStatus: Bool = KMCloudServer.isConnectionAvailable()
+        if !newStatus {
+            let alert = NSAlert()
+            alert.alertStyle = .critical
+            alert.messageText = NSLocalizedString("Please make sure your internet connection is available.", comment: "")
+            alert.runModal()
+            return
+        }
+        callBack(self)
+    }
+    
+    @IBAction func enterLicenseAction(_ sender: KMButton) {
+        guard let callBack = self.enterLicenseHandle else {
+            return
+        }
+        callBack(self)
+    }
+    
+    @objc func aiStatusInfoChangeNoti() {
+       DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 0.3) {
+           self.updateCreditsViewInfo()
+       }
+   }
+}

+ 480 - 0
PDF Office/PDF Master/Class/AIInfo/AIUserInfoController/AIUserInfoController.xib

@@ -0,0 +1,480 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="22505" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
+    <dependencies>
+        <deployment identifier="macosx"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="22505"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <customObject id="-2" userLabel="File's Owner" customClass="AIUserInfoController" customModule="PDF_Reader_Pro" customModuleProvider="target">
+            <connections>
+                <outlet property="alreadCreditBox" destination="wL8-6H-Mln" id="B6C-z9-vOk"/>
+                <outlet property="alreadyCreditLabel" destination="hIB-Pj-wes" id="7Wh-43-bF9"/>
+                <outlet property="alreadySeplineView" destination="ZeS-eE-6tK" id="1KT-eo-COK"/>
+                <outlet property="contendBox" destination="akw-x7-mRX" id="6Oq-Dr-0is"/>
+                <outlet property="creditBuyNowBtn" destination="hpn-rW-lvk" id="2hn-Oh-eND"/>
+                <outlet property="creditTipBtn" destination="KZA-Yp-MhB" id="xqD-in-37v"/>
+                <outlet property="creditsBuyNowBox" destination="3ww-dO-Gu1" id="kzF-yB-kG5"/>
+                <outlet property="creditsBuyNowLabel" destination="8uq-YH-AiO" id="lyc-pL-Man"/>
+                <outlet property="creditsContendBox" destination="cRO-N6-ubp" id="SNv-MM-M8C"/>
+                <outlet property="creditsInfoBox" destination="mXw-IG-R8O" id="RhP-4S-LBY"/>
+                <outlet property="creditsRestoreBtn" destination="wbW-uf-Ro8" id="aLM-ax-1Gi"/>
+                <outlet property="creditsTitleLabel" destination="YdG-Tk-l0v" id="qI0-OA-lxO"/>
+                <outlet property="dateInfoLabel" destination="Zbs-pI-MoH" id="nq3-wI-nNZ"/>
+                <outlet property="emptyBuyNowBox" destination="snp-Q1-6ab" id="fg5-08-YCs"/>
+                <outlet property="emptyBuyNowBtn" destination="xzZ-jv-ubi" id="4eH-f6-98P"/>
+                <outlet property="emptyBuyNowLabel" destination="48H-5O-CmE" id="OWg-qN-1Tn"/>
+                <outlet property="emptyContendBox" destination="QyA-j8-ZVh" id="SxF-tN-b1j"/>
+                <outlet property="emptyRestoreBtn" destination="63e-3m-4As" id="uO4-AO-D74"/>
+                <outlet property="emptyTipButton" destination="uJ1-HE-KIh" id="dbE-HW-Tvg"/>
+                <outlet property="emptyTitleLabel" destination="8m3-0H-Jn2" id="lad-b4-DEX"/>
+                <outlet property="timeDescriptionInfoLabel" destination="s7r-9O-yQi" id="0uc-fz-Gpu"/>
+                <outlet property="titleLabel" destination="xGE-Qj-Kve" id="JCg-2L-25z"/>
+                <outlet property="totalCreditLabel" destination="DHJ-4U-157" id="fcK-vm-PZs"/>
+                <outlet property="validCreditLabel" destination="8Ut-gB-hN2" id="HGH-Ax-i27"/>
+                <outlet property="view" destination="Hz6-mo-xeY" id="0bl-1N-x8E"/>
+                <outlet property="whatNewlabel" destination="dmF-GY-xqk" id="vjx-pq-HF9"/>
+            </connections>
+        </customObject>
+        <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
+        <customObject id="-3" userLabel="Application" customClass="NSObject"/>
+        <customView id="Hz6-mo-xeY">
+            <rect key="frame" x="0.0" y="0.0" width="400" height="358"/>
+            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+            <subviews>
+                <box fixedFrame="YES" boxType="custom" borderWidth="0.0" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="akw-x7-mRX">
+                    <rect key="frame" x="0.0" y="0.0" width="400" height="358"/>
+                    <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+                    <view key="contentView" id="BZ8-nc-OcW">
+                        <rect key="frame" x="0.0" y="0.0" width="400" height="358"/>
+                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                        <subviews>
+                            <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="xGE-Qj-Kve">
+                                <rect key="frame" x="18" y="322" width="52" height="16"/>
+                                <textFieldCell key="cell" lineBreakMode="clipping" title="AI Tools" id="EOB-Ii-UQk">
+                                    <font key="font" usesAppearanceFont="YES"/>
+                                    <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                    <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                </textFieldCell>
+                            </textField>
+                            <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="dmF-GY-xqk">
+                                <rect key="frame" x="345" y="322" width="37" height="16"/>
+                                <textFieldCell key="cell" lineBreakMode="clipping" title="Label" id="ra3-eU-09w">
+                                    <font key="font" usesAppearanceFont="YES"/>
+                                    <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                    <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                </textFieldCell>
+                            </textField>
+                            <button translatesAutoresizingMaskIntoConstraints="NO" id="hPi-Ml-o9F">
+                                <rect key="frame" x="347" y="322" width="33" height="16"/>
+                                <buttonCell key="cell" type="bevel" bezelStyle="rounded" alignment="center" imageScaling="proportionallyDown" inset="2" id="bc1-Vk-eFj">
+                                    <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                                    <font key="font" metaFont="system"/>
+                                </buttonCell>
+                                <connections>
+                                    <action selector="newGuideAction:" target="-2" id="cOD-5T-eoO"/>
+                                </connections>
+                            </button>
+                            <box boxType="custom" borderWidth="0.0" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="cRO-N6-ubp">
+                                <rect key="frame" x="20" y="20" width="360" height="282"/>
+                                <view key="contentView" id="sNJ-nU-DJp">
+                                    <rect key="frame" x="0.0" y="0.0" width="360" height="282"/>
+                                    <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                                    <subviews>
+                                        <box boxType="custom" borderType="none" cornerRadius="5" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="mXw-IG-R8O" customClass="KMBox">
+                                            <rect key="frame" x="0.0" y="56" width="360" height="226"/>
+                                            <view key="contentView" id="xxJ-j6-3lD">
+                                                <rect key="frame" x="0.0" y="0.0" width="360" height="226"/>
+                                                <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                                                <subviews>
+                                                    <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="YdG-Tk-l0v">
+                                                        <rect key="frame" x="130" y="185" width="101" height="17"/>
+                                                        <textFieldCell key="cell" lineBreakMode="clipping" title="available credit" id="PVf-Mg-fDX">
+                                                            <font key="font" metaFont="system" size="14"/>
+                                                            <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                                            <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                                        </textFieldCell>
+                                                    </textField>
+                                                    <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="3no-nh-cQE">
+                                                        <rect key="frame" x="233" y="186" width="16" height="16"/>
+                                                        <constraints>
+                                                            <constraint firstAttribute="width" constant="16" id="XWU-mS-QDn"/>
+                                                            <constraint firstAttribute="height" constant="16" id="nfu-nO-EdR"/>
+                                                        </constraints>
+                                                        <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="aiInfoIcon" id="4G3-ba-ndv"/>
+                                                    </imageView>
+                                                    <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="KZA-Yp-MhB" customClass="KMButton">
+                                                        <rect key="frame" x="233" y="186" width="16" height="16"/>
+                                                        <buttonCell key="cell" type="bevel" bezelStyle="rounded" alignment="center" imageScaling="proportionallyDown" inset="2" id="tg2-1W-zFB">
+                                                            <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                                                            <font key="font" metaFont="system"/>
+                                                        </buttonCell>
+                                                    </button>
+                                                    <customView translatesAutoresizingMaskIntoConstraints="NO" id="tLy-1k-P2i">
+                                                        <rect key="frame" x="144" y="130" width="72" height="55"/>
+                                                        <subviews>
+                                                            <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="8Ut-gB-hN2">
+                                                                <rect key="frame" x="-2" y="9" width="46" height="38"/>
+                                                                <textFieldCell key="cell" lineBreakMode="clipping" title="50" id="XHY-3k-AmS">
+                                                                    <font key="font" metaFont="systemBold" size="32"/>
+                                                                    <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                                                    <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                                                </textFieldCell>
+                                                            </textField>
+                                                            <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="DHJ-4U-157">
+                                                                <rect key="frame" x="40" y="16" width="34" height="24"/>
+                                                                <textFieldCell key="cell" lineBreakMode="clipping" title="/50" id="U9f-eJ-r2m">
+                                                                    <font key="font" metaFont="system" size="20"/>
+                                                                    <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                                                    <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                                                </textFieldCell>
+                                                            </textField>
+                                                        </subviews>
+                                                        <constraints>
+                                                            <constraint firstItem="8Ut-gB-hN2" firstAttribute="leading" secondItem="tLy-1k-P2i" secondAttribute="leading" id="8FQ-DX-N3S"/>
+                                                            <constraint firstItem="DHJ-4U-157" firstAttribute="centerY" secondItem="tLy-1k-P2i" secondAttribute="centerY" id="bVQ-BJ-3uX"/>
+                                                            <constraint firstItem="DHJ-4U-157" firstAttribute="leading" secondItem="8Ut-gB-hN2" secondAttribute="trailing" id="eKP-eb-WPT"/>
+                                                            <constraint firstItem="8Ut-gB-hN2" firstAttribute="centerY" secondItem="tLy-1k-P2i" secondAttribute="centerY" id="tpw-1a-Fwf"/>
+                                                            <constraint firstAttribute="trailing" secondItem="DHJ-4U-157" secondAttribute="trailing" id="ykL-ce-SQ5"/>
+                                                        </constraints>
+                                                    </customView>
+                                                    <box boxType="custom" cornerRadius="4" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="wL8-6H-Mln">
+                                                        <rect key="frame" x="113" y="106" width="135" height="24"/>
+                                                        <view key="contentView" id="ndM-ZU-LBf">
+                                                            <rect key="frame" x="1" y="1" width="133" height="22"/>
+                                                            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                                                            <subviews>
+                                                                <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="hIB-Pj-wes">
+                                                                    <rect key="frame" x="12" y="3" width="109" height="16"/>
+                                                                    <textFieldCell key="cell" lineBreakMode="clipping" title="Total credits: 100" id="tiG-j0-XJN">
+                                                                        <font key="font" usesAppearanceFont="YES"/>
+                                                                        <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                                                        <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                                                    </textFieldCell>
+                                                                </textField>
+                                                            </subviews>
+                                                            <constraints>
+                                                                <constraint firstAttribute="trailing" secondItem="hIB-Pj-wes" secondAttribute="trailing" constant="14" id="1XP-tc-25E"/>
+                                                                <constraint firstItem="hIB-Pj-wes" firstAttribute="leading" secondItem="ndM-ZU-LBf" secondAttribute="leading" constant="14" id="I6S-RI-gB1"/>
+                                                                <constraint firstItem="hIB-Pj-wes" firstAttribute="centerY" secondItem="ndM-ZU-LBf" secondAttribute="centerY" id="jw2-V3-f79"/>
+                                                            </constraints>
+                                                        </view>
+                                                        <constraints>
+                                                            <constraint firstAttribute="height" constant="24" id="Skt-Vg-3kw"/>
+                                                        </constraints>
+                                                    </box>
+                                                    <customView translatesAutoresizingMaskIntoConstraints="NO" id="ZeS-eE-6tK">
+                                                        <rect key="frame" x="16" y="81" width="328" height="1"/>
+                                                        <constraints>
+                                                            <constraint firstAttribute="height" constant="1" id="eGL-K0-3R2"/>
+                                                        </constraints>
+                                                    </customView>
+                                                    <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="s7r-9O-yQi">
+                                                        <rect key="frame" x="68" y="44" width="224" height="16"/>
+                                                        <textFieldCell key="cell" lineBreakMode="clipping" title="30 days left before the subscription." id="DmZ-Bv-4Ki">
+                                                            <font key="font" usesAppearanceFont="YES"/>
+                                                            <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                                            <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                                        </textFieldCell>
+                                                    </textField>
+                                                    <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="doF-hX-U7U">
+                                                        <rect key="frame" x="99" y="25" width="12" height="12"/>
+                                                        <constraints>
+                                                            <constraint firstAttribute="height" constant="12" id="G5B-3Y-NOf"/>
+                                                            <constraint firstAttribute="width" constant="12" id="XuW-DN-Unx"/>
+                                                        </constraints>
+                                                        <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="AItime" id="Mxf-cB-HpL"/>
+                                                    </imageView>
+                                                    <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Zbs-pI-MoH">
+                                                        <rect key="frame" x="113" y="24" width="155" height="16"/>
+                                                        <textFieldCell key="cell" lineBreakMode="clipping" title="2024.01.20 - 2024.02.20" id="s1i-rh-7sB">
+                                                            <font key="font" usesAppearanceFont="YES"/>
+                                                            <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                                            <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                                        </textFieldCell>
+                                                    </textField>
+                                                </subviews>
+                                                <constraints>
+                                                    <constraint firstItem="Zbs-pI-MoH" firstAttribute="leading" secondItem="doF-hX-U7U" secondAttribute="trailing" constant="4" id="0Ss-nd-CcE"/>
+                                                    <constraint firstItem="3no-nh-cQE" firstAttribute="bottom" secondItem="KZA-Yp-MhB" secondAttribute="bottom" id="2Nb-WB-tZ2"/>
+                                                    <constraint firstItem="3no-nh-cQE" firstAttribute="leading" secondItem="YdG-Tk-l0v" secondAttribute="trailing" constant="4" id="BT1-8b-a1w"/>
+                                                    <constraint firstItem="YdG-Tk-l0v" firstAttribute="centerX" secondItem="xxJ-j6-3lD" secondAttribute="centerX" id="C9o-Uv-tdz"/>
+                                                    <constraint firstItem="wL8-6H-Mln" firstAttribute="top" secondItem="tLy-1k-P2i" secondAttribute="bottom" id="CIa-ea-Wp6"/>
+                                                    <constraint firstItem="3no-nh-cQE" firstAttribute="leading" secondItem="KZA-Yp-MhB" secondAttribute="leading" id="Cbz-nl-R7z"/>
+                                                    <constraint firstItem="Zbs-pI-MoH" firstAttribute="centerX" secondItem="xxJ-j6-3lD" secondAttribute="centerX" constant="10" id="KNx-K1-AIu"/>
+                                                    <constraint firstItem="ZeS-eE-6tK" firstAttribute="top" secondItem="wL8-6H-Mln" secondAttribute="bottom" constant="24" id="LXv-e1-fc2"/>
+                                                    <constraint firstItem="wL8-6H-Mln" firstAttribute="centerX" secondItem="xxJ-j6-3lD" secondAttribute="centerX" id="Lxq-u0-Jyj"/>
+                                                    <constraint firstItem="s7r-9O-yQi" firstAttribute="centerX" secondItem="xxJ-j6-3lD" secondAttribute="centerX" id="R4O-o5-IMd"/>
+                                                    <constraint firstItem="ZeS-eE-6tK" firstAttribute="leading" secondItem="xxJ-j6-3lD" secondAttribute="leading" constant="16" id="SXQ-dJ-94B"/>
+                                                    <constraint firstItem="tLy-1k-P2i" firstAttribute="top" secondItem="YdG-Tk-l0v" secondAttribute="bottom" id="U6j-Tg-ZBV"/>
+                                                    <constraint firstItem="wL8-6H-Mln" firstAttribute="top" secondItem="xxJ-j6-3lD" secondAttribute="top" constant="96" id="VHP-6h-LDc"/>
+                                                    <constraint firstItem="3no-nh-cQE" firstAttribute="top" secondItem="KZA-Yp-MhB" secondAttribute="top" id="Vd5-ND-Xhr"/>
+                                                    <constraint firstAttribute="bottom" secondItem="Zbs-pI-MoH" secondAttribute="bottom" constant="24" id="YHz-If-r05"/>
+                                                    <constraint firstItem="Zbs-pI-MoH" firstAttribute="centerY" secondItem="doF-hX-U7U" secondAttribute="centerY" constant="-1" id="aEc-GT-Mk8"/>
+                                                    <constraint firstItem="YdG-Tk-l0v" firstAttribute="top" secondItem="xxJ-j6-3lD" secondAttribute="top" constant="24" id="iKS-ve-G3n"/>
+                                                    <constraint firstItem="tLy-1k-P2i" firstAttribute="centerX" secondItem="xxJ-j6-3lD" secondAttribute="centerX" id="kA3-ke-FXk"/>
+                                                    <constraint firstAttribute="trailing" secondItem="ZeS-eE-6tK" secondAttribute="trailing" constant="16" id="lXt-Ob-eJ0"/>
+                                                    <constraint firstItem="Zbs-pI-MoH" firstAttribute="top" secondItem="s7r-9O-yQi" secondAttribute="bottom" constant="4" id="nzZ-hR-XdD"/>
+                                                    <constraint firstItem="3no-nh-cQE" firstAttribute="trailing" secondItem="KZA-Yp-MhB" secondAttribute="trailing" id="wUc-wh-HId"/>
+                                                    <constraint firstItem="3no-nh-cQE" firstAttribute="centerY" secondItem="YdG-Tk-l0v" secondAttribute="centerY" id="wbw-kY-05Z"/>
+                                                </constraints>
+                                            </view>
+                                            <constraints>
+                                                <constraint firstAttribute="height" constant="226" id="0pD-T0-Tbz"/>
+                                                <constraint firstAttribute="width" constant="360" id="ix4-MV-gpm"/>
+                                            </constraints>
+                                        </box>
+                                        <box boxType="custom" borderType="none" borderWidth="0.0" cornerRadius="5" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="3ww-dO-Gu1" customClass="KMBox">
+                                            <rect key="frame" x="242" y="0.0" width="118" height="36"/>
+                                            <view key="contentView" id="LLE-he-zen">
+                                                <rect key="frame" x="0.0" y="0.0" width="118" height="36"/>
+                                                <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                                                <subviews>
+                                                    <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="htR-r3-NV0">
+                                                        <rect key="frame" x="0.0" y="0.0" width="118" height="36"/>
+                                                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                                                        <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="axesIndependently" image="AICreditIcon" id="I0p-5s-QZA"/>
+                                                    </imageView>
+                                                    <customView translatesAutoresizingMaskIntoConstraints="NO" id="4On-El-gaN">
+                                                        <rect key="frame" x="17" y="6" width="85" height="24"/>
+                                                        <subviews>
+                                                            <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="8uq-YH-AiO">
+                                                                <rect key="frame" x="22" y="4" width="65" height="16"/>
+                                                                <textFieldCell key="cell" lineBreakMode="clipping" alignment="center" title="Buy Now" id="Fl6-Ap-a3P">
+                                                                    <font key="font" metaFont="systemBold"/>
+                                                                    <color key="textColor" red="0.99999600649999998" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                                                                    <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                                                </textFieldCell>
+                                                            </textField>
+                                                            <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="sez-M4-Rpa">
+                                                                <rect key="frame" x="0.0" y="2" width="20" height="20"/>
+                                                                <constraints>
+                                                                    <constraint firstAttribute="width" constant="20" id="IcR-vb-to3"/>
+                                                                    <constraint firstAttribute="height" constant="20" id="WEl-yT-sBw"/>
+                                                                </constraints>
+                                                                <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="axesIndependently" image="aiIconA" id="vI0-4b-Whx"/>
+                                                            </imageView>
+                                                        </subviews>
+                                                        <constraints>
+                                                            <constraint firstItem="sez-M4-Rpa" firstAttribute="centerY" secondItem="4On-El-gaN" secondAttribute="centerY" id="AiX-se-eck"/>
+                                                            <constraint firstItem="8uq-YH-AiO" firstAttribute="centerY" secondItem="4On-El-gaN" secondAttribute="centerY" id="DX3-o8-siq"/>
+                                                            <constraint firstItem="sez-M4-Rpa" firstAttribute="leading" secondItem="4On-El-gaN" secondAttribute="leading" id="Gl0-RD-D4S"/>
+                                                            <constraint firstItem="8uq-YH-AiO" firstAttribute="leading" secondItem="sez-M4-Rpa" secondAttribute="trailing" constant="4" id="PQ9-vq-Kj7"/>
+                                                            <constraint firstAttribute="trailing" secondItem="8uq-YH-AiO" secondAttribute="trailing" id="X07-02-QcF"/>
+                                                            <constraint firstAttribute="height" constant="24" id="mS9-yT-qMp"/>
+                                                        </constraints>
+                                                    </customView>
+                                                    <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="hpn-rW-lvk" customClass="KMButton">
+                                                        <rect key="frame" x="0.0" y="0.0" width="118" height="36"/>
+                                                        <buttonCell key="cell" type="bevel" bezelStyle="rounded" alignment="center" imageScaling="proportionallyDown" inset="2" id="iFS-6Q-YrJ">
+                                                            <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                                                            <font key="font" metaFont="system"/>
+                                                        </buttonCell>
+                                                        <connections>
+                                                            <action selector="purchaseAction:" target="-2" id="7dF-oZ-tkl"/>
+                                                        </connections>
+                                                    </button>
+                                                </subviews>
+                                                <constraints>
+                                                    <constraint firstItem="hpn-rW-lvk" firstAttribute="top" secondItem="LLE-he-zen" secondAttribute="top" id="0z2-09-Yyq"/>
+                                                    <constraint firstItem="hpn-rW-lvk" firstAttribute="leading" secondItem="LLE-he-zen" secondAttribute="leading" id="1vI-fo-nhG"/>
+                                                    <constraint firstItem="4On-El-gaN" firstAttribute="centerY" secondItem="LLE-he-zen" secondAttribute="centerY" id="HhG-F4-xL0"/>
+                                                    <constraint firstItem="4On-El-gaN" firstAttribute="centerX" secondItem="LLE-he-zen" secondAttribute="centerX" id="PfS-Yd-TM8"/>
+                                                    <constraint firstAttribute="trailing" secondItem="hpn-rW-lvk" secondAttribute="trailing" id="XQO-vU-Ind"/>
+                                                    <constraint firstAttribute="bottom" secondItem="hpn-rW-lvk" secondAttribute="bottom" id="yVe-Ik-Jw3"/>
+                                                </constraints>
+                                            </view>
+                                            <constraints>
+                                                <constraint firstAttribute="height" constant="36" id="PSo-4a-3aC"/>
+                                                <constraint firstAttribute="width" constant="118" id="ugU-wL-4nj"/>
+                                            </constraints>
+                                            <color key="fillColor" red="0.0" green="0.53333333329999999" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                                        </box>
+                                        <button focusRingType="none" allowsExpansionToolTips="YES" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="wbW-uf-Ro8" customClass="HyperLinkButton">
+                                            <rect key="frame" x="0.0" y="10" width="51" height="16"/>
+                                            <buttonCell key="cell" type="bevel" title="Restore" bezelStyle="rounded" alignment="left" controlSize="mini" lineBreakMode="truncatingTail" focusRingType="none" imageScaling="proportionallyDown" inset="2" id="qn1-ij-tJC">
+                                                <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                                                <font key="font" metaFont="system"/>
+                                            </buttonCell>
+                                        </button>
+                                    </subviews>
+                                    <constraints>
+                                        <constraint firstItem="mXw-IG-R8O" firstAttribute="top" secondItem="sNJ-nU-DJp" secondAttribute="top" id="3vk-E8-eUD"/>
+                                        <constraint firstItem="3ww-dO-Gu1" firstAttribute="centerY" secondItem="wbW-uf-Ro8" secondAttribute="centerY" id="SPg-jU-921"/>
+                                        <constraint firstAttribute="bottom" secondItem="3ww-dO-Gu1" secondAttribute="bottom" id="g2x-AN-Jkw"/>
+                                        <constraint firstItem="wbW-uf-Ro8" firstAttribute="leading" secondItem="sNJ-nU-DJp" secondAttribute="leading" id="gCf-eY-ut6"/>
+                                        <constraint firstItem="mXw-IG-R8O" firstAttribute="centerX" secondItem="sNJ-nU-DJp" secondAttribute="centerX" id="hDa-ob-oxg"/>
+                                        <constraint firstAttribute="trailing" secondItem="3ww-dO-Gu1" secondAttribute="trailing" id="l3L-WG-dnL"/>
+                                    </constraints>
+                                </view>
+                                <constraints>
+                                    <constraint firstAttribute="width" constant="360" id="BDG-jc-9pQ"/>
+                                    <constraint firstAttribute="height" constant="282" id="Ea7-xg-zQv"/>
+                                </constraints>
+                                <color key="fillColor" red="0.59999999999999998" green="0.59999999999999998" blue="0.59999999999999998" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                            </box>
+                            <box boxType="custom" borderWidth="0.0" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="QyA-j8-ZVh">
+                                <rect key="frame" x="20" y="20" width="360" height="282"/>
+                                <view key="contentView" id="2nJ-sy-bTt">
+                                    <rect key="frame" x="0.0" y="0.0" width="360" height="282"/>
+                                    <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                                    <subviews>
+                                        <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="8m3-0H-Jn2">
+                                            <rect key="frame" x="162" y="242" width="37" height="16"/>
+                                            <textFieldCell key="cell" lineBreakMode="clipping" title="Label" id="QoW-Rw-Xdv">
+                                                <font key="font" usesAppearanceFont="YES"/>
+                                                <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                                                <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                            </textFieldCell>
+                                        </textField>
+                                        <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="nLU-NK-nXE">
+                                            <rect key="frame" x="201" y="242" width="16" height="16"/>
+                                            <constraints>
+                                                <constraint firstAttribute="height" constant="16" id="DpJ-7K-ZO1"/>
+                                                <constraint firstAttribute="width" constant="16" id="bKm-M5-Uxd"/>
+                                            </constraints>
+                                            <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="aiInfoIcon" id="eqp-qq-p6A"/>
+                                        </imageView>
+                                        <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="uJ1-HE-KIh" customClass="KMButton">
+                                            <rect key="frame" x="201" y="242" width="16" height="16"/>
+                                            <buttonCell key="cell" type="bevel" bezelStyle="rounded" alignment="center" imageScaling="proportionallyDown" inset="2" id="KDg-DF-Pdl">
+                                                <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                                                <font key="font" metaFont="system"/>
+                                            </buttonCell>
+                                        </button>
+                                        <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="Py5-hh-BJf">
+                                            <rect key="frame" x="124" y="110" width="112" height="112"/>
+                                            <constraints>
+                                                <constraint firstAttribute="height" constant="112" id="vKz-Fx-IGE"/>
+                                                <constraint firstAttribute="width" constant="112" id="ycW-6c-h2d"/>
+                                            </constraints>
+                                            <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="creditEmptyIcon" id="n3g-vl-CxG"/>
+                                        </imageView>
+                                        <box boxType="custom" borderType="none" borderWidth="0.0" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="snp-Q1-6ab" customClass="KMBox">
+                                            <rect key="frame" x="80" y="54" width="200" height="40"/>
+                                            <view key="contentView" id="lFO-VI-aY7">
+                                                <rect key="frame" x="0.0" y="0.0" width="200" height="40"/>
+                                                <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                                                <subviews>
+                                                    <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="aaS-KY-pHg">
+                                                        <rect key="frame" x="0.0" y="0.0" width="200" height="40"/>
+                                                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                                                        <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="axesIndependently" image="AICreditIcon" id="VlG-rw-qYZ"/>
+                                                    </imageView>
+                                                    <customView translatesAutoresizingMaskIntoConstraints="NO" id="c6r-bo-muF">
+                                                        <rect key="frame" x="58" y="8" width="85" height="24"/>
+                                                        <subviews>
+                                                            <textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="48H-5O-CmE">
+                                                                <rect key="frame" x="22" y="4" width="65" height="16"/>
+                                                                <textFieldCell key="cell" lineBreakMode="clipping" alignment="center" title="Buy Now" id="wtD-B2-Z4d">
+                                                                    <font key="font" metaFont="systemBold"/>
+                                                                    <color key="textColor" red="0.99999600649999998" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                                                                    <color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
+                                                                </textFieldCell>
+                                                            </textField>
+                                                            <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="TRd-R1-gKD">
+                                                                <rect key="frame" x="0.0" y="2" width="20" height="20"/>
+                                                                <constraints>
+                                                                    <constraint firstAttribute="width" constant="20" id="Xmm-ln-K8f"/>
+                                                                    <constraint firstAttribute="height" constant="20" id="tBe-om-aBx"/>
+                                                                </constraints>
+                                                                <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="axesIndependently" image="aiIconA" id="6Vf-IV-uFp"/>
+                                                            </imageView>
+                                                        </subviews>
+                                                        <constraints>
+                                                            <constraint firstItem="48H-5O-CmE" firstAttribute="leading" secondItem="TRd-R1-gKD" secondAttribute="trailing" constant="4" id="NsM-Vg-nFJ"/>
+                                                            <constraint firstItem="TRd-R1-gKD" firstAttribute="leading" secondItem="c6r-bo-muF" secondAttribute="leading" id="Pwg-Hy-IsA"/>
+                                                            <constraint firstAttribute="height" constant="24" id="d5h-EB-kTt"/>
+                                                            <constraint firstItem="TRd-R1-gKD" firstAttribute="centerY" secondItem="c6r-bo-muF" secondAttribute="centerY" id="ncu-HZ-7ob"/>
+                                                            <constraint firstItem="48H-5O-CmE" firstAttribute="centerY" secondItem="c6r-bo-muF" secondAttribute="centerY" id="oGb-rW-7ML"/>
+                                                            <constraint firstAttribute="trailing" secondItem="48H-5O-CmE" secondAttribute="trailing" id="whW-jY-Us2"/>
+                                                        </constraints>
+                                                    </customView>
+                                                    <button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="xzZ-jv-ubi" customClass="KMButton">
+                                                        <rect key="frame" x="0.0" y="0.0" width="200" height="40"/>
+                                                        <buttonCell key="cell" type="bevel" bezelStyle="rounded" alignment="center" imageScaling="proportionallyDown" inset="2" id="YcY-3Q-jtl">
+                                                            <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                                                            <font key="font" metaFont="system"/>
+                                                        </buttonCell>
+                                                        <connections>
+                                                            <action selector="purchaseAction:" target="-2" id="eEO-54-G2t"/>
+                                                        </connections>
+                                                    </button>
+                                                </subviews>
+                                                <constraints>
+                                                    <constraint firstAttribute="trailing" secondItem="xzZ-jv-ubi" secondAttribute="trailing" id="ITK-nk-Ac9"/>
+                                                    <constraint firstItem="xzZ-jv-ubi" firstAttribute="top" secondItem="lFO-VI-aY7" secondAttribute="top" id="RSm-qP-E4O"/>
+                                                    <constraint firstItem="c6r-bo-muF" firstAttribute="centerX" secondItem="lFO-VI-aY7" secondAttribute="centerX" id="TwT-TD-pOq"/>
+                                                    <constraint firstItem="xzZ-jv-ubi" firstAttribute="leading" secondItem="lFO-VI-aY7" secondAttribute="leading" id="hHy-cb-A5B"/>
+                                                    <constraint firstAttribute="bottom" secondItem="xzZ-jv-ubi" secondAttribute="bottom" id="wSh-WD-m3h"/>
+                                                    <constraint firstItem="c6r-bo-muF" firstAttribute="centerY" secondItem="lFO-VI-aY7" secondAttribute="centerY" id="zj1-ab-eRj"/>
+                                                </constraints>
+                                            </view>
+                                            <constraints>
+                                                <constraint firstAttribute="height" constant="40" id="0JM-mC-au6"/>
+                                                <constraint firstAttribute="width" constant="200" id="Kx8-bH-N8O"/>
+                                            </constraints>
+                                        </box>
+                                        <button focusRingType="none" allowsExpansionToolTips="YES" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="63e-3m-4As" customClass="HyperLinkButton">
+                                            <rect key="frame" x="129" y="30" width="102" height="16"/>
+                                            <buttonCell key="cell" type="bevel" title="Enter AI License" bezelStyle="rounded" alignment="left" controlSize="mini" lineBreakMode="truncatingTail" focusRingType="none" imageScaling="proportionallyDown" inset="2" id="G6c-X2-98h">
+                                                <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                                                <font key="font" metaFont="system"/>
+                                            </buttonCell>
+                                            <connections>
+                                                <action selector="enterLicenseAction:" target="-2" id="xv0-4s-1Ma"/>
+                                            </connections>
+                                        </button>
+                                    </subviews>
+                                    <constraints>
+                                        <constraint firstItem="63e-3m-4As" firstAttribute="centerX" secondItem="2nJ-sy-bTt" secondAttribute="centerX" id="06V-qs-CRK"/>
+                                        <constraint firstItem="nLU-NK-nXE" firstAttribute="leading" secondItem="8m3-0H-Jn2" secondAttribute="trailing" constant="4" id="2Ic-N3-tA9"/>
+                                        <constraint firstItem="Py5-hh-BJf" firstAttribute="top" secondItem="2nJ-sy-bTt" secondAttribute="top" constant="60" id="4X6-DP-xmv"/>
+                                        <constraint firstItem="63e-3m-4As" firstAttribute="top" secondItem="snp-Q1-6ab" secondAttribute="bottom" constant="8" id="8sn-5D-N0X"/>
+                                        <constraint firstItem="uJ1-HE-KIh" firstAttribute="top" secondItem="nLU-NK-nXE" secondAttribute="top" id="90G-nd-ZCE"/>
+                                        <constraint firstItem="uJ1-HE-KIh" firstAttribute="bottom" secondItem="nLU-NK-nXE" secondAttribute="bottom" id="9XB-5L-xCl"/>
+                                        <constraint firstItem="nLU-NK-nXE" firstAttribute="centerY" secondItem="8m3-0H-Jn2" secondAttribute="centerY" id="Fi9-0J-Rtc"/>
+                                        <constraint firstItem="snp-Q1-6ab" firstAttribute="centerX" secondItem="2nJ-sy-bTt" secondAttribute="centerX" id="Gfv-zC-HFy"/>
+                                        <constraint firstItem="8m3-0H-Jn2" firstAttribute="centerX" secondItem="2nJ-sy-bTt" secondAttribute="centerX" id="Nyo-cS-kSx"/>
+                                        <constraint firstItem="uJ1-HE-KIh" firstAttribute="trailing" secondItem="nLU-NK-nXE" secondAttribute="trailing" id="XWP-90-Qyx"/>
+                                        <constraint firstItem="Py5-hh-BJf" firstAttribute="centerX" secondItem="2nJ-sy-bTt" secondAttribute="centerX" id="jeh-Db-xTc"/>
+                                        <constraint firstItem="8m3-0H-Jn2" firstAttribute="top" secondItem="2nJ-sy-bTt" secondAttribute="top" constant="24" id="nxh-7K-0wk"/>
+                                        <constraint firstItem="snp-Q1-6ab" firstAttribute="top" secondItem="Py5-hh-BJf" secondAttribute="bottom" constant="16" id="siM-Nh-3d5"/>
+                                        <constraint firstItem="uJ1-HE-KIh" firstAttribute="leading" secondItem="nLU-NK-nXE" secondAttribute="leading" id="uYs-P0-PUK"/>
+                                    </constraints>
+                                </view>
+                                <constraints>
+                                    <constraint firstAttribute="width" constant="360" id="ILH-j7-aBf"/>
+                                    <constraint firstAttribute="height" constant="282" id="N0P-KM-zG9"/>
+                                </constraints>
+                                <color key="fillColor" red="0.0" green="0.53333333329999999" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                            </box>
+                        </subviews>
+                        <constraints>
+                            <constraint firstAttribute="trailing" secondItem="dmF-GY-xqk" secondAttribute="trailing" constant="20" id="1uP-8I-f3m"/>
+                            <constraint firstItem="dmF-GY-xqk" firstAttribute="trailing" secondItem="hPi-Ml-o9F" secondAttribute="trailing" id="3vV-zw-qGq"/>
+                            <constraint firstItem="xGE-Qj-Kve" firstAttribute="leading" secondItem="BZ8-nc-OcW" secondAttribute="leading" constant="20" id="ENt-6t-CMd"/>
+                            <constraint firstItem="dmF-GY-xqk" firstAttribute="top" secondItem="hPi-Ml-o9F" secondAttribute="top" id="HrF-ib-Jj9"/>
+                            <constraint firstItem="cRO-N6-ubp" firstAttribute="centerX" secondItem="BZ8-nc-OcW" secondAttribute="centerX" id="Omc-k4-5Tf"/>
+                            <constraint firstItem="dmF-GY-xqk" firstAttribute="top" secondItem="BZ8-nc-OcW" secondAttribute="top" constant="20" id="PWB-62-kC8"/>
+                            <constraint firstItem="QyA-j8-ZVh" firstAttribute="top" secondItem="BZ8-nc-OcW" secondAttribute="top" constant="56" id="SYn-d7-BIt"/>
+                            <constraint firstItem="cRO-N6-ubp" firstAttribute="top" secondItem="BZ8-nc-OcW" secondAttribute="top" constant="56" id="hjV-oq-TfZ"/>
+                            <constraint firstItem="QyA-j8-ZVh" firstAttribute="centerX" secondItem="BZ8-nc-OcW" secondAttribute="centerX" id="mi1-v0-KWR"/>
+                            <constraint firstItem="dmF-GY-xqk" firstAttribute="bottom" secondItem="hPi-Ml-o9F" secondAttribute="bottom" id="mys-Ez-Kng"/>
+                            <constraint firstItem="dmF-GY-xqk" firstAttribute="leading" secondItem="hPi-Ml-o9F" secondAttribute="leading" id="wIv-ML-dUE"/>
+                            <constraint firstItem="xGE-Qj-Kve" firstAttribute="top" secondItem="BZ8-nc-OcW" secondAttribute="top" constant="20" id="zqO-Bo-5nZ"/>
+                        </constraints>
+                    </view>
+                </box>
+            </subviews>
+            <point key="canvasLocation" x="107" y="-72"/>
+        </customView>
+    </objects>
+    <resources>
+        <image name="AICreditIcon" width="103" height="20"/>
+        <image name="AItime" width="12" height="12"/>
+        <image name="aiIconA" width="16" height="16"/>
+        <image name="aiInfoIcon" width="16" height="16"/>
+        <image name="creditEmptyIcon" width="112" height="112"/>
+    </resources>
+</document>

+ 654 - 0
PDF Office/PDF Master/Class/AIInfo/KMAIRequestServerManager.swift

@@ -0,0 +1,654 @@
+//
+//  KMAIRequestServerManager.swift
+//  PDF Reader Pro Edition
+//
+//  Created by wanjun on 2024/1/17.
+//
+
+import Cocoa
+import AFNetworking
+
+@objcMembers
+class ResultWrapper: NSObject {
+    var success: Bool = false
+//    var result: NSDictionary = [:]
+//    var message: String = ""
+//    var code : Int = 200
+//    var error: NSError?
+//    var state: KMAIRewritingState = .rewrite
+    var content: String = ""
+
+//    init(success: Bool, result: NSDictionary, message: String, code: Int, error: NSError? = nil, state: KMAIRewritingState) {
+//        self.success = success
+//        self.result = result
+//        self.message = message
+//        self.code = code
+//        self.error = error
+//        self.state = state
+//    }
+    init(success: Bool, content: String) {
+        self.success = success
+        self.content = content
+    }
+}
+
+@objc enum KMAIRewritingState : Int {
+    case rewrite = 0        // 重写
+    case correctTypos       // 纠错
+    case uploadTranslate    // 翻译上传文件
+    case fileTranslate      // 翻译文件
+    case textTranslate      // 翻译文本
+    case extractSummaryFile //摘要
+}
+
+@objc enum KMAIFileUploadState : Int {
+    case Translation = 0
+    case ExtractAbstract
+}
+
+//typealias KMRequestServerComplete = (_ success: Bool, _ result: Result?) -> Void
+
+@objcMembers class KMAIRequestServerManager: NSObject {
+    static let defaultManager = KMAIRequestServerManager()
+    typealias KMRequestServerComplete = (_ wrapper: ResultWrapper) -> Void
+    private var downFileUrl: String = "" // 文件翻译
+    
+    var fromLanguages: [String] = ["Automatic", "English", "Simplified Chinese", "Traditional Chinese", "Japanese", "Korean", "French", "Spanish", "Italian", "German", "Portuguese", "Russian", "Vietnamese", "Thai", "Arabic", "Greek", "Bulgarian", "Finnish", "Slovene", "Dutch", "Czech", "Swedish", "Polish", "Danish", "Romanian", "Hungarian"]
+    var toLanguages: [String] = ["English", "Simplified Chinese", "Traditional Chinese", "Japanese", "Korean", "French", "Spanish", "Italian", "German", "Portuguese", "Russian", "Vietnamese", "Thai", "Arabic", "Greek", "Bulgarian", "Finnish", "Slovene", "Dutch", "Czech", "Swedish", "Polish", "Danish", "Romanian", "Hungarian"]
+    
+    // MARK: AI Action (public)
+    
+    func aiAction(content: String, state: KMAIRewritingState, from: String = "auto", to: String = "en", complete: @escaping KMRequestServerComplete) {
+        if state == .rewrite || state == .correctTypos {  //重写 && 纠错
+            aiRewriting(content: content, state: state, complete: complete)
+        } else if state == .uploadTranslate || state == .fileTranslate {    // 上传文件 || 文件翻译
+            aiTranslationFileUpload(file: content, complete: { [unowned self] wrapper in
+                let success: Bool = wrapper.success
+                let fileKey = wrapper.content
+                if success {
+                    aiTranslationFileTranslateHandle(fileKey: fileKey, from: languageAbbreviation(from), to: languageAbbreviation(to), complete: complete)
+                } else {
+                    complete(ResultWrapper(success: success, content: fileKey))
+                }
+            })
+        } else if state == .textTranslate { // 文本翻译
+            aiTranslationTextTrans(q: content, from: languageAbbreviation(from), to: languageAbbreviation(to), complete: complete)
+        } else if state == .extractSummaryFile {    // 提取摘要
+            extractSummaryFile(file: content, complete: complete)
+        }
+    }
+    
+    // MARK: Private
+    
+    private func uuid() -> String {
+        return GetHardwareUUID()!
+    }
+    
+    private func platform() -> String {
+        var platform = "DMG"
+#if VERSION_DMG
+        platform = "DMG"
+#else
+        platform = "AiStore"
+#endif
+        return platform
+    }
+    
+    private func app_name() -> String {
+        var bundleID: String!
+        bundleID = Bundle.main.object(forInfoDictionaryKey: "CFBundleIdentifier") as! String
+        return bundleID;
+    }
+    
+    private func downloadFile(filePath: String, downFileName: String) -> Void {
+        self.downFileUrl = ""
+        guard let fileURL = URL(string: filePath) else {
+            let alert = NSAlert()
+            alert.alertStyle = .critical
+            alert.messageText = NSLocalizedString("Invalid file link", comment: "")
+            alert.runModal()
+
+            return
+        }
+        let destinationURL = FileManager.default.temporaryDirectory.appendingPathComponent(downFileName)
+        if FileManager.default.fileExists(atPath: destinationURL.path) {
+            do {
+                try FileManager.default.removeItem(at: destinationURL)
+                print("删除旧文件成功")
+            } catch {
+                print("删除旧文件失败:\(error)")
+            }
+        }
+        let sessionConfiguration = URLSessionConfiguration.default
+        let session = URLSession(configuration: sessionConfiguration)
+        let downloadTask = session.downloadTask(with: fileURL) { (tempLocalURL, response, error) in
+            if let error = error {
+                let alert = NSAlert()
+                alert.alertStyle = .critical
+                alert.messageText = String(format: "%@:\(error)", NSLocalizedString("Download failed", comment: ""))
+                alert.runModal()
+                
+                return
+            }
+
+            guard let tempLocalURL = tempLocalURL else {
+                let alert = NSAlert()
+                alert.alertStyle = .critical
+                alert.messageText = NSLocalizedString("Invalid temporary directory", comment: "")
+                alert.runModal()
+
+                return
+            }
+            
+
+            do {
+                try FileManager.default.moveItem(at: tempLocalURL, to: destinationURL)
+            } catch {
+                let alert = NSAlert()
+                alert.alertStyle = .critical
+                alert.messageText = String(format: "%@:\(error)", NSLocalizedString("Failed to save file", comment: ""))
+                alert.runModal()
+            }
+        }
+        self.downFileUrl = destinationURL.path
+        downloadTask.resume()
+    }
+    
+    private func languageAbbreviation(_ language: String) -> String {
+        if language == "Automatic" || language == "auto" {
+            return "auto"
+        } else if language == "English" || language == "en" {
+            return "en"
+        } else if language == "Simplified Chinese" || language == "zh" {
+            return "zh"
+        } else if language == "Traditional Chinese" || language == "cht" {
+            return "cht"
+        } else if language == "Japanese" || language == "jp" {
+            return "jp"
+        } else if language == "Korean" || language == "kor" {
+            return "kor"
+        } else if language == "French" || language == "fra" {
+            return "fra"
+        } else if language == "Spanish" || language == "spa" {
+            return "spa"
+        } else if language == "Italian" || language == "it" {
+            return "it"
+        } else if language == "German" || language == "de" {
+            return "de"
+        } else if language == "Portuguese" || language == "pt" {
+            return "pt"
+        } else if language == "Russian" || language == "ru" {
+            return "ru"
+        } else if language == "Vietnamese" || language == "vie" {
+            return "vie"
+        } else if language == "Thai" || language == "th" {
+            return "th"
+        } else if language == "Arabic" || language == "ara" {
+            return "ara"
+        } else if language == "Greek" || language == "el" {
+            return "el"
+        } else if language == "Bulgarian" || language == "bul" {
+            return "bul"
+        } else if language == "Finnish" || language == "fin" {
+            return "fin"
+        } else if language == "Slovene" || language == "slo" {
+            return "slo"
+        } else if language == "Dutch" || language == "nl" {
+            return "nl"
+        } else if language == "Czech" || language == "cs" {
+            return "cs"
+        } else if language == "Swedish" || language == "swe" {
+            return "swe"
+        } else if language == "Polish" || language == "pl" {
+            return "pl"
+        } else if language == "Danish" || language == "dan" {
+            return "dan"
+        } else if language == "Romanian" || language == "rom" {
+            return "rom"
+        } else if language == "Hungarian" || language == "hu" {
+            return "hu"
+        }
+        return "auto"
+    }
+    
+    // MARK: AI Action (private)
+    
+    /**
+     @abstract 翻译上传
+     @param file  文件路径
+     @param complete 上传完成回调
+     */
+    private func aiTranslationFileUpload(file: String, complete: @escaping KMRequestServerComplete) {
+        let infoDictionary = Bundle .main.infoDictionary!
+        let urlString = AIInfoConfig().aiActionURL + "/api/AI/uploadTranslate"
+        let fileData = FileManager.default.contents(atPath: file)
+        let params: [String: Any] = ["file": fileData,
+                                     "uuid": uuid(),
+                                     "platform": platform(),
+                                     "app_name": app_name()]
+        KMAIRequestServer.requestServer.uploadFile(urlString: urlString, params: params) { formData in
+            let fileURL = URL(fileURLWithPath: file)
+            try? formData.appendPart(withFileURL: fileURL, name: "file", fileName: fileURL.lastPathComponent, mimeType: "application/octet-stream")
+        } requestSerializer: { requestSerializer in
+            requestSerializer.setValue("Apifox/1.0.0 (https://www.apifox.cn)", forHTTPHeaderField: "User-Agent")
+        } completion: { task, responseObject, error in
+            if responseObject != nil {
+                let data: NSDictionary = responseObject!["data"] as? NSDictionary ?? [:]
+                let code: String = responseObject!["code"] as? String ?? "06005"
+                let message: String = responseObject!["message"] as? String ?? "unknown error"
+                let error = NSError(domain: message, code: Int(code)!)
+//                let result = ResultWrapper(success: true, result: data, message: message, code: Int(code)!, error: error, state: .uploadTranslate)
+//                if result.code == 200 {
+//                    result.success = true
+//                    complete(result)
+//                } else {
+//                    result.success = false
+//                    complete(result)
+//                }
+                if Int(code)! == 200 {
+                    complete(ResultWrapper(success: true, content: data["fileKey"] as! String))
+                } else {
+                    complete(ResultWrapper(success: false, content: message))
+                }
+            } else {
+//                let error = NSError(domain: "unknown error", code: 404)
+//                let result = ResultWrapper(success: false, result: [:], message: "unknown error", code: 404, error: error, state: .uploadTranslate)
+//                complete(result)
+                complete(ResultWrapper(success: false, content: "unknown error"))
+            }
+        }
+    }
+    
+    /**
+     @abstract 文件翻译
+     @param fileKey  文件Key
+     @param from 初始语言
+     @param to 结束语言
+     */
+    private func aiTranslationFileTranslateHandle(fileKey: String, from: String, to: String, complete: @escaping KMRequestServerComplete) {
+        
+        let infoDictionary = Bundle .main.infoDictionary!
+        let urlString = AIInfoConfig().aiActionURL + "/api/AI/fileTranslate"
+        var semaphore = DispatchSemaphore (value: 0)
+
+        let paraDict = ["fileKey": fileKey,
+                        "from": from,
+                        "to": to,
+                        "uuid": uuid(),
+                        "platform": platform(),
+                        "app_name": app_name()]
+        var postData  = try! JSONSerialization.data(withJSONObject: paraDict)
+
+        
+        var request = URLRequest(url: URL(string: urlString)!,timeoutInterval: Double.infinity)
+        request.addValue("Apifox/1.0.0 (https://www.apifox.cn)", forHTTPHeaderField: "User-Agent")
+        request.addValue("application/json", forHTTPHeaderField: "Content-Type")
+
+        request.httpMethod = "POST"
+        request.httpBody = postData
+
+        let task = URLSession.shared.dataTask(with: request) { data, response, error in
+           guard let data = data else {
+               print(String(describing: error))
+               semaphore.signal()
+               return
+           }
+            let jsonObject = try? JSONSerialization.jsonObject(with: data, options: []) as? NSDictionary ?? [:]
+            if jsonObject != nil {
+                let data1: NSDictionary = jsonObject!["data"] as? NSDictionary ?? [:]
+                let code: String = jsonObject!["code"] as? String ?? "06005"
+                let message: String = jsonObject!["message"] as? String ?? "unknown error"
+                let error = NSError(domain: message, code: Int(code)!)
+//                let result = ResultWrapper(success: true, result: data1, message: message, code: Int(code)!, error: error, state: .fileTranslate)
+//                if result.code == 200 {
+//                    result.success = true
+//                    complete(result)
+//                } else {
+//                    result.success = false
+//                    complete(result)
+//                }
+                if Int(code)! == 200 {
+                    let fileUrl = data1["fileUrl"]
+                    let downFileUrl = data1["downFileUrl"]
+                    let ossDownUrl = data1["ossDownUrl"]
+                    let fileName = data1["fileName"]
+                    let downFileName = data1["downFileName"]
+                    let fromStr = data1["from"]
+                    let toStr = data1["to"]
+                    self.downloadFile(filePath: ossDownUrl as! String, downFileName: downFileName as! String)
+                    complete(ResultWrapper(success: true, content: self.downFileUrl))
+                } else {
+                    complete(ResultWrapper(success: false, content: message))
+                }
+            } else {
+//                let error = NSError(domain: "unknown error", code: 404)
+//                let result = ResultWrapper(success: false, result: [:], message: "unknown error", code: 404, error: error, state: .fileTranslate)
+//                complete(result)
+                complete(ResultWrapper(success: false, content: "unknown error"))
+            }
+           semaphore.signal()
+        }
+        task.resume()
+        semaphore.wait()
+    }
+
+    /**
+     @abstract 内容翻译
+     @param q  选中
+     @param from 初始语言
+     @param to 结束语言
+     */
+    private func aiTranslationTextTrans(q: String, from: String, to: String, complete: @escaping KMRequestServerComplete) {
+        
+        let infoDictionary = Bundle .main.infoDictionary!
+        let urlString = AIInfoConfig().aiActionURL + "/api/AI/textTranslate"
+        var semaphore = DispatchSemaphore (value: 0)
+        
+        var escapedString = q
+        if q.contains("\n") || q.contains("\r") {
+            escapedString = q.replacingOccurrences(of: "\n", with: "\\n")
+            escapedString = escapedString.replacingOccurrences(of: "\r", with: "\\r")
+        } else if q.contains("\u{2028}") {
+            
+        }
+        escapedString = String(data: escapedString.data(using: .utf8)!, encoding: .utf8)!
+//        let escapedString = String(data: q.data(using: .utf8)!, encoding: .utf8)!
+        let paraDict = ["text":escapedString,
+                        "from":from,
+                        "to":to,
+                        "uuid":uuid(),
+                        "platform": platform(),
+                        "app_name": app_name()]
+        var postData  = try! JSONSerialization.data(withJSONObject: paraDict)
+
+        var request = URLRequest(url: URL(string: urlString)!,timeoutInterval: Double.infinity)
+        request.addValue("Apifox/1.0.0 (https://www.apifox.cn)", forHTTPHeaderField: "User-Agent")
+        request.addValue("application/json", forHTTPHeaderField: "Content-Type")
+
+        request.httpMethod = "POST"
+        request.httpBody = postData
+
+        let task = URLSession.shared.dataTask(with: request) { data, response, error in
+           guard let data = data else {
+               print(String(describing: error))
+               semaphore.signal()
+               return
+           }
+            let jsonObject = try? JSONSerialization.jsonObject(with: data, options: []) as? NSDictionary ?? [:]
+            if jsonObject != nil {
+                let data1: NSDictionary = jsonObject!["data"] as? NSDictionary ?? [:]
+                let code: String = jsonObject!["code"] as? String ?? "06005"
+                let message: String = jsonObject!["message"] as? String ?? "unknown error"
+                let error = NSError(domain: message, code: Int(code)!)
+//                let result = ResultWrapper(success: true, result: data1, message: message, code: Int(code)!, error: error, state: .textTranslate)
+//                if result.code == 200 {
+//                    result.success = true
+//                    complete(result)
+//                } else {
+//                    result.success = false
+//                    complete(result)
+//                }
+                if Int(code)! == 200 {
+                    complete(ResultWrapper(success: true, content: data1["dst"] as! String))
+                } else {
+                    complete(ResultWrapper(success: false, content: message))
+                }
+            } else {
+//                let error = NSError(domain: "unknown error", code: 404)
+//                let result = ResultWrapper(success: false, result: [:], message: "unknown error", code: 404, error: error, state: .textTranslate)
+//                complete(result)
+                complete(ResultWrapper(success: false, content: "unknown error"))
+            }
+           semaphore.signal()
+        }
+        task.resume()
+        semaphore.wait()
+    }
+    
+    /**
+     @abstract重写 & 纠错
+     @param content  内容
+     @param state  类型
+     */
+    private func aiRewriting(content: String, state: KMAIRewritingState, complete: @escaping KMRequestServerComplete) {
+        
+        var urlString = AIInfoConfig().aiActionURL + "/api/AI/rewrite"
+        if state == .correctTypos {
+            urlString = AIInfoConfig().aiActionURL + "/api/AI/correctTypos"
+        }
+        let params: [String: Any] = ["content": content,
+                                     "uuid": uuid(),
+                                     "platform": platform(),
+                                     "app_name": app_name()]
+        
+        KMAIRequestServer.requestServer.aiRewriting(urlString: urlString, params: params) { formData in
+            
+        } requestSerializer: { requestSerializer in
+            requestSerializer.setValue("Apifox/1.0.0 (https://www.apifox.cn)", forHTTPHeaderField: "User-Agent")
+        } completion: { task, responseObject, error in
+            if responseObject != nil {
+                let data: NSDictionary = responseObject!["data"] as? NSDictionary ?? [:]
+                let code: String = responseObject!["code"] as? String ?? "06005"
+                let message: String = responseObject!["message"] as? String ?? "unknown error"
+                let error = NSError(domain: message, code: Int(code)!)
+//                let result = ResultWrapper(success: true, result: data, message: message, code: Int(code)!, error: error, state: state)
+//                if result.code == 200 {
+//                    result.success = true
+//                    complete(result)
+//                } else {
+//                    result.success = false
+//                    complete(result)
+//                }
+                if Int(code)! == 200 {
+                    complete(ResultWrapper(success: true, content: data["content"] as! String))
+                } else {
+                    complete(ResultWrapper(success: false, content: message))
+                }
+            } else {
+//                let error = NSError(domain: "unknown error", code: 404)
+//                let result = ResultWrapper(success: false, result: [:], message: "unknown error", code: 404, error: error, state: state)
+//                complete(result)
+                complete(ResultWrapper(success: false, content: "unknown error"))
+            }
+        }
+    }
+    
+    /**
+     @abstract 提取摘要
+     @param file  文件路径
+     */
+    private func extractSummaryFile(file: String, complete: @escaping KMRequestServerComplete) {
+        
+        let infoDictionary = Bundle .main.infoDictionary!
+        let urlString = AIInfoConfig().aiActionURL + "/api/AI/extractSummaryFile"
+        let fileData = FileManager.default.contents(atPath: file)
+        let params: [String: Any] = ["file": fileData,
+                                     "uuid": uuid(),
+                                     "platform": platform(),
+                                     "app_name": app_name()]
+        KMAIRequestServer.requestServer.uploadFile(urlString: urlString, params: params) { formData in
+            let fileURL = URL(fileURLWithPath: file)
+            try? formData.appendPart(withFileURL: fileURL, name: "file", fileName: fileURL.lastPathComponent, mimeType: "application/octet-stream")
+        } requestSerializer: { requestSerializer in
+            requestSerializer.setValue("Apifox/1.0.0 (https://www.apifox.cn)", forHTTPHeaderField: "User-Agent")
+        } completion: { task, responseObject, error in
+            if responseObject != nil {
+                let data: NSDictionary = responseObject!["data"] as? NSDictionary ?? [:]
+                let code: Int = responseObject!["code"] as? Int ?? 06005
+                let message: String = responseObject!["message"] as? String ?? "unknown error"
+                let error = NSError(domain: message, code: code)
+//                let result = ResultWrapper(success: true, result: data, message: message, code: Int(code)!, error: error, state: .extractSummaryFile)
+//                if result.code == 200 {
+//                    result.success = true
+//                    complete(result)
+//                } else {
+//                    result.success = false
+//                    complete(result)
+//                }
+                if code == 200 {
+                    complete(ResultWrapper(success: true, content: data["summary"] as! String))
+                } else {
+                    complete(ResultWrapper(success: false, content: message))
+                }
+            } else {
+                let error = NSError(domain: "unknown error", code: 404)
+//                let result = ResultWrapper(success: false, result: [:], message: "unknown error", code: 404, error: error, state: .extractSummaryFile)
+//                complete(result)
+                complete(ResultWrapper(success: false, content: "unknown error"))
+            }
+        }
+    }
+
+}
+
+//typealias KMHttpRequestServerComplete = (_ task: URLSessionDataTask?, _ responseObject: AnyObject?, _ error: NSError?) -> Void
+class KMAIRequestServer {
+    var sessionManager: AFHTTPSessionManager!
+    static let requestServer = KMAIRequestServer()
+    var task: URLSessionTask?
+    
+    init() {
+        let configuration: URLSessionConfiguration = URLSessionConfiguration.default
+        sessionManager = AFHTTPSessionManager.init(sessionConfiguration: configuration)
+        sessionManager.securityPolicy = AFSecurityPolicy.default()
+    }
+    
+    /**
+     上传文件
+        - 翻译
+        - 摘要提取
+     */
+    func uploadFile(urlString: String,
+                        params: Dictionary<String, Any>?,
+                       body: ((_ formData:AFMultipartFormData) -> Void)?,
+          requestSerializer: ((_ requestSerializer:AFHTTPRequestSerializer) -> Void)?,
+                     completion: KMHttpRequestServerComplete?) -> Void {
+        sessionManager.requestSerializer.setValue("multipart/form-data", forHTTPHeaderField: "Content-Type")
+        sessionManager.requestSerializer.timeoutInterval = 60
+        sessionManager.responseSerializer = AFJSONResponseSerializer()
+        sessionManager.responseSerializer.acceptableContentTypes = ["application/json","text/html","text/json","text/javascript","text/plain","image/gif"]
+        if (requestSerializer != nil) {
+            requestSerializer!(sessionManager.requestSerializer);
+        }
+        if (body != nil) {
+            self.task = sessionManager.post(urlString, parameters: params, headers: nil) { formData in
+                body!(formData)
+            } progress: { progress in
+                
+            } success: { task, responseObject in
+                let responseObject = responseObject as AnyObject
+                if (completion != nil) {
+                    completion!(task,responseObject,nil);
+                }
+            } failure: { task, error in
+                if (completion != nil) {
+                    completion!(task, nil, error as NSError);
+                }
+            }
+        } else {
+            self.task = sessionManager.post(urlString, parameters: params, headers: nil) { progress in
+            
+            } success: { task, responseObject in
+                if (completion != nil) {
+                    let responseObject = responseObject as AnyObject
+                    completion!(task,responseObject,nil);
+                }
+            } failure: { task, error in
+                if (completion != nil) {
+                    completion!(task, nil, error as NSError);
+                }
+            }
+        }
+    }
+    
+    /**
+     文件翻译
+     */
+    func aiFileTranslateHandle(urlString: String,
+                                  params: Dictionary<String, Any>?,
+                                    body: ((_ formData:AFMultipartFormData) -> Void)?,
+                       requestSerializer: ((_ requestSerializer:AFHTTPRequestSerializer) -> Void)?,
+                              completion: KMHttpRequestServerComplete?) -> Void {
+        sessionManager.requestSerializer = AFJSONRequestSerializer()
+        sessionManager.responseSerializer = AFJSONResponseSerializer()
+        sessionManager.responseSerializer.acceptableContentTypes = ["application/json","text/html","text/json","text/javascript","text/plain","image/gif"]
+        if (requestSerializer != nil) {
+            requestSerializer!(sessionManager.requestSerializer);
+        }
+        if (body != nil) {
+            self.task = sessionManager.post(urlString, parameters: params, headers: nil) { formData in
+                body!(formData)
+            } progress: { progress in
+                
+            } success: { task, responseObject in
+                let responseObject = responseObject as AnyObject
+                if (completion != nil) {
+                    completion!(task,responseObject,nil);
+                }
+            } failure: { task, error in
+                if (completion != nil) {
+                    completion!(task, nil, error as NSError);
+                }
+            }
+        } else {
+            self.task = sessionManager.post(urlString, parameters: params, headers: nil) { progress in
+            
+            } success: { task, responseObject in
+                if (completion != nil) {
+                    let responseObject = responseObject as AnyObject
+                    completion!(task,responseObject,nil);
+                }
+            } failure: { task, error in
+                if (completion != nil) {
+                    completion!(task, nil, error as NSError);
+                }
+            }
+        }
+    }
+    
+    /**
+     重写
+     */
+    func aiRewriting(urlString: String,
+                        params: Dictionary<String, Any>?,
+                          body: ((_ formData:AFMultipartFormData) -> Void)?,
+             requestSerializer: ((_ requestSerializer:AFHTTPRequestSerializer) -> Void)?,
+                    completion: KMHttpRequestServerComplete?) -> Void {
+        sessionManager.requestSerializer.setValue("multipart/form-data", forHTTPHeaderField: "Content-Type")
+        sessionManager.requestSerializer.timeoutInterval = 60
+        sessionManager.responseSerializer = AFJSONResponseSerializer()
+        sessionManager.responseSerializer.acceptableContentTypes = ["application/json","text/html","text/json","text/javascript","text/plain","image/gif"]
+        if (requestSerializer != nil) {
+            requestSerializer!(sessionManager.requestSerializer);
+        }
+        if (body != nil) {
+            self.task = sessionManager.post(urlString, parameters: params, headers: nil) { formData in
+                body!(formData)
+            } progress: { progress in
+                
+            } success: { task, responseObject in
+                let responseObject = responseObject as AnyObject
+                if (completion != nil) {
+                    completion!(task,responseObject,nil);
+                }
+            } failure: { task, error in
+                if (completion != nil) {
+                    completion!(task, nil, error as NSError);
+                }
+            }
+        } else {
+            self.task = sessionManager.post(urlString, parameters: params, headers: nil) { progress in
+            
+            } success: { task, responseObject in
+                if (completion != nil) {
+                    let responseObject = responseObject as AnyObject
+                    completion!(task,responseObject,nil);
+                }
+            } failure: { task, error in
+                if (completion != nil) {
+                    completion!(task, nil, error as NSError);
+                }
+            }
+        }
+    }
+}

+ 2 - 0
PDF Office/PDF Master/Class/GuideInfo/KMGuideConfig.swift

@@ -28,6 +28,8 @@ let kKMGuideInfoCustomColorKey   = "kKMGuideInfoCustomColorKey"
     case openFileNormalToolbar  = 9
     case openFileNormalToolbar  = 9
     case convertGuide           = 10//转档功能
     case convertGuide           = 10//转档功能
     case customColor            = 11//自定义颜色
     case customColor            = 11//自定义颜色
+    case functionMultiAIGuide   = 12//AI功能
+    case aiInfoResultSave       = 13//AI功能保存操作
     
     
     
     
 }
 }

+ 123 - 123
PDF Office/PDF Master/Class/Home/ViewController/KMAIRewritingVC.swift

@@ -7,10 +7,10 @@
 
 
 import Cocoa
 import Cocoa
 
 
-@objc enum KMAIRewritingState : Int {
-    case AIRewriting = 0
-    case AIErrorCorrection
-}
+//@objc enum KMAIRewritingState : Int {
+//    case AIRewriting = 0
+//    case AIErrorCorrection
+//}
 
 
 class KMAIRewritingVC: NSViewController {
 class KMAIRewritingVC: NSViewController {
 
 
@@ -37,7 +37,7 @@ class KMAIRewritingVC: NSViewController {
     @IBOutlet weak var errorImageView: NSImageView!
     @IBOutlet weak var errorImageView: NSImageView!
     @IBOutlet weak var errorLabel: NSTextField!
     @IBOutlet weak var errorLabel: NSTextField!
     
     
-    var state: KMAIRewritingState = .AIRewriting
+    var state: KMAIRewritingState = .rewrite
     
     
     var _uiState: KMAITranslationState = .None
     var _uiState: KMAITranslationState = .None
     
     
@@ -97,7 +97,7 @@ class KMAIRewritingVC: NSViewController {
     
     
     func initLocalization() -> Void {
     func initLocalization() -> Void {
         switch self.state {
         switch self.state {
-        case .AIRewriting:
+        case .rewrite:
             self.aiRewritingLabel.stringValue = NSLocalizedString("AI Rewriting", comment: "")
             self.aiRewritingLabel.stringValue = NSLocalizedString("AI Rewriting", comment: "")
             self.aiRewritingSubLabel.stringValue = NSLocalizedString("Limited to 150 characters per session, 5 times per month", comment: "")
             self.aiRewritingSubLabel.stringValue = NSLocalizedString("Limited to 150 characters per session, 5 times per month", comment: "")
             self.rewritingLabel.stringValue = NSLocalizedString("Rewrite", comment: "")
             self.rewritingLabel.stringValue = NSLocalizedString("Rewrite", comment: "")
@@ -109,18 +109,18 @@ class KMAIRewritingVC: NSViewController {
             self.resultTextView.string = self.aiRewritingResultStr
             self.resultTextView.string = self.aiRewritingResultStr
             self.emptyImageView.image = NSImage(named: "ic_ai_rewriting_empty")
             self.emptyImageView.image = NSImage(named: "ic_ai_rewriting_empty")
             break
             break
-        case .AIErrorCorrection:
-            self.aiRewritingLabel.stringValue = NSLocalizedString("AI Error Correction", comment: "")
-            self.aiRewritingSubLabel.stringValue = NSLocalizedString("Limited to 150 characters per session, 5 times per month", comment: "")
-            self.rewritingLabel.stringValue = NSLocalizedString("Correct", comment: "")
-            self.resultLabel.stringValue = NSLocalizedString("Result", comment: "")
-            self.copyLabel.stringValue = NSLocalizedString("Copy", comment: "")
-            self.rewritingTextField.placeholderString = NSLocalizedString("Please enter text content here...", comment: "")
-            self.wordsLabel.stringValue = NSLocalizedString("0/150", comment: "")
-            self.rewritingTextField.stringValue = self.aiErrorCorrectionStr
-            self.resultTextView.string = self.aiErrorCorrectionResultStr
-            self.emptyImageView.image = NSImage(named: "ic_ai_ErrorCorrection_empty")
-            break
+//        case .AIErrorCorrection:
+//            self.aiRewritingLabel.stringValue = NSLocalizedString("AI Error Correction", comment: "")
+//            self.aiRewritingSubLabel.stringValue = NSLocalizedString("Limited to 150 characters per session, 5 times per month", comment: "")
+//            self.rewritingLabel.stringValue = NSLocalizedString("Correct", comment: "")
+//            self.resultLabel.stringValue = NSLocalizedString("Result", comment: "")
+//            self.copyLabel.stringValue = NSLocalizedString("Copy", comment: "")
+//            self.rewritingTextField.placeholderString = NSLocalizedString("Please enter text content here...", comment: "")
+//            self.wordsLabel.stringValue = NSLocalizedString("0/150", comment: "")
+//            self.rewritingTextField.stringValue = self.aiErrorCorrectionStr
+//            self.resultTextView.string = self.aiErrorCorrectionResultStr
+//            self.emptyImageView.image = NSImage(named: "ic_ai_ErrorCorrection_empty")
+//            break
         default:
         default:
             break
             break
         }
         }
@@ -220,11 +220,11 @@ class KMAIRewritingVC: NSViewController {
             self.rewritingBox.borderColor = NSColor.km_init(hex: "#F3465B")
             self.rewritingBox.borderColor = NSColor.km_init(hex: "#F3465B")
             self.emptyImageView.isHidden = true
             self.emptyImageView.isHidden = true
             self.errorView.isHidden = false
             self.errorView.isHidden = false
-            if self.state == .AIRewriting {
-                self.errorLabel.stringValue = self.aiRewritingErrorStr
-            } else if self.state == .AIErrorCorrection {
-                self.errorLabel.stringValue = self.aiErrorCorrectionErrorStr
-            }
+//            if self.state == .AIRewriting {
+//                self.errorLabel.stringValue = self.aiRewritingErrorStr
+//            } else if self.state == .AIErrorCorrection {
+//                self.errorLabel.stringValue = self.aiErrorCorrectionErrorStr
+//            }
         } else {
         } else {
             self.rewritingBox.fillColor = NSColor.km_init(hex: "#BDDFFD")
             self.rewritingBox.fillColor = NSColor.km_init(hex: "#BDDFFD")
             self.rewritingBox.borderWidth = 0.0
             self.rewritingBox.borderWidth = 0.0
@@ -243,65 +243,65 @@ class KMAIRewritingVC: NSViewController {
     }
     }
     
     
     func acquisition_uiState() -> Void {
     func acquisition_uiState() -> Void {
-        if self.state == .AIRewriting {
-            if (self.aiRewritingStr.count > 0) && (self.aiRewritingResultStr.count > 0) {
-                let pasteboard = NSPasteboard.general
-                if pasteboard.string(forType: .string) != nil {
-                    if pasteboard.string(forType: .string)!.count > 0 {
-                        if pasteboard.string(forType: .string)! == self.aiRewritingResultStr {
-                            self.uiState = .Copyed
-                        } else {
-                            self.uiState = .CanCopy
-                        }
-                    } else {
-                        self.uiState = .CanCopy
-                    }
-                } else {
-                    self.uiState = .CanCopy
-                }
-            } else if (self.aiRewritingStr.count > 0) {
-                if self.aiRewritingStr.count > 150 {
-                    self.uiState = .Exceed
-                } else {
-                    self.uiState = .CanAIRewriting
-                }
-            } else {
-                if self.aiRewritingErrorStr.count > 0 {
-                    self.uiState = .Error
-                } else {
-                    self.uiState = .None
-                }
-            }
-        } else if self.state == .AIErrorCorrection {
-            if (self.aiErrorCorrectionStr.count > 0) && (self.aiErrorCorrectionResultStr.count > 0) {
-                let pasteboard = NSPasteboard.general
-                if pasteboard.string(forType: .string) != nil {
-                    if pasteboard.string(forType: .string)!.count > 0 {
-                        if pasteboard.string(forType: .string)! == self.aiErrorCorrectionResultStr {
-                            self.uiState = .Copyed
-                        } else {
-                            self.uiState = .CanCopy
-                        }
-                    } else {
-                        self.uiState = .CanCopy
-                    }
-                } else {
-                    self.uiState = .CanCopy
-                }
-            } else if (self.aiErrorCorrectionStr.count > 0) {
-                if self.aiErrorCorrectionStr.count > 150 {
-                    self.uiState = .Exceed
-                } else {
-                    self.uiState = .CanAIRewriting
-                }
-            } else {
-                if self.aiErrorCorrectionErrorStr.count > 0 {
-                    self.uiState = .Error
-                } else {
-                    self.uiState = .None
-                }
-            }
-        }
+//        if self.state == .AIRewriting {
+//            if (self.aiRewritingStr.count > 0) && (self.aiRewritingResultStr.count > 0) {
+//                let pasteboard = NSPasteboard.general
+//                if pasteboard.string(forType: .string) != nil {
+//                    if pasteboard.string(forType: .string)!.count > 0 {
+//                        if pasteboard.string(forType: .string)! == self.aiRewritingResultStr {
+//                            self.uiState = .Copyed
+//                        } else {
+//                            self.uiState = .CanCopy
+//                        }
+//                    } else {
+//                        self.uiState = .CanCopy
+//                    }
+//                } else {
+//                    self.uiState = .CanCopy
+//                }
+//            } else if (self.aiRewritingStr.count > 0) {
+//                if self.aiRewritingStr.count > 150 {
+//                    self.uiState = .Exceed
+//                } else {
+//                    self.uiState = .CanAIRewriting
+//                }
+//            } else {
+//                if self.aiRewritingErrorStr.count > 0 {
+//                    self.uiState = .Error
+//                } else {
+//                    self.uiState = .None
+//                }
+//            }
+//        } else if self.state == .AIErrorCorrection {
+//            if (self.aiErrorCorrectionStr.count > 0) && (self.aiErrorCorrectionResultStr.count > 0) {
+//                let pasteboard = NSPasteboard.general
+//                if pasteboard.string(forType: .string) != nil {
+//                    if pasteboard.string(forType: .string)!.count > 0 {
+//                        if pasteboard.string(forType: .string)! == self.aiErrorCorrectionResultStr {
+//                            self.uiState = .Copyed
+//                        } else {
+//                            self.uiState = .CanCopy
+//                        }
+//                    } else {
+//                        self.uiState = .CanCopy
+//                    }
+//                } else {
+//                    self.uiState = .CanCopy
+//                }
+//            } else if (self.aiErrorCorrectionStr.count > 0) {
+//                if self.aiErrorCorrectionStr.count > 150 {
+//                    self.uiState = .Exceed
+//                } else {
+//                    self.uiState = .CanAIRewriting
+//                }
+//            } else {
+//                if self.aiErrorCorrectionErrorStr.count > 0 {
+//                    self.uiState = .Error
+//                } else {
+//                    self.uiState = .None
+//                }
+//            }
+//        }
     }
     }
     
     
     func showProgressWindow() {
     func showProgressWindow() {
@@ -310,11 +310,11 @@ class KMAIRewritingVC: NSViewController {
         progress.window?.contentView?.wantsLayer = true
         progress.window?.contentView?.wantsLayer = true
         progress.window?.contentView?.layer?.backgroundColor = NSColor.km_init(hex: "#36383B").cgColor
         progress.window?.contentView?.layer?.backgroundColor = NSColor.km_init(hex: "#36383B").cgColor
         progress.progressField.textColor = NSColor.white
         progress.progressField.textColor = NSColor.white
-        if self.state == .AIRewriting {
-            progress.message = NSLocalizedString("Rewriting...", comment: "")
-        } else if self.state == . AIErrorCorrection {
-            progress.message = NSLocalizedString("Error Correcting...", comment: "")
-        }
+//        if self.state == .AIRewriting {
+//            progress.message = NSLocalizedString("Rewriting...", comment: "")
+//        } else if self.state == . AIErrorCorrection {
+//            progress.message = NSLocalizedString("Error Correcting...", comment: "")
+//        }
 
 
         progress.closeBlock = { [unowned self] in
         progress.closeBlock = { [unowned self] in
             self.hiddenProgressWindow()
             self.hiddenProgressWindow()
@@ -385,24 +385,24 @@ class KMAIRewritingVC: NSViewController {
                 
                 
                 self.resultTextView.string = ""
                 self.resultTextView.string = ""
                 self.resultTextView.string =  result["content"] as? String ?? ""
                 self.resultTextView.string =  result["content"] as? String ?? ""
-                if self.state == .AIRewriting {
-                    self.aiRewritingResultStr = result["content"] as? String ?? ""
-                    self.aiRewritingErrorStr = ""
-                } else if self.state == .AIErrorCorrection {
-                    self.aiErrorCorrectionResultStr = result["content"] as? String ?? ""
-                    self.aiErrorCorrectionErrorStr = ""
-                }
+//                if self.state == .AIRewriting {
+//                    self.aiRewritingResultStr = result["content"] as? String ?? ""
+//                    self.aiRewritingErrorStr = ""
+//                } else if self.state == .AIErrorCorrection {
+//                    self.aiErrorCorrectionResultStr = result["content"] as? String ?? ""
+//                    self.aiErrorCorrectionErrorStr = ""
+//                }
             } else {
             } else {
                 let result: String = result!.message
                 let result: String = result!.message
                 
                 
                 DispatchQueue.main.async {
                 DispatchQueue.main.async {
                     self.resultTextView.string = ""
                     self.resultTextView.string = ""
                     self.errorLabel.stringValue = result
                     self.errorLabel.stringValue = result
-                    if self.state == .AIRewriting {
-                        self.aiRewritingErrorStr = result
-                    } else if self.state == .AIErrorCorrection {
-                        self.aiErrorCorrectionErrorStr = result
-                    }
+//                    if self.state == .AIRewriting {
+//                        self.aiRewritingErrorStr = result
+//                    } else if self.state == .AIErrorCorrection {
+//                        self.aiErrorCorrectionErrorStr = result
+//                    }
                     self.uiState = .Error
                     self.uiState = .Error
                 }
                 }
             }
             }
@@ -455,39 +455,39 @@ extension KMAIRewritingVC: NSTextFieldDelegate {
         self.wordsLabel.stringValue = String(format: "%d/150", object.stringValue.count)
         self.wordsLabel.stringValue = String(format: "%d/150", object.stringValue.count)
         
         
         if object.stringValue.count > 0 {
         if object.stringValue.count > 0 {
-            if self.state == .AIRewriting {
-                self.uiState = .CanAIRewriting
-            } else if self.state == .AIErrorCorrection {
-                self.uiState = .CanAIErrorCorrection
-            }
+//            if self.state == .AIRewriting {
+//                self.uiState = .CanAIRewriting
+//            } else if self.state == .AIErrorCorrection {
+//                self.uiState = .CanAIErrorCorrection
+//            }
         } else {
         } else {
             self.uiState = .None
             self.uiState = .None
         }
         }
         
         
         if object.stringValue.count > 150 {
         if object.stringValue.count > 150 {
             self.uiState = .Exceed
             self.uiState = .Exceed
-            if self.state == .AIRewriting {
-                self.aiRewritingErrorStr = NSLocalizedString("Limit to 150 characters at a time", comment: "")
-            } else if self.state == .AIErrorCorrection {
-                self.aiErrorCorrectionErrorStr = NSLocalizedString("Limit to 150 characters at a time", comment: "")
-            }
+//            if self.state == .AIRewriting {
+//                self.aiRewritingErrorStr = NSLocalizedString("Limit to 150 characters at a time", comment: "")
+//            } else if self.state == .AIErrorCorrection {
+//                self.aiErrorCorrectionErrorStr = NSLocalizedString("Limit to 150 characters at a time", comment: "")
+//            }
         } else {
         } else {
-            if self.state == .AIRewriting {
-                self.aiRewritingErrorStr = ""
-            } else if self.state == .AIErrorCorrection {
-                self.aiErrorCorrectionErrorStr = ""
-            }
+//            if self.state == .AIRewriting {
+//                self.aiRewritingErrorStr = ""
+//            } else if self.state == .AIErrorCorrection {
+//                self.aiErrorCorrectionErrorStr = ""
+//            }
         }
         }
         
         
-        if self.state == .AIRewriting {
-            self.aiRewritingStr = object.stringValue
-            self.aiRewritingResultStr = ""
-            self.resultTextView.string = ""
-        } else if self.state == .AIErrorCorrection {
-            self.aiErrorCorrectionStr = object.stringValue
-            self.aiErrorCorrectionResultStr = ""
-            self.resultTextView.string = ""
-        }
+//        if self.state == .AIRewriting {
+//            self.aiRewritingStr = object.stringValue
+//            self.aiRewritingResultStr = ""
+//            self.resultTextView.string = ""
+//        } else if self.state == .AIErrorCorrection {
+//            self.aiErrorCorrectionStr = object.stringValue
+//            self.aiErrorCorrectionResultStr = ""
+//            self.resultTextView.string = ""
+//        }
     }
     }
 
 
 }
 }

+ 2 - 2
PDF Office/PDF Master/Class/Home/ViewController/KMHomeViewController.swift

@@ -501,7 +501,7 @@ import Cocoa
             self.rightTopBox.contentView = nil
             self.rightTopBox.contentView = nil
             self.rightBottomBox.contentView = nil
             self.rightBottomBox.contentView = nil
             self.rightFullBox.contentView = self.aiRewritingViewController.view
             self.rightFullBox.contentView = self.aiRewritingViewController.view
-            self.aiRewritingViewController.state = .AIRewriting
+//            self.aiRewritingViewController.state = .AIRewriting
             self.aiRewritingViewController.initLocalization()
             self.aiRewritingViewController.initLocalization()
             self.aiRewritingViewController.acquisition_uiState()
             self.aiRewritingViewController.acquisition_uiState()
             
             
@@ -516,7 +516,7 @@ import Cocoa
             self.rightTopBox.contentView = nil
             self.rightTopBox.contentView = nil
             self.rightBottomBox.contentView = nil
             self.rightBottomBox.contentView = nil
             self.rightFullBox.contentView = self.aiRewritingViewController.view
             self.rightFullBox.contentView = self.aiRewritingViewController.view
-            self.aiRewritingViewController.state = .AIErrorCorrection
+//            self.aiRewritingViewController.state = .AIErrorCorrection
             self.aiRewritingViewController.initLocalization()
             self.aiRewritingViewController.initLocalization()
             self.aiRewritingViewController.acquisition_uiState()
             self.aiRewritingViewController.acquisition_uiState()
             
             

+ 18 - 18
PDF Office/PDF Master/Class/KMAdvertisement/Manager/KMAdvertisementManager.swift

@@ -131,24 +131,24 @@ extension KMAdvertisementManager {
                     //                decoder.dataDecodingStrategy = .base64
                     //                decoder.dataDecodingStrategy = .base64
                     //                decoder.keyDecodingStrategy = .convertFromSnakeCase //带下划线命名
                     //                decoder.keyDecodingStrategy = .convertFromSnakeCase //带下划线命名
                     
                     
-                    decoder.nonConformingFloatDecodingStrategy = .convertFromString(positiveInfinity: "+∞", negativeInfinity: "-∞", nan: "NaN")
-#if DEBUG
-                    //MARK: 测试使用
-                    var advertisementModel = try! decoder.decode(KMAdvertisementInfo.self, from: jsonData)
-                    if (self.allowLoadContentData(data: advertisementModel)) {
-                        resultArray.append(self.allowLoadItemData(advertisementModel))
-                        isNeedSave = true
-                    }
-#else
-                    //            MARK: 此处try 使用 ? ,如果数据出问题 advertisementModel将无参数, 测试时使用!
-                    var advertisementModel = try? decoder.decode(KMAdvertisementInfo.self, from: jsonData)
-                    if (advertisementModel != nil) {
-                        if (self.allowLoadContentData(data: advertisementModel!)) {
-                            resultArray.append(self.allowLoadItemData(advertisementModel!))
-                            isNeedSave = true
-                        }
-                    }
-#endif
+//                    decoder.nonConformingFloatDecodingStrategy = .convertFromString(positiveInfinity: "+∞", negativeInfinity: "-∞", nan: "NaN")
+//#if DEBUG
+//                    //MARK: 测试使用
+//                    var advertisementModel = try! decoder.decode(KMAdvertisementInfo.self, from: jsonData)
+//                    if (self.allowLoadContentData(data: advertisementModel)) {
+//                        resultArray.append(self.allowLoadItemData(advertisementModel))
+//                        isNeedSave = true
+//                    }
+//#else
+//                    //            MARK: 此处try 使用 ? ,如果数据出问题 advertisementModel将无参数, 测试时使用!
+//                    var advertisementModel = try? decoder.decode(KMAdvertisementInfo.self, from: jsonData)
+//                    if (advertisementModel != nil) {
+//                        if (self.allowLoadContentData(data: advertisementModel!)) {
+//                            resultArray.append(self.allowLoadItemData(advertisementModel!))
+//                            isNeedSave = true
+//                        }
+//                    }
+//#endif
                 }
                 }
             }
             }
         }
         }

+ 3 - 3
PDF Office/PDF Master/Class/KMLightMember/Manager/KMRequestServerManager.swift

@@ -806,9 +806,9 @@ extension KMRequestServerManager {
         
         
         let userInfo = KMLightMemberCache.cache.readData(type: .info)
         let userInfo = KMLightMemberCache.cache.readData(type: .info)
         var urlString = KMAIServerConfig().aiRewritingURL + "/api/rewrite"
         var urlString = KMAIServerConfig().aiRewritingURL + "/api/rewrite"
-        if state == .AIErrorCorrection {
-            urlString = KMAIServerConfig().aiRewritingURL + "/api/correct-typos"
-        }
+//        if state == .AIErrorCorrection {
+//            urlString = KMAIServerConfig().aiRewritingURL + "/api/correct-typos"
+//        }
         let params: [String: Any] = ["project_id": 2,
         let params: [String: Any] = ["project_id": 2,
                                      "content": content,
                                      "content": content,
                                      "version": version,
                                      "version": version,

+ 57 - 0
PDF Office/PDF Master/Class/PDFWindowController/Tools/FMTrackEventManager.swift

@@ -0,0 +1,57 @@
+//
+//  FMTrackEventManager.swift
+//  PDF Reader Pro
+//
+//  Created by liujiajie on 2024/2/7.
+//
+
+import Foundation
+import AppCenterAnalytics
+
+class FMTrackEventManager: NSObject{
+    static let defaultManager: FMTrackEventManager = {
+        let manager = FMTrackEventManager()
+       
+        return manager
+    }()
+    
+    override init() {
+        super.init()
+    }
+    
+    func trackEvent(event: String, withProperties properties: [String: String]?) {
+        if event.count < 1 { return }
+#if DEBUG
+        NSLog("###-FireBaseEvent-(event)-(properties?.first?.key)-(properties?.first?.value)")
+#endif
+        // if RIAnalytics.isNewUserForCurrentVersion()
+        if let props = properties {
+            Analytics.trackEvent(event, withProperties: props)
+        } else {
+            Analytics.trackEvent(event)
+        }
+    }
+    
+    func trackOnceEvent(event: String, withProperties properties: [String: String]?) {
+        if event.count < 1 { return }
+        var eventString = event
+        if properties?.keys.count ?? 0 > 0 && properties?.values.count ?? 0 > 0 {
+            var keyString = ""
+            for key in properties!.keys {
+                keyString += key
+            }
+            for value in properties!.values {
+                keyString += value
+            }
+            eventString += keyString
+        } 
+        
+        if let props = properties {
+            Analytics.trackEvent(event, withProperties: props)
+        } else {
+            Analytics.trackEvent(event)
+        }
+    }
+    
+}
+

+ 58 - 0
PDF Office/PDF Master/Class/Purchase/DMG/Verification/VerificationManager/AIInfoManager.h

@@ -0,0 +1,58 @@
+//
+//  AIInfoManager.h
+//  PDF Reader Pro Edition
+//
+//  Created by Niehaoyu on 2024/1/24.
+//
+
+#import <Foundation/Foundation.h>
+#import "VerificationManager.h"
+
+#define kDeviceAIStatusChangeNotification @"kDeviceAIStatusChangeNotification"
+
+NS_ASSUME_NONNULL_BEGIN
+
+typedef void(^AIActivityComplention)(NSDictionary *info, NSError *error);
+
+@class AIInfo;
+@interface AIInfoManager : NSObject
+
++ (AIInfoManager *)defaultManager;
+
+@property (nonatomic, readonly) BOOL aiInfoValid;
+
+@property (nonatomic, strong) AIInfo *aiInfo;
+
+
+- (void)activateAIWithInfo:(NSDictionary *)info
+               complention:(AIActivityComplention)complention;
+
+- (void)fetchAIInfoWithComplention:(AIActivityComplention)complention;
+
+- (void)restoreAIWithInfo:(NSDictionary *)info
+              complention:(AIActivityComplention)complention;
+
+@end
+
+@interface AIInfo : NSObject
+
+- (id)initWithDict:(NSDictionary *)dict;
+
+@property (nonatomic, readonly) NSDictionary *infoDict;
+
+@property (nonatomic, readonly) BOOL validAIFunction;
+
+@property (nonatomic, readonly) NSString *cdKey;
+
+@property (nonatomic, readonly) int totalToken;
+
+@property (nonatomic, readonly) int usedTimes;
+
+@property (nonatomic, readonly) NSDate *startDate;
+
+@property (nonatomic, readonly) NSDate *endDate;
+
+@property (nonatomic, readonly) int remainingDays;
+
+@end
+NS_ASSUME_NONNULL_END

+ 458 - 0
PDF Office/PDF Master/Class/Purchase/DMG/Verification/VerificationManager/AIInfoManager.m

@@ -0,0 +1,458 @@
+//
+//  AIInfoManager.m
+//  PDF Reader Pro Edition
+//
+//  Created by Niehaoyu on 2024/1/24.
+//
+
+#import "AIInfoManager.h"
+#import "NSNULL+Filtration.h"
+#import "NSObject+DeviceInfo.h"
+#import "IAPProductsManager.h"
+#import <PDF_Reader_Pro-Swift.h>
+#import "ASIFormDataRequest.h"
+#import "JSONKit.h"
+
+static AIInfoManager *__Manager = nil;
+
+@interface AIInfoManager ()
+
+@property (nonatomic, readwrite) BOOL aiInfoValid;
+
+@end
+
+@implementation AIInfoManager
+
++ (AIInfoManager *)defaultManager {
+    if (!__Manager) {
+        __Manager = [[AIInfoManager alloc] init];
+    }
+    return __Manager;
+}
+
+- (NSString*)bundleIdentify {
+    return [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleIdentifier"]?:@"";
+}
+
+- (NSString *)udid {
+//    return @"8D397BE0-F478-5269-A8F1-BE1E3B757221";
+    return GetHardwareUUID()?:@"";
+}
+
+- (instancetype)init {
+    self = [super init];
+      
+    self.aiInfoValid = NO;
+    
+    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
+        [self fetchAIInfoWithComplention:^(NSDictionary * _Nonnull info, NSError * _Nonnull error) {
+            
+        }];
+    });
+    
+    return self;
+}
+
+- (void)activateAIWithInfo:(NSDictionary *)info
+               complention:(AIActivityComplention)complention {
+    if (![info[@"cdkey"] length] &&
+        ![info[@"receipt_str"] length]) {
+        //激活码为空
+        NSError *error = [NSError errorWithDomain:@""
+                                             code:ActivityErrorTypeCDKeyEmpty
+                                         userInfo:nil];
+        if (complention)
+            complention(nil, error);
+        
+        return;
+    }
+    
+    __block AIActivityComplention tComplention = complention;
+    __block VerificationManager *weak_self = self;
+    
+    NSString *platform = @"DMG";
+#if VERSION_DMG
+    platform = @"DMG";
+#else
+    platform = @"AiStore";
+#endif
+    //Process Params
+    NSString *app_version = [[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"] description];
+    if (!app_version.length)
+        app_version = [[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"] description];
+    NSDictionary *params =
+    @{
+            //激活信息
+            @"subscription":@{
+                @"app_code":@"com.brother.pdfreaderpro.ai",
+#if VERSION_DMG
+                @"cdkey":info[@"cdkey"]?:@"",
+#else
+                @"receipt_str":info[@"receipt_str"]?:@""
+#endif
+            },
+            //设备信息
+            @"device":@{
+                @"app_name":[self bundleIdentify]?:@"",
+                @"unique_sn":[self udid]?:@"",
+                @"model":GetProductName()?:@"",
+                @"os":GetSystemVersion()?:@"",
+                @"time_zone":[[NSTimeZone localTimeZone] localizedName:NSTimeZoneNameStyleShortDaylightSaving locale:[NSLocale currentLocale]]?:@"",
+                @"language":[[NSLocale currentLocale] localeIdentifier]?:@"",
+                @"app_version":app_version?:@"",
+                @"platform":platform?:@"DMG"
+            }
+    };
+    NSMutableData *postData = [VerificationManager mutableDataWithDic:params];
+    
+    //Send Request
+    NSString *urlString = [kVerificationServer stringByAppendingString:@"api/auth_devices/activate"];
+    NSURL *url = [NSURL URLWithString:urlString];
+    ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
+    
+    request.requestMethod = @"POST";
+    [request setPostBody:postData];
+    NSString *postLength = [NSString stringWithFormat:@"%ld", (unsigned long)[postData length]];
+    NSMutableDictionary *requestHeaders = [NSMutableDictionary dictionaryWithObjectsAndKeys:
+                                           postLength, @"Content-Length", nil];
+    request.defaultResponseEncoding = NSUTF8StringEncoding;
+    
+    [request setRequestHeaders:requestHeaders];
+    [request addRequestHeader:@"Content-Type" value:@"application/json"];
+    [request addRequestHeader:@"Accept" value:@"application/vnd.api+json;version=1"];
+    
+    __block void(^processRequest)(void) = ^{
+        dispatch_async(dispatch_get_main_queue(), ^{
+            NSDictionary *info = [[request.responseString objectFromJSONString] filterNullObject];
+            
+            NSError *error = request.error;
+            if (info && [info isKindOfClass:[NSDictionary class]]) {
+                if ([info valueForKey:@"errors"]) {
+                    error = [NSError errorWithDomain:@"激活失败"
+                                                code:ActivityErrorTypeUnknow
+                                            userInfo:info];
+                }else if ([info valueForKey:@"error"]) {
+                    error = [NSError errorWithDomain:@"激活失败"
+                                                code:ActivityErrorTypeUnknow
+                                            userInfo:info];
+                }
+            }else {
+                if(error) {
+                    error = [NSError errorWithDomain:error.domain code:ActivityErrorTypeNetworkDisable userInfo:error.userInfo];
+                } else {
+                    error = [NSError errorWithDomain:@"激活失败"
+                                                code:ActivityErrorTypeUnknow
+                                            userInfo:@{}];
+                }
+            }
+             
+            if (!error) {
+                NSMutableDictionary *dic = [[NSMutableDictionary alloc] init];
+                AIInfo *aiInfo = [[AIInfo alloc] initWithDict:info[@"data"]];
+                self.aiInfo = aiInfo;
+                self.aiInfoValid = YES;
+                
+                NSString *notificationName = (NSString *)kDeviceAIStatusChangeNotification;
+                [[NSNotificationCenter defaultCenter] postNotificationName:notificationName
+                                                                    object:self
+                                                                  userInfo:info];
+            }
+            if (tComplention)
+                tComplention(info, error);
+        });
+    };
+    [request setFailedBlock:^{
+        processRequest();
+    }];
+    [request setCompletionBlock:^{
+        processRequest();
+    }];
+    [request startAsynchronous];
+    
+}
+
+- (void)fetchAIInfoWithComplention:(AIActivityComplention)complention {
+    __block AIActivityComplention tComplention = complention;
+    __block AIInfoManager *weak_self = self;
+    
+    NSString *platform = @"DMG";
+#if VERSION_DMG
+    platform = @"DMG";
+#else
+    platform = @"AiStore";
+#endif
+    
+    //Process Params
+    NSString *app_version = [[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"] description];
+    if (!app_version.length)
+        app_version = [[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"] description];
+    NSDictionary *params = @{@"unique_sn":[self udid]?:@"",
+                             @"app_name":[self bundleIdentify]?:@"",
+                             @"platform":platform?:@"DMG",
+#if VERSION_DMG
+#else
+                             @"receipt_str":[IAPProductsManager defaultManager].temptransactioReceipt?:@""
+#endif
+    };
+    
+    NSMutableData *postData = [VerificationManager mutableDataWithDic:params];
+    
+    //Send Request
+    NSString *urlString = [kVerificationServer stringByAppendingString:@"api/getAiInfo"];
+    NSURL *url = [NSURL URLWithString:urlString];
+    ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
+    
+    request.requestMethod = @"POST";
+    [request setPostBody:postData];
+    NSString *postLength = [NSString stringWithFormat:@"%ld", (unsigned long)[postData length]];
+    NSMutableDictionary *requestHeaders = [NSMutableDictionary dictionaryWithObjectsAndKeys:
+                                           postLength, @"Content-Length", nil];
+    request.defaultResponseEncoding = NSUTF8StringEncoding;
+    
+    [request setRequestHeaders:requestHeaders];
+    [request addRequestHeader:@"Content-Type" value:@"application/json"];
+    [request addRequestHeader:@"Accept" value:@"application/vnd.api+json;version=1"];
+    
+    __block void(^processRequest)(void) = ^{
+        dispatch_async(dispatch_get_main_queue(), ^{
+            NSDictionary *info = [[request.responseString objectFromJSONString] filterNullObject];
+            
+            BOOL isReceiptNeverUsed = NO;//当前票据未激活设备(针对AppStore版购买过但未激活的情况)
+            
+            NSError *error = request.error;
+            if (info && [info isKindOfClass:[NSDictionary class]]) {
+                if ([info valueForKey:@"errors"]) {
+                    error = [NSError errorWithDomain:@"激活失败"
+                                                code:ActivityErrorTypeUnknow
+                                            userInfo:info];
+                    NSDictionary *errorsDict = ((NSArray *)[info valueForKey:@"errors"]).firstObject;
+                    if ([errorsDict valueForKey:@"attribute"]) {
+                        if ([[errorsDict valueForKey:@"attribute"] isEqualToString:@"inactivated"]) {
+                            isReceiptNeverUsed = YES;
+                        } else if ([[errorsDict valueForKey:@"attribute"] isEqualToString:@"device_expired"]) {
+                            self.aiInfoValid = NO;
+                        }
+                    }
+                }else if ([info valueForKey:@"error"]) {
+                    error = [NSError errorWithDomain:@"激活失败"
+                                                code:ActivityErrorTypeUnknow
+                                            userInfo:info];
+                }
+            }else {
+                if(error) {
+                    error = [NSError errorWithDomain:error.domain code:ActivityErrorTypeNetworkDisable userInfo:error.userInfo];
+                } else {
+                    error = [NSError errorWithDomain:@"激活失败"
+                                                code:ActivityErrorTypeUnknow
+                                            userInfo:@{}];
+                }
+            }
+            if (!error) {
+                AIInfo *aiInfo = [[AIInfo alloc] initWithDict:info[@"data"]];
+                self.aiInfo = aiInfo;
+                self.aiInfoValid = YES;
+                
+                NSString *notificationName = (NSString *)kDeviceAIStatusChangeNotification;
+                [[NSNotificationCenter defaultCenter] postNotificationName:notificationName
+                                                                    object:self
+                                                                       userInfo:info];
+            }
+            
+#if VERSION_DMG
+#else
+            if (isReceiptNeverUsed && [IAPProductsManager defaultManager].temptransactioReceipt) {
+                //当前票据未激活设备(针对AppStore版购买过但未激活的情况)
+                BOOL didPurchase = NO;
+#if VERSION_FREE
+                if ([IAPProductsManager defaultManager].liteAIProduct.isSubscribed) {
+                    didPurchase = YES;
+                }
+#else
+                if ([IAPProductsManager defaultManager].proAIProduct.isSubscribed) {
+                    didPurchase = YES;
+                }
+#endif
+                if (didPurchase) {
+                    NSDictionary *infoDic = @{@"receipt_str":[IAPProductsManager defaultManager].temptransactioReceipt};
+                    [self activateAIWithInfo:infoDic
+                                 complention:^(NSDictionary * _Nonnull info, NSError * _Nonnull error) {
+                        
+                    }];
+                }
+            }
+#endif
+            
+            if (tComplention)
+                tComplention(info, error);
+            
+        });
+    };
+    [request setFailedBlock:^{
+        processRequest();
+    }];
+    [request setCompletionBlock:^{
+        processRequest();
+    }];
+    [request startAsynchronous];
+}
+
+- (void)restoreAIWithInfo:(NSDictionary *)info
+              complention:(AIActivityComplention)complention {
+    
+    __block AIActivityComplention tComplention = complention;
+    __block AIInfoManager *weak_self = self;
+    
+    NSString *platform = @"DMG";
+#if VERSION_DMG
+    platform = @"DMG";
+#else
+    platform = @"AiStore";
+#endif
+    
+    //Process Params
+    NSString *app_version = [[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"] description];
+    if (!app_version.length)
+        app_version = [[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"] description];
+    NSDictionary *params = @{@"unique_sn":[self udid]?:@"",
+                             @"app_name":[self bundleIdentify]?:@"",
+                             @"receipt_str":info[@"receipt_str"]?:@"",
+                             @"platform":platform?:@"DMG"};
+    
+    NSMutableData *postData = [VerificationManager mutableDataWithDic:params];
+    
+    //Send Request
+    NSString *urlString = [kVerificationServer stringByAppendingString:@"api/changeStoreBind"];
+    NSURL *url = [NSURL URLWithString:urlString];
+    ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
+    
+    request.requestMethod = @"POST";
+    [request setPostBody:postData];
+    NSString *postLength = [NSString stringWithFormat:@"%ld", (unsigned long)[postData length]];
+    NSMutableDictionary *requestHeaders = [NSMutableDictionary dictionaryWithObjectsAndKeys:
+                                           postLength, @"Content-Length", nil];
+    request.defaultResponseEncoding = NSUTF8StringEncoding;
+    
+    [request setRequestHeaders:requestHeaders];
+    [request addRequestHeader:@"Content-Type" value:@"application/json"];
+    [request addRequestHeader:@"Accept" value:@"application/vnd.api+json;version=1"];
+    
+    __block void(^processRequest)(void) = ^{
+        dispatch_async(dispatch_get_main_queue(), ^{
+            NSDictionary *info = [[request.responseString objectFromJSONString] filterNullObject];
+            
+            NSError *error = request.error;
+            if (info && [info isKindOfClass:[NSDictionary class]]) {
+                if ([info valueForKey:@"errors"]) {
+                    error = [NSError errorWithDomain:@"激活失败"
+                                                code:ActivityErrorTypeUnknow
+                                            userInfo:info];
+                }else if ([info valueForKey:@"error"]) {
+                    error = [NSError errorWithDomain:@"激活失败"
+                                                code:ActivityErrorTypeUnknow
+                                            userInfo:info];
+                }
+            }else {
+                if(error) {
+                    error = [NSError errorWithDomain:error.domain code:ActivityErrorTypeNetworkDisable userInfo:error.userInfo];
+                } else {
+                    error = [NSError errorWithDomain:@"激活失败"
+                                                code:ActivityErrorTypeUnknow
+                                            userInfo:@{}];
+                }
+            }
+             
+            if (!error) {
+                AIInfo *aiInfo = [[AIInfo alloc] initWithDict:info[@"data"]];
+                self.aiInfo = aiInfo;
+                
+                NSString *notificationName = (NSString *)kDeviceAIStatusChangeNotification;
+                [[NSNotificationCenter defaultCenter] postNotificationName:notificationName
+                                                                    object:self
+                                                                  userInfo:info];
+            }
+            
+            if (tComplention)
+                tComplention(info, error);
+        });
+    };
+    [request setFailedBlock:^{
+        processRequest();
+    }];
+    [request setCompletionBlock:^{
+        processRequest();
+    }];
+    [request startAsynchronous];
+    
+}
+
+@end
+
+
+@interface AIInfo ()
+
+@property (nonatomic, readwrite) NSDictionary *infoDict;
+
+@property (nonatomic, readwrite) BOOL validAIFunction;
+
+@property (nonatomic, readwrite) NSString *cdKey;
+
+@property (nonatomic, readwrite) int totalToken;
+
+@property (nonatomic, readwrite) int usedTimes;
+
+@property (nonatomic, readwrite) NSDate *startDate;
+
+@property (nonatomic, readwrite) NSDate *endDate;
+
+@property (nonatomic, readwrite) int remainingDays;
+
+@end
+
+@implementation AIInfo
+
+- (id)initWithDict:(NSDictionary *)dict {
+    self = [super init];
+    if (self) {
+        self.infoDict = dict;
+        
+        [self setUp];
+    }
+    return self;
+}
+
+- (id)init {
+    self = [super init];
+    if (self) {
+        [self setUp];
+    }
+    return self;
+}
+
+- (void)setUp {
+    self.cdKey = self.infoDict[@"cdkey"]?:@"";
+    self.totalToken = [self.infoDict[@"total"] intValue];
+    self.usedTimes = [self.infoDict[@"used_times"] intValue];
+    self.remainingDays = [self.infoDict[@"remaining_days"] intValue];
+    
+    if (self.infoDict[@"start_date"]) {
+        NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
+        [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
+        self.startDate = [formatter dateFromString:self.infoDict[@"start_date"]];
+    }
+    if (self.infoDict[@"end_date"]) {
+        NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
+        [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
+        self.endDate = [formatter dateFromString:self.infoDict[@"end_date"]];
+    }
+}
+
+- (BOOL)validAIFunction {
+    CGFloat timeInterval = self.endDate.timeIntervalSinceNow;
+    if (timeInterval > 0) {
+        return YES;
+    } else {
+        return NO;
+    }
+}
+
+@end

+ 18 - 3
PDF Office/PDF Master/Class/Purchase/DMG/Verification/VerificationManager/VerificationManager.h

@@ -9,15 +9,23 @@
 //
 //
 
 
 #import <Foundation/Foundation.h>
 #import <Foundation/Foundation.h>
+//#import "ASIFormDataRequest.h"
+//#import "JSONKit.h"
 
 
-#define kTestMode   0
+#define kTestMode   1
 
 
 #if kTestMode
 #if kTestMode
+
 #define kVerificationServer         @"http://test-store.kdan.cn:3018/"
 #define kVerificationServer         @"http://test-store.kdan.cn:3018/"
 #define kWebServerLink              NSLocalizedString(@"http://test-pdf-pro.kdan.cn:3021", nil)
 #define kWebServerLink              NSLocalizedString(@"http://test-pdf-pro.kdan.cn:3021", nil)
+#define kAIStoreServerLink          @"http://test-pdf-pro.kdan.cn:3021/store"
+
 #else
 #else
+
 #define kVerificationServer         @"https://store.pdfreaderpro.com/"
 #define kVerificationServer         @"https://store.pdfreaderpro.com/"
 #define kWebServerLink              NSLocalizedString(@"http://www.pdfreaderpro.com/store", nil)
 #define kWebServerLink              NSLocalizedString(@"http://www.pdfreaderpro.com/store", nil)
+#define kAIStoreServerLink          @"http://www.pdfreaderpro.com/store"
+
 #endif
 #endif
 
 
 #define kFetchLicenseCodeString     [NSString stringWithFormat:@"%@/%@", kWebServerLink, @"store"]
 #define kFetchLicenseCodeString     [NSString stringWithFormat:@"%@/%@", kWebServerLink, @"store"]
@@ -26,6 +34,7 @@
 #define kCheckUpdateURLString       [NSString stringWithFormat:@"%@api/auth_devices/latest_version?lang=en&app_code=%@", kVerificationServer, [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleIdentifier"]?:@""]
 #define kCheckUpdateURLString       [NSString stringWithFormat:@"%@api/auth_devices/latest_version?lang=en&app_code=%@", kVerificationServer, [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleIdentifier"]?:@""]
 #define kFetchSysConfigInfoString   [NSString stringWithFormat:@"%@/%@", kVerificationServer, @"api/sys_configs"]
 #define kFetchSysConfigInfoString   [NSString stringWithFormat:@"%@/%@", kVerificationServer, @"api/sys_configs"]
 
 
+
 ///激活
 ///激活
 typedef enum {
 typedef enum {
     ActivityErrorTypeCDKeyEmpty,//CD Key为空
     ActivityErrorTypeCDKeyEmpty,//CD Key为空
@@ -40,7 +49,7 @@ typedef enum {
 }ActivityErrorType;
 }ActivityErrorType;
 
 
 typedef enum {
 typedef enum {
-    ActivityStatusNone = 0,
+    ActivityStatusNone,
     ActivityStatusTrial,        //试用
     ActivityStatusTrial,        //试用
     ActivityStatusVerification, //激活
     ActivityStatusVerification, //激活
     ActivityStatusTrialExpire,  //试用过期
     ActivityStatusTrialExpire,  //试用过期
@@ -49,7 +58,10 @@ typedef enum {
 }ActivityStatus;
 }ActivityStatus;
 
 
 typedef void(^ActivityComplention)(ActivityStatus status, NSDictionary *info, NSError *error);
 typedef void(^ActivityComplention)(ActivityStatus status, NSDictionary *info, NSError *error);
+
+
 @interface VerificationManager : NSObject
 @interface VerificationManager : NSObject
+
 @property (nonatomic) BOOL autoVerification; //激活码定期自动校验,默认隔一小时校验一次
 @property (nonatomic) BOOL autoVerification; //激活码定期自动校验,默认隔一小时校验一次
 @property (nonatomic, readonly) ActivityStatus status;
 @property (nonatomic, readonly) ActivityStatus status;
 @property (nonatomic, readonly) BOOL needUpgradeLicense;
 @property (nonatomic, readonly) BOOL needUpgradeLicense;
@@ -69,6 +81,8 @@ typedef void(^ActivityComplention)(ActivityStatus status, NSDictionary *info, NS
 
 
 + (VerificationManager *)defaultManager;
 + (VerificationManager *)defaultManager;
 
 
++ (NSMutableData*)mutableDataWithDic:(NSDictionary*)dic;
+
 ///** 跳转到 Built to Connect 官网商城购买界面,各App可自行跳转到对应激活购买界面
 ///** 跳转到 Built to Connect 官网商城购买界面,各App可自行跳转到对应激活购买界面
 // */
 // */
 //- (void)fetchVerificationCode;
 //- (void)fetchVerificationCode;
@@ -121,7 +135,6 @@ typedef void(^ActivityComplention)(ActivityStatus status, NSDictionary *info, NS
                     code:(NSString*)code
                     code:(NSString*)code
              complention:(ActivityComplention)complention;
              complention:(ActivityComplention)complention;
 
 
-
 @end
 @end
 
 
 #pragma mark - Data Parse
 #pragma mark - Data Parse
@@ -149,6 +162,8 @@ typedef void(^ActivityComplention)(ActivityStatus status, NSDictionary *info, NS
 
 
 @end
 @end
 
 
+
+
 /// Notification
 /// Notification
 extern NSString *kDeviceVerifyFinishNotification;//调用验证接口结束后发送通知
 extern NSString *kDeviceVerifyFinishNotification;//调用验证接口结束后发送通知
 
 

+ 16 - 5
PDF Office/PDF Master/Class/Purchase/DMG/Verification/VerificationManager/VerificationManager.m

@@ -61,6 +61,7 @@ static VerificationManager *__verificationManager = nil;
         [self verificationWithComplention:^(ActivityStatus status, NSDictionary *info, NSError *error) {
         [self verificationWithComplention:^(ActivityStatus status, NSDictionary *info, NSError *error) {
             
             
         }];
         }];
+        
     });
     });
     
     
     return self;
     return self;
@@ -226,7 +227,8 @@ static VerificationManager *__verificationManager = nil;
                       @"os":GetSystemVersion()?:@"",
                       @"os":GetSystemVersion()?:@"",
                       @"time_zone":[[NSTimeZone localTimeZone] localizedName:NSTimeZoneNameStyleShortDaylightSaving locale:[NSLocale currentLocale]]?:@"",
                       @"time_zone":[[NSTimeZone localTimeZone] localizedName:NSTimeZoneNameStyleShortDaylightSaving locale:[NSLocale currentLocale]]?:@"",
                       @"language":[[NSLocale currentLocale] localeIdentifier]?:@"",
                       @"language":[[NSLocale currentLocale] localeIdentifier]?:@"",
-                      @"app_version":app_version?:@""
+                      @"app_version":app_version?:@"",
+                      @"platform":@"DMG"
                       }
                       }
               }
               }
       };
       };
@@ -235,9 +237,6 @@ static VerificationManager *__verificationManager = nil;
     //Send Request
     //Send Request
     NSString *urlString = [kVerificationServer stringByAppendingString:@"api/auth_devices/activate"];
     NSString *urlString = [kVerificationServer stringByAppendingString:@"api/auth_devices/activate"];
     NSURL *url = [NSURL URLWithString:urlString];
     NSURL *url = [NSURL URLWithString:urlString];
-    
-//    KMRequestServer.requestServer
-    
     ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
     ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
     
     
     request.requestMethod = @"POST";
     request.requestMethod = @"POST";
@@ -344,13 +343,24 @@ static VerificationManager *__verificationManager = nil;
                 app_version = [[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"] description];
                 app_version = [[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"] description];
 
 
                 NSString *platform = @"DMG";
                 NSString *platform = @"DMG";
+#if VERSION_FREE
+            
+#if VERSION_DMG
+            
+#else
+            platform = @"AppleStore";
+#endif
+    
+#else
+            platform = @"AppleStorePro";
+#endif
             
             
             NSDictionary *params =
             NSDictionary *params =
             @{
             @{
               @"data":@{
               @"data":@{
                       //验证信息
                       //验证信息
                       @"subscription":@{
                       @"subscription":@{
-                              @"app_code":@"com.brother.pdfreaderprofree.mac",
+                              @"app_code":[self bundleIdentify]?:@"",
                               //                      @"email":info[@"email"]?:@"",
                               //                      @"email":info[@"email"]?:@"",
                               //                      @"cdkey":info[@"cdkey"]?:@"",
                               //                      @"cdkey":info[@"cdkey"]?:@"",
                               },
                               },
@@ -1052,3 +1062,4 @@ static VerificationManager *__verificationManager = nil;
 }
 }
 
 
 @end
 @end
+

+ 5 - 0
PDF Office/PDF Master/Class/Purchase/IAPProductsManager.h

@@ -47,9 +47,14 @@ extern NSString * const KMIAPSubscriptionLoadedNotification;
 @property (nonatomic,readonly) IAPProduct *allAccessProduct;
 @property (nonatomic,readonly) IAPProduct *allAccessProduct;
 @property (nonatomic,readonly) IAPProduct *PDFToOfficeProduct;
 @property (nonatomic,readonly) IAPProduct *PDFToOfficeProduct;
 
 
+@property (nonatomic, readonly) IAPProduct *liteAIProduct;
+@property (nonatomic, readonly) IAPProduct *proAIProduct;
+
 @property (nonatomic,readonly) IAPProduct *DMGAllAccessProduct;
 @property (nonatomic,readonly) IAPProduct *DMGAllAccessProduct;
 @property (nonatomic,readonly) IAPProduct *DMGPDFToOfficeProduct;
 @property (nonatomic,readonly) IAPProduct *DMGPDFToOfficeProduct;
 
 
+@property (nonatomic, readonly) NSString *temptransactioReceipt;
+
 + (IAPProductsManager *)defaultManager;
 + (IAPProductsManager *)defaultManager;
 
 
 - (void)initIAP;
 - (void)initIAP;

+ 141 - 54
PDF Office/PDF Master/Class/Purchase/IAPProductsManager.m

@@ -32,6 +32,8 @@ NSString * const KMNewMonthLicenseProductIdentifier = @"com.pdfreaderpro.mac_fre
 //NSString * const KMNewMonthLicenseProductIdentifier = @"com.pdftechnologies.pdfreader.mac.yearly.002.Test";
 //NSString * const KMNewMonthLicenseProductIdentifier = @"com.pdftechnologies.pdfreader.mac.yearly.002.Test";
 NSString * const KMAllLicenseProductIdentifier = @"com.pdfreaderpro.mac_free.member.all_access_pack_permanent_license.001";
 NSString * const KMAllLicenseProductIdentifier = @"com.pdfreaderpro.mac_free.member.all_access_pack_permanent_license.001";
 NSString * const KMPDFToOfficeLicenseProductIdentifier = @"com.pdfreaderpro.mac.member.pdf_to_office_pack_permanent_license.001";
 NSString * const KMPDFToOfficeLicenseProductIdentifier = @"com.pdfreaderpro.mac.member.pdf_to_office_pack_permanent_license.001";
+NSString * const KMAILicenseProductIdentifier = @"com.pdfreaderpro.mac_free.ai_1_month_subscription";
+NSString * const KMProAILicenseProductIdentifier = @"com.pdfreaderpro.mac.ai_1_month_subscription";
 
 
 NSString * const KMIAPProductLoadedNotification = @"KMIAPProductLoadedNotification";
 NSString * const KMIAPProductLoadedNotification = @"KMIAPProductLoadedNotification";
 NSString * const KMIAPProductFailedNotification = @"KMIAPProductFailedNotification";
 NSString * const KMIAPProductFailedNotification = @"KMIAPProductFailedNotification";
@@ -63,7 +65,14 @@ NSString * const KMIAPSubscriptionLoadedNotification = @"KMIAPSubscriptionLoaded
 #pragma mark - Init Methods
 #pragma mark - Init Methods
 
 
 - (void)dealloc {
 - (void)dealloc {
+#if !VERSION_DMG
+    [_product release];
+#endif
+    [_productIdentifier release];
     
     
+    [_priceNumber release];
+    [_offersPriceNumber release];
+    [super dealloc];
 }
 }
 
 
 #pragma mark - Public Methods
 #pragma mark - Public Methods
@@ -133,7 +142,7 @@ NSString * const KMIAPSubscriptionLoadedNotification = @"KMIAPSubscriptionLoaded
 #if !VERSION_DMG
 #if !VERSION_DMG
     SKProduct *product = self.product;
     SKProduct *product = self.product;
     if (product && [product.productIdentifier isEqualToString:self.productIdentifier]) {
     if (product && [product.productIdentifier isEqualToString:self.productIdentifier]) {
-        NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
+        NSNumberFormatter *numberFormatter = [[[NSNumberFormatter alloc] init] autorelease];
         [numberFormatter setFormatterBehavior:NSNumberFormatterBehavior10_4];
         [numberFormatter setFormatterBehavior:NSNumberFormatterBehavior10_4];
         [numberFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];
         [numberFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];
         [numberFormatter setLocale:product.priceLocale];
         [numberFormatter setLocale:product.priceLocale];
@@ -160,6 +169,9 @@ NSString * const KMIAPSubscriptionLoadedNotification = @"KMIAPSubscriptionLoaded
 @property (nonatomic,retain) IAPProduct *allAccessProduct;
 @property (nonatomic,retain) IAPProduct *allAccessProduct;
 @property (nonatomic,retain) IAPProduct *PDFToOfficeProduct;
 @property (nonatomic,retain) IAPProduct *PDFToOfficeProduct;
 
 
+@property (nonatomic, retain) IAPProduct *liteAIProduct;
+@property (nonatomic, retain) IAPProduct *proAIProduct;
+
 @property (nonatomic,retain) IAPProduct *DMGAllAccessProduct;
 @property (nonatomic,retain) IAPProduct *DMGAllAccessProduct;
 @property (nonatomic,retain) IAPProduct *DMGPDFToOfficeProduct;
 @property (nonatomic,retain) IAPProduct *DMGPDFToOfficeProduct;
 
 
@@ -167,6 +179,8 @@ NSString * const KMIAPSubscriptionLoadedNotification = @"KMIAPSubscriptionLoaded
 
 
 @property (nonatomic,assign) BOOL isPurchasing;
 @property (nonatomic,assign) BOOL isPurchasing;
 
 
+@property (nonatomic, readwrite) NSString *temptransactioReceipt;
+
 @end
 @end
 
 
 @implementation IAPProductsManager
 @implementation IAPProductsManager
@@ -176,7 +190,7 @@ NSString * const KMIAPSubscriptionLoadedNotification = @"KMIAPSubscriptionLoaded
 - (id)init {
 - (id)init {
     if (self = [super init]) {
     if (self = [super init]) {
         BOOL isOffers = NO;
         BOOL isOffers = NO;
-        NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
+        NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
         dateFormatter.dateFormat = @"yyyy-MM-dd";
         dateFormatter.dateFormat = @"yyyy-MM-dd";
         NSDate *offersDate = [dateFormatter dateFromString:@"2019-07-20"];
         NSDate *offersDate = [dateFormatter dateFromString:@"2019-07-20"];
         NSDate *date = [NSDate date];
         NSDate *date = [NSDate date];
@@ -185,12 +199,12 @@ NSString * const KMIAPSubscriptionLoadedNotification = @"KMIAPSubscriptionLoaded
         }
         }
 #if VERSION_DMG
 #if VERSION_DMG
         // 桌机版
         // 桌机版
-        self.DMGAllAccessProduct = [[IAPProduct alloc] init];
+        self.DMGAllAccessProduct = [[[IAPProduct alloc] init] autorelease];
         self.DMGAllAccessProduct.priceNumber = @(79.99);
         self.DMGAllAccessProduct.priceNumber = @(79.99);
         self.DMGAllAccessProduct.offersPriceNumber = @(59.99);
         self.DMGAllAccessProduct.offersPriceNumber = @(59.99);
         self.DMGAllAccessProduct.isOffers = isOffers;
         self.DMGAllAccessProduct.isOffers = isOffers;
         
         
-        self.DMGPDFToOfficeProduct = [[IAPProduct alloc] init];
+        self.DMGPDFToOfficeProduct = [[[IAPProduct alloc] init] autorelease];
         self.DMGPDFToOfficeProduct.priceNumber = @(19.99);
         self.DMGPDFToOfficeProduct.priceNumber = @(19.99);
         self.DMGPDFToOfficeProduct.offersPriceNumber = @(9.99);
         self.DMGPDFToOfficeProduct.offersPriceNumber = @(9.99);
         self.DMGPDFToOfficeProduct.isOffers = isOffers;
         self.DMGPDFToOfficeProduct.isOffers = isOffers;
@@ -198,32 +212,39 @@ NSString * const KMIAPSubscriptionLoadedNotification = @"KMIAPSubscriptionLoaded
         
         
 #if VERSION_FREE
 #if VERSION_FREE
         // 免费版
         // 免费版
-        self.monthProduct = [[IAPProduct alloc] init];
+        self.monthProduct = [[[IAPProduct alloc] init] autorelease];
         self.monthProduct.productIdentifier = KMMonthLicenseProductIdentifier;
         self.monthProduct.productIdentifier = KMMonthLicenseProductIdentifier;
         self.monthProduct.priceNumber = @(29.99);
         self.monthProduct.priceNumber = @(29.99);
         
         
-        self.newlyMonthProduct = [[IAPProduct alloc] init];
+        self.newlyMonthProduct = [[[IAPProduct alloc] init] autorelease];
         self.newlyMonthProduct.productIdentifier = KMNewMonthLicenseProductIdentifier;
         self.newlyMonthProduct.productIdentifier = KMNewMonthLicenseProductIdentifier;
         self.newlyMonthProduct.priceNumber = @(39.99);
         self.newlyMonthProduct.priceNumber = @(39.99);
         self.newlyMonthProduct.offersPriceNumber = @(29.99);
         self.newlyMonthProduct.offersPriceNumber = @(29.99);
         self.newlyMonthProduct.isOffers = isOffers;
         self.newlyMonthProduct.isOffers = isOffers;
         
         
-        self.allAccessProduct = [[IAPProduct alloc] init];
+        self.allAccessProduct = [[[IAPProduct alloc] init] autorelease];
         self.allAccessProduct.productIdentifier = KMAllLicenseProductIdentifier;
         self.allAccessProduct.productIdentifier = KMAllLicenseProductIdentifier;
         self.allAccessProduct.priceNumber = @(79.99);
         self.allAccessProduct.priceNumber = @(79.99);
         self.allAccessProduct.offersPriceNumber = @(59.99);
         self.allAccessProduct.offersPriceNumber = @(59.99);
         self.allAccessProduct.isOffers = isOffers;
         self.allAccessProduct.isOffers = isOffers;
         
         
+        self.liteAIProduct = [[[IAPProduct alloc] init] autorelease];
+        self.liteAIProduct.productIdentifier = KMAILicenseProductIdentifier;
+        self.liteAIProduct.priceNumber = @(14.99);
+        self.liteAIProduct.offersPriceNumber = @(14.99);
+        self.liteAIProduct.isOffers = isOffers;
+        
         if ([[NSUserDefaults standardUserDefaults] objectForKey:@"allAccessProduct.isSubscribed"]) {
         if ([[NSUserDefaults standardUserDefaults] objectForKey:@"allAccessProduct.isSubscribed"]) {
             self.allAccessProduct.isSubscribed = [[[NSUserDefaults standardUserDefaults] objectForKey:@"allAccessProduct.isSubscribed"] boolValue];
             self.allAccessProduct.isSubscribed = [[[NSUserDefaults standardUserDefaults] objectForKey:@"allAccessProduct.isSubscribed"] boolValue];
         }
         }
         
         
         self.productIdentifiers = @[KMMonthLicenseProductIdentifier,
         self.productIdentifiers = @[KMMonthLicenseProductIdentifier,
                                     KMNewMonthLicenseProductIdentifier,
                                     KMNewMonthLicenseProductIdentifier,
-                                    KMAllLicenseProductIdentifier];
+                                    KMAllLicenseProductIdentifier,
+                                    KMAILicenseProductIdentifier];
 #else
 #else
         // 付费版
         // 付费版
-        self.PDFToOfficeProduct = [[IAPProduct alloc] init];
+        self.PDFToOfficeProduct = [[[IAPProduct alloc] init] autorelease];
         self.PDFToOfficeProduct.productIdentifier = KMPDFToOfficeLicenseProductIdentifier;
         self.PDFToOfficeProduct.productIdentifier = KMPDFToOfficeLicenseProductIdentifier;
         self.PDFToOfficeProduct.priceNumber = @(19.99);
         self.PDFToOfficeProduct.priceNumber = @(19.99);
         self.PDFToOfficeProduct.offersPriceNumber = @(9.99);
         self.PDFToOfficeProduct.offersPriceNumber = @(9.99);
@@ -233,7 +254,15 @@ NSString * const KMIAPSubscriptionLoadedNotification = @"KMIAPSubscriptionLoaded
             self.PDFToOfficeProduct.isSubscribed = [[[NSUserDefaults standardUserDefaults] objectForKey:@"PDFToOfficeProduct.isSubscribed"] boolValue];
             self.PDFToOfficeProduct.isSubscribed = [[[NSUserDefaults standardUserDefaults] objectForKey:@"PDFToOfficeProduct.isSubscribed"] boolValue];
         }
         }
         
         
-        self.productIdentifiers = @[KMPDFToOfficeLicenseProductIdentifier];
+        self.proAIProduct = [[[IAPProduct alloc] init] autorelease];
+        self.proAIProduct.productIdentifier = KMProAILicenseProductIdentifier;
+        self.proAIProduct.priceNumber = @(14.99);
+        self.proAIProduct.offersPriceNumber = @(14.99);
+        self.proAIProduct.isOffers = isOffers;
+        
+        
+        self.productIdentifiers = @[KMPDFToOfficeLicenseProductIdentifier,
+                                    KMProAILicenseProductIdentifier];
 #endif
 #endif
         
         
 #endif
 #endif
@@ -245,7 +274,18 @@ NSString * const KMIAPSubscriptionLoadedNotification = @"KMIAPSubscriptionLoaded
 #if !VERSION_DMG
 #if !VERSION_DMG
     [[SKPaymentQueue defaultQueue] removeTransactionObserver:self];
     [[SKPaymentQueue defaultQueue] removeTransactionObserver:self];
 #endif
 #endif
-
+    [_monthProduct release];
+    [_newlyMonthProduct release];
+    [_allAccessProduct release];
+    [_PDFToOfficeProduct release];
+    [_liteAIProduct release];
+    [_proAIProduct release];
+    
+    [_DMGAllAccessProduct release];
+    [_DMGPDFToOfficeProduct release];
+    
+    [_productIdentifiers release];
+    [super dealloc];
 }
 }
 
 
 #pragma mark - Public Methods
 #pragma mark - Public Methods
@@ -255,9 +295,6 @@ NSString * const KMIAPSubscriptionLoadedNotification = @"KMIAPSubscriptionLoaded
     static dispatch_once_t pred;
     static dispatch_once_t pred;
     dispatch_once(&pred, ^{
     dispatch_once(&pred, ^{
         singleton = [[IAPProductsManager alloc] init];
         singleton = [[IAPProductsManager alloc] init];
-#if !VERSION_DMG
-        [singleton initIAP];
-#endif
     });
     });
     return singleton;
     return singleton;
 }
 }
@@ -271,7 +308,6 @@ NSString * const KMIAPSubscriptionLoadedNotification = @"KMIAPSubscriptionLoaded
 }
 }
 
 
 - (void)loadProducts {
 - (void)loadProducts {
-#if !VERSION_DMG
     if ([[NSUserDefaults standardUserDefaults] objectForKey:KMStoreReceipt]) {
     if ([[NSUserDefaults standardUserDefaults] objectForKey:KMStoreReceipt]) {
         NSDictionary *jsonResponse = [[NSUserDefaults standardUserDefaults] objectForKey:KMStoreReceipt];
         NSDictionary *jsonResponse = [[NSUserDefaults standardUserDefaults] objectForKey:KMStoreReceipt];
         [self fetchReceipt:jsonResponse];
         [self fetchReceipt:jsonResponse];
@@ -282,7 +318,6 @@ NSString * const KMIAPSubscriptionLoadedNotification = @"KMIAPSubscriptionLoaded
         [[NSNotificationCenter defaultCenter] postNotificationName:KMIAPSubscriptionLoadedNotification
         [[NSNotificationCenter defaultCenter] postNotificationName:KMIAPSubscriptionLoadedNotification
                                                             object:nil];
                                                             object:nil];
     }];
     }];
-#endif
 }
 }
 
 
 - (void)makeProduct:(IAPProduct *)iapProduct {
 - (void)makeProduct:(IAPProduct *)iapProduct {
@@ -393,7 +428,7 @@ NSString * const KMIAPSubscriptionLoadedNotification = @"KMIAPSubscriptionLoaded
     NSURL *receiptURL  = [[NSBundle mainBundle] appStoreReceiptURL];
     NSURL *receiptURL  = [[NSBundle mainBundle] appStoreReceiptURL];
     BOOL isPresent = [receiptURL checkResourceIsReachableAndReturnError:nil];
     BOOL isPresent = [receiptURL checkResourceIsReachableAndReturnError:nil];
     if (!isPresent) {
     if (!isPresent) {
-        SKReceiptRefreshRequest *refreshRequest = [[SKReceiptRefreshRequest alloc] init];
+        SKReceiptRefreshRequest *refreshRequest = [[[SKReceiptRefreshRequest alloc] init] autorelease];
         [refreshRequest start];
         [refreshRequest start];
         if (handler) {
         if (handler) {
             handler([NSError errorWithDomain:@"" code:0 userInfo:nil]);
             handler([NSError errorWithDomain:@"" code:0 userInfo:nil]);
@@ -413,6 +448,8 @@ NSString * const KMIAPSubscriptionLoadedNotification = @"KMIAPSubscriptionLoaded
     temptransactioReceipt = [temptransactioReceipt stringByReplacingOccurrencesOfString:@"\n" withString:@""];
     temptransactioReceipt = [temptransactioReceipt stringByReplacingOccurrencesOfString:@"\n" withString:@""];
     temptransactioReceipt = [temptransactioReceipt stringByReplacingOccurrencesOfString:@" " withString:@""];
     temptransactioReceipt = [temptransactioReceipt stringByReplacingOccurrencesOfString:@" " withString:@""];
     
     
+    self.temptransactioReceipt = temptransactioReceipt;
+    
     NSMutableDictionary *payLoad = [NSMutableDictionary dictionary];
     NSMutableDictionary *payLoad = [NSMutableDictionary dictionary];
     [payLoad setObject:temptransactioReceipt forKey:@"receipt_data"];
     [payLoad setObject:temptransactioReceipt forKey:@"receipt_data"];
     [payLoad setObject:bundleID forKey:@"app_code"];
     [payLoad setObject:bundleID forKey:@"app_code"];
@@ -450,31 +487,31 @@ NSString * const KMIAPSubscriptionLoadedNotification = @"KMIAPSubscriptionLoaded
 //    [task resume];
 //    [task resume];
     
     
     dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
     dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
-        ASIFormDataRequest *request = [[ASIFormDataRequest alloc] initWithURL:url];
-        request.defaultResponseEncoding = NSUTF8StringEncoding;
-        request.timeOutSeconds = 20;
-        request.numberOfTimesToRetryOnTimeout = 3;
-        [request setRequestMethod:@"POST"];
-        [request setRequestHeaders:[NSMutableDictionary dictionaryWithObject:@"application/json" forKey:@"Content-Type"]];
-        [request setPostBody:[IAPProductsManager mutableDataWithDic:payLoad]];
-        [request startSynchronous];
-        NSError *error = request.error;
-        BOOL isSuccessful = NO;
-        if (!error) {
-            NSDictionary *jsonResponse = [[request.responseString objectFromJSONString] filterNullObject];
-            isSuccessful = [self fetchReceipt:jsonResponse[@"data"]];
-            if (isSuccessful) {
-                [[NSUserDefaults standardUserDefaults] setObject:jsonResponse[@"data"] forKey:KMStoreReceipt];
-                [[NSUserDefaults standardUserDefaults] synchronize];
-            } else {
-                error = [[NSError alloc] init];
-            }
-        }
-        dispatch_async(dispatch_get_main_queue(), ^{
-            if (handler) {
-                handler(error);
-            }
-        });
+//        ASIFormDataRequest *request = [[[ASIFormDataRequest alloc] initWithURL:url] autorelease];
+//        request.defaultResponseEncoding = NSUTF8StringEncoding;
+//        request.timeOutSeconds = 20;
+//        request.numberOfTimesToRetryOnTimeout = 3;
+//        [request setRequestMethod:@"POST"];
+//        [request setRequestHeaders:[NSMutableDictionary dictionaryWithObject:@"application/json" forKey:@"Content-Type"]];
+//        [request setPostBody:[IAPProductsManager mutableDataWithDic:payLoad]];
+//        [request startSynchronous];
+//        NSError *error = request.error;
+//        BOOL isSuccessful = NO;
+//        if (!error) {
+//            NSDictionary *jsonResponse = [[request.responseString objectFromJSONString] filterNullObject];
+//            isSuccessful = [self fetchReceipt:jsonResponse[@"data"]];
+//            if (isSuccessful) {
+//                [[NSUserDefaults standardUserDefaults] setObject:jsonResponse[@"data"] forKey:KMStoreReceipt];
+//                [[NSUserDefaults standardUserDefaults] synchronize];
+//            } else {
+//                error = [[[NSError alloc] init] autorelease];
+//            }
+//        }
+//        dispatch_async(dispatch_get_main_queue(), ^{
+//            if (handler) {
+//                handler(error);
+//            }
+//        });
     });
     });
 }
 }
 
 
@@ -520,6 +557,16 @@ NSString * const KMIAPSubscriptionLoadedNotification = @"KMIAPSubscriptionLoaded
                     self.PDFToOfficeProduct.isSubscribed = quantity > 0 ? YES : NO;
                     self.PDFToOfficeProduct.isSubscribed = quantity > 0 ? YES : NO;
                 }
                 }
                 self.PDFToOfficeProduct.originalPurchased = YES;
                 self.PDFToOfficeProduct.originalPurchased = YES;
+            } else if ([product_id isEqualToString:self.liteAIProduct.productIdentifier]) {
+                if (!self.liteAIProduct.isSubscribed) {
+                    self.liteAIProduct.isSubscribed = quantity > 0 ? YES : NO;
+                }
+                self.liteAIProduct.originalPurchased = YES;
+            } else if ([product_id isEqualToString:self.proAIProduct.productIdentifier]) {
+                if (!self.proAIProduct.isSubscribed) {
+                    self.proAIProduct.isSubscribed = quantity > 0 ? YES : NO;
+                }
+                self.proAIProduct.originalPurchased = YES;
             }
             }
         }
         }
     }
     }
@@ -557,6 +604,16 @@ NSString * const KMIAPSubscriptionLoadedNotification = @"KMIAPSubscriptionLoaded
                     self.PDFToOfficeProduct.isSubscribed = quantity > 0 ? YES : NO;
                     self.PDFToOfficeProduct.isSubscribed = quantity > 0 ? YES : NO;
                 }
                 }
                 self.PDFToOfficeProduct.originalPurchased = YES;
                 self.PDFToOfficeProduct.originalPurchased = YES;
+            } else if ([product_id isEqualToString:self.liteAIProduct.productIdentifier]) {
+                if (!self.liteAIProduct.isSubscribed) {
+                    self.liteAIProduct.isSubscribed = quantity > 0 ? YES : NO;
+                }
+                self.liteAIProduct.originalPurchased = YES;
+            } else if ([product_id isEqualToString:self.proAIProduct.productIdentifier]) {
+                if (!self.proAIProduct.isSubscribed) {
+                    self.proAIProduct.isSubscribed = quantity > 0 ? YES : NO;
+                }
+                self.proAIProduct.originalPurchased = YES;
             }
             }
         }
         }
     }
     }
@@ -570,7 +627,7 @@ NSString * const KMIAPSubscriptionLoadedNotification = @"KMIAPSubscriptionLoaded
 
 
 - (void)loadAllProducts {
 - (void)loadAllProducts {
     NSSet *identifiers = [NSSet setWithArray:self.productIdentifiers];
     NSSet *identifiers = [NSSet setWithArray:self.productIdentifiers];
-    SKProductsRequest *productRequest = [[SKProductsRequest alloc] initWithProductIdentifiers:identifiers];
+    SKProductsRequest *productRequest = [[[SKProductsRequest alloc] initWithProductIdentifiers:identifiers] autorelease];
     productRequest.delegate = self;
     productRequest.delegate = self;
     [productRequest start];
     [productRequest start];
 }
 }
@@ -588,7 +645,7 @@ NSString * const KMIAPSubscriptionLoadedNotification = @"KMIAPSubscriptionLoaded
                                  NSLocalizedString(@"Purchase failed. Please check your settings and try again.", nil),
                                  NSLocalizedString(@"Purchase failed. Please check your settings and try again.", nil),
                                  NSLocalizedString(@"—》If you already completed the payment, simply click the \"Restore Previous Purchase\" button directly from the upgrade page to enable all the advanced features at no cost to you.", nil),
                                  NSLocalizedString(@"—》If you already completed the payment, simply click the \"Restore Previous Purchase\" button directly from the upgrade page to enable all the advanced features at no cost to you.", nil),
                                  NSLocalizedString(@"—》Due to Apple needs to confirm your purchase info, you may be required to sign in with your Apple ID. When you restore your purchase, make sure you use the same Apple ID that you previously used.", nil)];
                                  NSLocalizedString(@"—》Due to Apple needs to confirm your purchase info, you may be required to sign in with your Apple ID. When you restore your purchase, make sure you use the same Apple ID that you previously used.", nil)];
-        NSAlert *alert = [[NSAlert alloc] init];
+        NSAlert *alert = [[[NSAlert alloc] init] autorelease];
         [alert addButtonWithTitle:NSLocalizedString(@"OK", nil)];
         [alert addButtonWithTitle:NSLocalizedString(@"OK", nil)];
         [alert setAlertStyle:NSAlertStyleWarning];
         [alert setAlertStyle:NSAlertStyleWarning];
         [alert setMessageText:@""];
         [alert setMessageText:@""];
@@ -611,6 +668,16 @@ NSString * const KMIAPSubscriptionLoadedNotification = @"KMIAPSubscriptionLoaded
         self.PDFToOfficeProduct.isSubscribed = YES;
         self.PDFToOfficeProduct.isSubscribed = YES;
         [[NSUserDefaults standardUserDefaults] setObject:self.PDFToOfficeProduct.isSubscribed ? @"YES":@"NO" forKey:@"PDFToOfficeProduct.isSubscribed"];
         [[NSUserDefaults standardUserDefaults] setObject:self.PDFToOfficeProduct.isSubscribed ? @"YES":@"NO" forKey:@"PDFToOfficeProduct.isSubscribed"];
         [[NSUserDefaults standardUserDefaults] synchronize];
         [[NSUserDefaults standardUserDefaults] synchronize];
+    } else if ([productIdentifier isEqualToString:self.liteAIProduct.productIdentifier]) {
+        [self loadReceipt:^(NSError *error) {
+                    
+        }];
+        self.liteAIProduct.isSubscribed = YES;
+    } else if ([productIdentifier isEqualToString:self.proAIProduct.productIdentifier]) {
+        [self loadReceipt:^(NSError *error) {
+                    
+        }];
+        self.proAIProduct.isSubscribed = YES;
     }
     }
     if (!self.isPurchasing) {
     if (!self.isPurchasing) {
         return;
         return;
@@ -620,7 +687,7 @@ NSString * const KMIAPSubscriptionLoadedNotification = @"KMIAPSubscriptionLoaded
                                                             object:productIdentifier];
                                                             object:productIdentifier];
         
         
         NSString *informative = nil;
         NSString *informative = nil;
-        NSAlert *alert = [[NSAlert alloc] init];
+        NSAlert *alert = [[[NSAlert alloc] init] autorelease];
         [alert addButtonWithTitle:NSLocalizedString(@"OK", nil)];
         [alert addButtonWithTitle:NSLocalizedString(@"OK", nil)];
         [alert setAlertStyle:NSAlertStyleWarning];
         [alert setAlertStyle:NSAlertStyleWarning];
         [alert setMessageText:@""];
         [alert setMessageText:@""];
@@ -629,18 +696,30 @@ NSString * const KMIAPSubscriptionLoadedNotification = @"KMIAPSubscriptionLoaded
 #else
 #else
         informative = NSLocalizedString(@"Purchase Completed", nil);
         informative = NSLocalizedString(@"Purchase Completed", nil);
 #endif
 #endif
+        if ([productIdentifier isEqualToString:self.liteAIProduct.productIdentifier] ||
+            [productIdentifier isEqualToString:self.proAIProduct.productIdentifier]) {
+            informative = NSLocalizedString(@"Purchase Completed", nil);
+        }
+        
         [alert setInformativeText:informative];
         [alert setInformativeText:informative];
         if ([alert runModal]) {
         if ([alert runModal]) {
             NSString *message = [NSString stringWithFormat:@"%@\n%@",
             NSString *message = [NSString stringWithFormat:@"%@\n%@",
                                  NSLocalizedString(@"In-App Purchase FAQ:", nil),
                                  NSLocalizedString(@"In-App Purchase FAQ:", nil),
                                  NSLocalizedString(@"I bought the in-app purchase, but the app doesn't recognize that automatically. How to recover my purchase?", nil)];
                                  NSLocalizedString(@"I bought the in-app purchase, but the app doesn't recognize that automatically. How to recover my purchase?", nil)];
             
             
-            NSString *informative = [NSString stringWithFormat:@"\n%@\n\n%@\n\n%@\n\n",
-                                     NSLocalizedString(@"—》If you already completed the payment, simply click the \"Restore Previous Purchase\" button directly from the upgrade page to enable all the advanced features at no cost to you.", nil),
-                                     NSLocalizedString(@"—》Due to Apple needs to confirm your purchase info, you may be required to sign in with your Apple ID. When you restore your purchase, make sure you use the same Apple ID that you previously used.", nil),
-                                     NSLocalizedString(@"—》Once you see the \"Restore Successfully\" message, you will be able to access the advanced features, including PDF to Office, PDF Watermark, Page Editor, and more.", nil)];
+            if ([productIdentifier isEqualToString:self.proAIProduct.productIdentifier]) {
+                NSString *informative = [NSString stringWithFormat:@"\n%@\n\n%@\n\n%@\n\n",
+                                         NSLocalizedString(@"—》If you already completed the payment, simply click the \"Restore Previous Purchase\" button directly from the upgrade page to enable all the advanced features at no cost to you.", nil),
+                                         NSLocalizedString(@"—》Due to Apple needs to confirm your purchase info, you may be required to sign in with your Apple ID. When you restore your purchase, make sure you use the same Apple ID that you previously used.", nil),
+                                         NSLocalizedString(@"—》Once you see the \"Restore Successfully\" message, you will be able to access the AI tools include AI translate, AI summarize, AI proofread and AI rewrite.", nil)];
+            } else {
+                NSString *informative = [NSString stringWithFormat:@"\n%@\n\n%@\n\n%@\n\n",
+                                         NSLocalizedString(@"—》If you already completed the payment, simply click the \"Restore Previous Purchase\" button directly from the upgrade page to enable all the advanced features at no cost to you.", nil),
+                                         NSLocalizedString(@"—》Due to Apple needs to confirm your purchase info, you may be required to sign in with your Apple ID. When you restore your purchase, make sure you use the same Apple ID that you previously used.", nil),
+                                         NSLocalizedString(@"—》Once you see the \"Restore Successfully\" message, you will be able to access the advanced features, including PDF to Office, PDF Watermark, Page Editor, and more.", nil)];
+            }
             
             
-            NSAlert *alert = [[NSAlert alloc] init];
+            NSAlert *alert = [[[NSAlert alloc] init] autorelease];
             [alert addButtonWithTitle:NSLocalizedString(@"OK", nil)];
             [alert addButtonWithTitle:NSLocalizedString(@"OK", nil)];
             [alert setAlertStyle:NSAlertStyleWarning];
             [alert setAlertStyle:NSAlertStyleWarning];
             [alert setMessageText:message];
             [alert setMessageText:message];
@@ -659,7 +738,7 @@ NSString * const KMIAPSubscriptionLoadedNotification = @"KMIAPSubscriptionLoaded
                                  NSLocalizedString(@"Failed to restore previous purchases. Please make sure you've made a valid purchase or try again later.", nil),
                                  NSLocalizedString(@"Failed to restore previous purchases. Please make sure you've made a valid purchase or try again later.", nil),
                                  NSLocalizedString(@"—》If you already completed the payment, simply click the \"Restore Previous Purchase\" button directly from the upgrade page to enable all the advanced features at no cost to you.", nil),
                                  NSLocalizedString(@"—》If you already completed the payment, simply click the \"Restore Previous Purchase\" button directly from the upgrade page to enable all the advanced features at no cost to you.", nil),
                                  NSLocalizedString(@"—》Due to Apple needs to confirm your purchase info, you may be required to sign in with your Apple ID. When you restore your purchase, make sure you use the same Apple ID that you previously used.", nil)];
                                  NSLocalizedString(@"—》Due to Apple needs to confirm your purchase info, you may be required to sign in with your Apple ID. When you restore your purchase, make sure you use the same Apple ID that you previously used.", nil)];
-        NSAlert *alert = [[NSAlert alloc] init];
+        NSAlert *alert = [[[NSAlert alloc] init] autorelease];
         [alert addButtonWithTitle:NSLocalizedString(@"OK", nil)];
         [alert addButtonWithTitle:NSLocalizedString(@"OK", nil)];
         [alert setAlertStyle:NSAlertStyleWarning];
         [alert setAlertStyle:NSAlertStyleWarning];
         [alert setMessageText:@""];
         [alert setMessageText:@""];
@@ -674,7 +753,7 @@ NSString * const KMIAPSubscriptionLoadedNotification = @"KMIAPSubscriptionLoaded
                                                             object:nil];
                                                             object:nil];
         
         
         NSString *informative = nil;
         NSString *informative = nil;
-        NSAlert *alert = [[NSAlert alloc] init];
+        NSAlert *alert = [[[NSAlert alloc] init] autorelease];
         [alert addButtonWithTitle:NSLocalizedString(@"OK", nil)];
         [alert addButtonWithTitle:NSLocalizedString(@"OK", nil)];
         [alert setAlertStyle:NSAlertStyleWarning];
         [alert setAlertStyle:NSAlertStyleWarning];
         [alert setMessageText:@""];
         [alert setMessageText:@""];
@@ -690,6 +769,9 @@ NSString * const KMIAPSubscriptionLoadedNotification = @"KMIAPSubscriptionLoaded
                            NSLocalizedString(@"Your subscription has expired, please repurchase", nil),
                            NSLocalizedString(@"Your subscription has expired, please repurchase", nil),
                            NSLocalizedString(@"—》If you already completed the payment, simply click the \"Restore Previous Purchase\" button directly from the upgrade page to enable all the advanced features at no cost to you.", nil),
                            NSLocalizedString(@"—》If you already completed the payment, simply click the \"Restore Previous Purchase\" button directly from the upgrade page to enable all the advanced features at no cost to you.", nil),
                            NSLocalizedString(@"—》Due to Apple needs to confirm your purchase info, you may be required to sign in with your Apple ID. When you restore your purchase, make sure you use the same Apple ID that you previously used.", nil)];
                            NSLocalizedString(@"—》Due to Apple needs to confirm your purchase info, you may be required to sign in with your Apple ID. When you restore your purchase, make sure you use the same Apple ID that you previously used.", nil)];
+        } else if (self.liteAIProduct.isSubscribed) {
+            informative = NSLocalizedString(@"Restore successfully", nil);
+            return;
         } else {
         } else {
             informative = [NSString stringWithFormat:@"\n%@\n\n%@\n\n%@\n\n",
             informative = [NSString stringWithFormat:@"\n%@\n\n%@\n\n%@\n\n",
                            NSLocalizedString(@"Failed to restore previous purchases. Please make sure you've made a valid purchase or try again later.", nil),
                            NSLocalizedString(@"Failed to restore previous purchases. Please make sure you've made a valid purchase or try again later.", nil),
@@ -699,6 +781,9 @@ NSString * const KMIAPSubscriptionLoadedNotification = @"KMIAPSubscriptionLoaded
 #else
 #else
         if (self.PDFToOfficeProduct.isSubscribed) {
         if (self.PDFToOfficeProduct.isSubscribed) {
             informative = NSLocalizedString(@"Restore successfully", nil);
             informative = NSLocalizedString(@"Restore successfully", nil);
+        } else if (self.proAIProduct.isSubscribed) {
+            return;
+            informative = NSLocalizedString(@"Restore successfully", nil);
         } else {
         } else {
             informative = [NSString stringWithFormat:@"\n%@\n\n%@\n\n%@\n\n",
             informative = [NSString stringWithFormat:@"\n%@\n\n%@\n\n%@\n\n",
                            NSLocalizedString(@"Failed to restore previous purchases. Please make sure you've made a valid purchase or try again later.", nil),
                            NSLocalizedString(@"Failed to restore previous purchases. Please make sure you've made a valid purchase or try again later.", nil),
@@ -804,6 +889,10 @@ NSString * const KMIAPSubscriptionLoadedNotification = @"KMIAPSubscriptionLoaded
             self.allAccessProduct.product = product;
             self.allAccessProduct.product = product;
         } else if ([product.productIdentifier isEqualToString:self.PDFToOfficeProduct.productIdentifier]) {
         } else if ([product.productIdentifier isEqualToString:self.PDFToOfficeProduct.productIdentifier]) {
             self.PDFToOfficeProduct.product = product;
             self.PDFToOfficeProduct.product = product;
+        } else if ([product.productIdentifier isEqualToString:self.liteAIProduct.productIdentifier]) {
+            self.liteAIProduct.product = product;
+        } else if ([product.productIdentifier isEqualToString:self.proAIProduct.productIdentifier]) {
+            self.proAIProduct.product = product;
         }
         }
     }
     }
     dispatch_async(dispatch_get_main_queue(), ^{
     dispatch_async(dispatch_get_main_queue(), ^{
@@ -852,8 +941,6 @@ NSString * const KMIAPSubscriptionLoadedNotification = @"KMIAPSubscriptionLoaded
             [self restoreDidFinished];
             [self restoreDidFinished];
             [[NSNotificationCenter defaultCenter] postNotificationName:KMIAPProductLoadedNotification
             [[NSNotificationCenter defaultCenter] postNotificationName:KMIAPProductLoadedNotification
                                                                 object:nil];
                                                                 object:nil];
-            [[NSNotificationCenter defaultCenter] postNotificationName:KMIAPProductRestoreFinishedNotification
-                                                                object:nil];
         }
         }
     }];
     }];
 }
 }

+ 2 - 0
PDF Office/PDF Master/Info.plist

@@ -333,6 +333,8 @@
 		<string>SF-Pro-Text-Regular.otf</string>
 		<string>SF-Pro-Text-Regular.otf</string>
 		<string>SF-Pro-Text-Semibold.otf</string>
 		<string>SF-Pro-Text-Semibold.otf</string>
 		<string>SF-Pro-Text-Bold.otf</string>
 		<string>SF-Pro-Text-Bold.otf</string>
+		<string>Ubuntu-Bold.ttf</string>
+		<string>Ubuntu-Medium.ttf</string>
 	</array>
 	</array>
 </dict>
 </dict>
 </plist>
 </plist>

+ 1 - 0
PDF Office/PDF Master/PDF_Reader_Pro DMG-Bridging-Header.h

@@ -95,3 +95,4 @@
 
 
 #import "KMConvertCompareViewController.h"
 #import "KMConvertCompareViewController.h"
 #import "KMConvertComparePayViewController.h"
 #import "KMConvertComparePayViewController.h"
+#import "AIInfoManager.h"

+ 1 - 0
PDF Office/PDF Master/PDF_Reader_Pro Edition-Bridging-Header.h

@@ -91,3 +91,4 @@
 
 
 #import "KMConvertCompareViewController.h"
 #import "KMConvertCompareViewController.h"
 #import "KMConvertComparePayViewController.h"
 #import "KMConvertComparePayViewController.h"
+#import "AIInfoManager.h"

+ 1 - 0
PDF Office/PDF Master/PDF_Reader_Pro-Bridging-Header.h

@@ -88,6 +88,7 @@
 #import "NSEvent+PDFListView.h"
 #import "NSEvent+PDFListView.h"
 #import "NSURL+Utils.h"
 #import "NSURL+Utils.h"
 #import "NSObject+OCExtensions.h"
 #import "NSObject+OCExtensions.h"
+#import "AIInfoManager.h"
 
 
 #import "KMConvertCompareViewController.h"
 #import "KMConvertCompareViewController.h"
 #import "KMConvertComparePayViewController.h"
 #import "KMConvertComparePayViewController.h"

+ 187 - 3
PDF Office/PDF Reader Pro.xcodeproj/project.pbxproj

@@ -2575,6 +2575,51 @@
 		BB0B2CDC2B04B9510088FFD8 /* KMLeftSideViewSearchField.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB0B2CDB2B04B9510088FFD8 /* KMLeftSideViewSearchField.swift */; };
 		BB0B2CDC2B04B9510088FFD8 /* KMLeftSideViewSearchField.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB0B2CDB2B04B9510088FFD8 /* KMLeftSideViewSearchField.swift */; };
 		BB0B2CDD2B04B9510088FFD8 /* KMLeftSideViewSearchField.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB0B2CDB2B04B9510088FFD8 /* KMLeftSideViewSearchField.swift */; };
 		BB0B2CDD2B04B9510088FFD8 /* KMLeftSideViewSearchField.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB0B2CDB2B04B9510088FFD8 /* KMLeftSideViewSearchField.swift */; };
 		BB0B2CDE2B04B9510088FFD8 /* KMLeftSideViewSearchField.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB0B2CDB2B04B9510088FFD8 /* KMLeftSideViewSearchField.swift */; };
 		BB0B2CDE2B04B9510088FFD8 /* KMLeftSideViewSearchField.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB0B2CDB2B04B9510088FFD8 /* KMLeftSideViewSearchField.swift */; };
+		BB10F1E42B736F11008EAF7E /* FMTrackEventManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB10F1E32B736F11008EAF7E /* FMTrackEventManager.swift */; };
+		BB10F1E52B736F11008EAF7E /* FMTrackEventManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB10F1E32B736F11008EAF7E /* FMTrackEventManager.swift */; };
+		BB10F1E62B736F11008EAF7E /* FMTrackEventManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB10F1E32B736F11008EAF7E /* FMTrackEventManager.swift */; };
+		BB0FE0342B734DD1001E0F88 /* AIConfigWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB0FE0212B734DD1001E0F88 /* AIConfigWindowController.xib */; };
+		BB0FE0352B734DD1001E0F88 /* AIConfigWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB0FE0212B734DD1001E0F88 /* AIConfigWindowController.xib */; };
+		BB0FE0362B734DD1001E0F88 /* AIConfigWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB0FE0212B734DD1001E0F88 /* AIConfigWindowController.xib */; };
+		BB0FE0372B734DD1001E0F88 /* AIConfigWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB0FE0222B734DD1001E0F88 /* AIConfigWindowController.swift */; };
+		BB0FE0382B734DD1001E0F88 /* AIConfigWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB0FE0222B734DD1001E0F88 /* AIConfigWindowController.swift */; };
+		BB0FE0392B734DD1001E0F88 /* AIConfigWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB0FE0222B734DD1001E0F88 /* AIConfigWindowController.swift */; };
+		BB0FE03A2B734DD1001E0F88 /* AITipIconView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB0FE0242B734DD1001E0F88 /* AITipIconView.xib */; };
+		BB0FE03B2B734DD1001E0F88 /* AITipIconView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB0FE0242B734DD1001E0F88 /* AITipIconView.xib */; };
+		BB0FE03C2B734DD1001E0F88 /* AITipIconView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB0FE0242B734DD1001E0F88 /* AITipIconView.xib */; };
+		BB0FE03D2B734DD1001E0F88 /* AITipIconView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB0FE0252B734DD1001E0F88 /* AITipIconView.swift */; };
+		BB0FE03E2B734DD1001E0F88 /* AITipIconView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB0FE0252B734DD1001E0F88 /* AITipIconView.swift */; };
+		BB0FE03F2B734DD1001E0F88 /* AITipIconView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB0FE0252B734DD1001E0F88 /* AITipIconView.swift */; };
+		BB0FE0402B734DD1001E0F88 /* AITypeChooseView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB0FE0272B734DD1001E0F88 /* AITypeChooseView.xib */; };
+		BB0FE0412B734DD1001E0F88 /* AITypeChooseView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB0FE0272B734DD1001E0F88 /* AITypeChooseView.xib */; };
+		BB0FE0422B734DD1001E0F88 /* AITypeChooseView.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB0FE0272B734DD1001E0F88 /* AITypeChooseView.xib */; };
+		BB0FE0432B734DD1001E0F88 /* AITypeChooseView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB0FE0282B734DD1001E0F88 /* AITypeChooseView.swift */; };
+		BB0FE0442B734DD1001E0F88 /* AITypeChooseView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB0FE0282B734DD1001E0F88 /* AITypeChooseView.swift */; };
+		BB0FE0452B734DD1001E0F88 /* AITypeChooseView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB0FE0282B734DD1001E0F88 /* AITypeChooseView.swift */; };
+		BB0FE0462B734DD1001E0F88 /* AIInfoConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB0FE0292B734DD1001E0F88 /* AIInfoConfig.swift */; };
+		BB0FE0472B734DD1001E0F88 /* AIInfoConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB0FE0292B734DD1001E0F88 /* AIInfoConfig.swift */; };
+		BB0FE0482B734DD1001E0F88 /* AIInfoConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB0FE0292B734DD1001E0F88 /* AIInfoConfig.swift */; };
+		BB0FE04C2B734DD1001E0F88 /* AIPurchaseWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB0FE02D2B734DD1001E0F88 /* AIPurchaseWindowController.swift */; };
+		BB0FE04D2B734DD1001E0F88 /* AIPurchaseWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB0FE02D2B734DD1001E0F88 /* AIPurchaseWindowController.swift */; };
+		BB0FE04E2B734DD1001E0F88 /* AIPurchaseWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB0FE02D2B734DD1001E0F88 /* AIPurchaseWindowController.swift */; };
+		BB0FE04F2B734DD1001E0F88 /* AIPurchaseWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB0FE02E2B734DD1001E0F88 /* AIPurchaseWindowController.xib */; };
+		BB0FE0502B734DD1001E0F88 /* AIPurchaseWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB0FE02E2B734DD1001E0F88 /* AIPurchaseWindowController.xib */; };
+		BB0FE0512B734DD1001E0F88 /* AIPurchaseWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB0FE02E2B734DD1001E0F88 /* AIPurchaseWindowController.xib */; };
+		BB0FE0522B734DD1001E0F88 /* AIUserInfoController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB0FE0302B734DD1001E0F88 /* AIUserInfoController.swift */; };
+		BB0FE0532B734DD1001E0F88 /* AIUserInfoController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB0FE0302B734DD1001E0F88 /* AIUserInfoController.swift */; };
+		BB0FE0542B734DD1001E0F88 /* AIUserInfoController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB0FE0302B734DD1001E0F88 /* AIUserInfoController.swift */; };
+		BB0FE0552B734DD1001E0F88 /* AIUserInfoController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB0FE0312B734DD1001E0F88 /* AIUserInfoController.xib */; };
+		BB0FE0562B734DD1001E0F88 /* AIUserInfoController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB0FE0312B734DD1001E0F88 /* AIUserInfoController.xib */; };
+		BB0FE0572B734DD1001E0F88 /* AIUserInfoController.xib in Resources */ = {isa = PBXBuildFile; fileRef = BB0FE0312B734DD1001E0F88 /* AIUserInfoController.xib */; };
+		BB0FE0582B734DD1001E0F88 /* KMAIRequestServerManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB0FE0322B734DD1001E0F88 /* KMAIRequestServerManager.swift */; };
+		BB0FE0592B734DD1001E0F88 /* KMAIRequestServerManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB0FE0322B734DD1001E0F88 /* KMAIRequestServerManager.swift */; };
+		BB0FE05A2B734DD1001E0F88 /* KMAIRequestServerManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB0FE0322B734DD1001E0F88 /* KMAIRequestServerManager.swift */; };
+		BB0FE05B2B734DD1001E0F88 /* AIImage.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = BB0FE0332B734DD1001E0F88 /* AIImage.xcassets */; };
+		BB0FE05C2B734DD1001E0F88 /* AIImage.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = BB0FE0332B734DD1001E0F88 /* AIImage.xcassets */; };
+		BB0FE05D2B734DD1001E0F88 /* AIImage.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = BB0FE0332B734DD1001E0F88 /* AIImage.xcassets */; };
+		BB0FE0602B7351AA001E0F88 /* AIInfoManager.m in Sources */ = {isa = PBXBuildFile; fileRef = BB0FE05F2B7351AA001E0F88 /* AIInfoManager.m */; };
+		BB0FE0612B7351AA001E0F88 /* AIInfoManager.m in Sources */ = {isa = PBXBuildFile; fileRef = BB0FE05F2B7351AA001E0F88 /* AIInfoManager.m */; };
+		BB0FE0622B7351AA001E0F88 /* AIInfoManager.m in Sources */ = {isa = PBXBuildFile; fileRef = BB0FE05F2B7351AA001E0F88 /* AIInfoManager.m */; };
 		BB10FAE52AFE039E00F18D65 /* KMPDFEditPageRangeWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB10FAE42AFE039E00F18D65 /* KMPDFEditPageRangeWindowController.swift */; };
 		BB10FAE52AFE039E00F18D65 /* KMPDFEditPageRangeWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB10FAE42AFE039E00F18D65 /* KMPDFEditPageRangeWindowController.swift */; };
 		BB10FAE62AFE039E00F18D65 /* KMPDFEditPageRangeWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB10FAE42AFE039E00F18D65 /* KMPDFEditPageRangeWindowController.swift */; };
 		BB10FAE62AFE039E00F18D65 /* KMPDFEditPageRangeWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB10FAE42AFE039E00F18D65 /* KMPDFEditPageRangeWindowController.swift */; };
 		BB10FAE72AFE039E00F18D65 /* KMPDFEditPageRangeWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB10FAE42AFE039E00F18D65 /* KMPDFEditPageRangeWindowController.swift */; };
 		BB10FAE72AFE039E00F18D65 /* KMPDFEditPageRangeWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB10FAE42AFE039E00F18D65 /* KMPDFEditPageRangeWindowController.swift */; };
@@ -2815,9 +2860,9 @@
 		BB1A91732AFB8D95005E5FD8 /* KMBookletMaskView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB1A91722AFB8D95005E5FD8 /* KMBookletMaskView.swift */; };
 		BB1A91732AFB8D95005E5FD8 /* KMBookletMaskView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB1A91722AFB8D95005E5FD8 /* KMBookletMaskView.swift */; };
 		BB1A91742AFB8D95005E5FD8 /* KMBookletMaskView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB1A91722AFB8D95005E5FD8 /* KMBookletMaskView.swift */; };
 		BB1A91742AFB8D95005E5FD8 /* KMBookletMaskView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB1A91722AFB8D95005E5FD8 /* KMBookletMaskView.swift */; };
 		BB1A91752AFB8D95005E5FD8 /* KMBookletMaskView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB1A91722AFB8D95005E5FD8 /* KMBookletMaskView.swift */; };
 		BB1A91752AFB8D95005E5FD8 /* KMBookletMaskView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB1A91722AFB8D95005E5FD8 /* KMBookletMaskView.swift */; };
-		BB1B0A9D2B4FB88100889528 /* IAPProductsManager.m in Sources */ = {isa = PBXBuildFile; fileRef = BB1B0A9B2B4FB88000889528 /* IAPProductsManager.m */; };
-		BB1B0A9E2B4FB88100889528 /* IAPProductsManager.m in Sources */ = {isa = PBXBuildFile; fileRef = BB1B0A9B2B4FB88000889528 /* IAPProductsManager.m */; };
-		BB1B0A9F2B4FB88100889528 /* IAPProductsManager.m in Sources */ = {isa = PBXBuildFile; fileRef = BB1B0A9B2B4FB88000889528 /* IAPProductsManager.m */; };
+		BB1B0A9D2B4FB88100889528 /* IAPProductsManager.m in Sources */ = {isa = PBXBuildFile; fileRef = BB1B0A9B2B4FB88000889528 /* IAPProductsManager.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
+		BB1B0A9E2B4FB88100889528 /* IAPProductsManager.m in Sources */ = {isa = PBXBuildFile; fileRef = BB1B0A9B2B4FB88000889528 /* IAPProductsManager.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
+		BB1B0A9F2B4FB88100889528 /* IAPProductsManager.m in Sources */ = {isa = PBXBuildFile; fileRef = BB1B0A9B2B4FB88000889528 /* IAPProductsManager.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; };
 		BB1B0ABF2B4FC6E900889528 /* KMGuideInfoWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB1B0AA12B4FC6E800889528 /* KMGuideInfoWindowController.swift */; };
 		BB1B0ABF2B4FC6E900889528 /* KMGuideInfoWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB1B0AA12B4FC6E800889528 /* KMGuideInfoWindowController.swift */; };
 		BB1B0AC02B4FC6E900889528 /* KMGuideInfoWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB1B0AA12B4FC6E800889528 /* KMGuideInfoWindowController.swift */; };
 		BB1B0AC02B4FC6E900889528 /* KMGuideInfoWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB1B0AA12B4FC6E800889528 /* KMGuideInfoWindowController.swift */; };
 		BB1B0AC12B4FC6E900889528 /* KMGuideInfoWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB1B0AA12B4FC6E800889528 /* KMGuideInfoWindowController.swift */; };
 		BB1B0AC12B4FC6E900889528 /* KMGuideInfoWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB1B0AA12B4FC6E800889528 /* KMGuideInfoWindowController.swift */; };
@@ -5950,6 +5995,22 @@
 		BB0A823129C00400002C5C1B /* KMCommonEnum.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMCommonEnum.swift; sourceTree = "<group>"; };
 		BB0A823129C00400002C5C1B /* KMCommonEnum.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMCommonEnum.swift; sourceTree = "<group>"; };
 		BB0B2CD72B04AE560088FFD8 /* LeftSideView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = LeftSideView.xib; sourceTree = "<group>"; };
 		BB0B2CD72B04AE560088FFD8 /* LeftSideView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = LeftSideView.xib; sourceTree = "<group>"; };
 		BB0B2CDB2B04B9510088FFD8 /* KMLeftSideViewSearchField.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMLeftSideViewSearchField.swift; sourceTree = "<group>"; };
 		BB0B2CDB2B04B9510088FFD8 /* KMLeftSideViewSearchField.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMLeftSideViewSearchField.swift; sourceTree = "<group>"; };
+		BB10F1E32B736F11008EAF7E /* FMTrackEventManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FMTrackEventManager.swift; sourceTree = "<group>"; };
+		BB0FE0212B734DD1001E0F88 /* AIConfigWindowController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = AIConfigWindowController.xib; sourceTree = "<group>"; };
+		BB0FE0222B734DD1001E0F88 /* AIConfigWindowController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AIConfigWindowController.swift; sourceTree = "<group>"; };
+		BB0FE0242B734DD1001E0F88 /* AITipIconView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = AITipIconView.xib; sourceTree = "<group>"; };
+		BB0FE0252B734DD1001E0F88 /* AITipIconView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AITipIconView.swift; sourceTree = "<group>"; };
+		BB0FE0272B734DD1001E0F88 /* AITypeChooseView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = AITypeChooseView.xib; sourceTree = "<group>"; };
+		BB0FE0282B734DD1001E0F88 /* AITypeChooseView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AITypeChooseView.swift; sourceTree = "<group>"; };
+		BB0FE0292B734DD1001E0F88 /* AIInfoConfig.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AIInfoConfig.swift; sourceTree = "<group>"; };
+		BB0FE02D2B734DD1001E0F88 /* AIPurchaseWindowController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AIPurchaseWindowController.swift; sourceTree = "<group>"; };
+		BB0FE02E2B734DD1001E0F88 /* AIPurchaseWindowController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = AIPurchaseWindowController.xib; sourceTree = "<group>"; };
+		BB0FE0302B734DD1001E0F88 /* AIUserInfoController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AIUserInfoController.swift; sourceTree = "<group>"; };
+		BB0FE0312B734DD1001E0F88 /* AIUserInfoController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = AIUserInfoController.xib; sourceTree = "<group>"; };
+		BB0FE0322B734DD1001E0F88 /* KMAIRequestServerManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KMAIRequestServerManager.swift; sourceTree = "<group>"; };
+		BB0FE0332B734DD1001E0F88 /* AIImage.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = AIImage.xcassets; sourceTree = "<group>"; };
+		BB0FE05E2B7351AA001E0F88 /* AIInfoManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AIInfoManager.h; sourceTree = "<group>"; };
+		BB0FE05F2B7351AA001E0F88 /* AIInfoManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AIInfoManager.m; sourceTree = "<group>"; };
 		BB10FAE42AFE039E00F18D65 /* KMPDFEditPageRangeWindowController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMPDFEditPageRangeWindowController.swift; sourceTree = "<group>"; };
 		BB10FAE42AFE039E00F18D65 /* KMPDFEditPageRangeWindowController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMPDFEditPageRangeWindowController.swift; sourceTree = "<group>"; };
 		BB10FAE82AFE03CC00F18D65 /* KMPDFEditPageRangeWindowController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = KMPDFEditPageRangeWindowController.xib; sourceTree = "<group>"; };
 		BB10FAE82AFE03CC00F18D65 /* KMPDFEditPageRangeWindowController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = KMPDFEditPageRangeWindowController.xib; sourceTree = "<group>"; };
 		BB10FAED2AFE233C00F18D65 /* KMLineInspector.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMLineInspector.swift; sourceTree = "<group>"; };
 		BB10FAED2AFE233C00F18D65 /* KMLineInspector.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMLineInspector.swift; sourceTree = "<group>"; };
@@ -8829,6 +8890,7 @@
 				ADA08A8929F21A53009B2A7B /* KMPDFViewAnnotationOnceModeStore.swift */,
 				ADA08A8929F21A53009B2A7B /* KMPDFViewAnnotationOnceModeStore.swift */,
 				BBBAECFB2B57713F00266BD3 /* KMTransitionInfo.swift */,
 				BBBAECFB2B57713F00266BD3 /* KMTransitionInfo.swift */,
 				BBBAED132B57E97000266BD3 /* SKTypeSelectHelper.swift */,
 				BBBAED132B57E97000266BD3 /* SKTypeSelectHelper.swift */,
+				BB10F1E32B736F11008EAF7E /* FMTrackEventManager.swift */,
 			);
 			);
 			path = Tools;
 			path = Tools;
 			sourceTree = "<group>";
 			sourceTree = "<group>";
@@ -10015,6 +10077,74 @@
 			path = Designs;
 			path = Designs;
 			sourceTree = "<group>";
 			sourceTree = "<group>";
 		};
 		};
+		BB0FE01F2B734DD1001E0F88 /* AIInfo */ = {
+			isa = PBXGroup;
+			children = (
+				BB0FE0332B734DD1001E0F88 /* AIImage.xcassets */,
+				BB0FE0292B734DD1001E0F88 /* AIInfoConfig.swift */,
+				BB0FE0202B734DD1001E0F88 /* AIConfigWindowController */,
+				BB0FE0232B734DD1001E0F88 /* AITipIcon */,
+				BB0FE0262B734DD1001E0F88 /* AITypeChooseView */,
+				BB0FE02A2B734DD1001E0F88 /* Resources */,
+				BB0FE02C2B734DD1001E0F88 /* AIPurchaseWindowController */,
+				BB0FE02F2B734DD1001E0F88 /* AIUserInfoController */,
+				BB0FE0322B734DD1001E0F88 /* KMAIRequestServerManager.swift */,
+			);
+			path = AIInfo;
+			sourceTree = "<group>";
+		};
+		BB0FE0202B734DD1001E0F88 /* AIConfigWindowController */ = {
+			isa = PBXGroup;
+			children = (
+				BB0FE0222B734DD1001E0F88 /* AIConfigWindowController.swift */,
+				BB0FE0212B734DD1001E0F88 /* AIConfigWindowController.xib */,
+			);
+			path = AIConfigWindowController;
+			sourceTree = "<group>";
+		};
+		BB0FE0232B734DD1001E0F88 /* AITipIcon */ = {
+			isa = PBXGroup;
+			children = (
+				BB0FE0252B734DD1001E0F88 /* AITipIconView.swift */,
+				BB0FE0242B734DD1001E0F88 /* AITipIconView.xib */,
+			);
+			path = AITipIcon;
+			sourceTree = "<group>";
+		};
+		BB0FE0262B734DD1001E0F88 /* AITypeChooseView */ = {
+			isa = PBXGroup;
+			children = (
+				BB0FE0282B734DD1001E0F88 /* AITypeChooseView.swift */,
+				BB0FE0272B734DD1001E0F88 /* AITypeChooseView.xib */,
+			);
+			path = AITypeChooseView;
+			sourceTree = "<group>";
+		};
+		BB0FE02A2B734DD1001E0F88 /* Resources */ = {
+			isa = PBXGroup;
+			children = (
+			);
+			path = Resources;
+			sourceTree = "<group>";
+		};
+		BB0FE02C2B734DD1001E0F88 /* AIPurchaseWindowController */ = {
+			isa = PBXGroup;
+			children = (
+				BB0FE02D2B734DD1001E0F88 /* AIPurchaseWindowController.swift */,
+				BB0FE02E2B734DD1001E0F88 /* AIPurchaseWindowController.xib */,
+			);
+			path = AIPurchaseWindowController;
+			sourceTree = "<group>";
+		};
+		BB0FE02F2B734DD1001E0F88 /* AIUserInfoController */ = {
+			isa = PBXGroup;
+			children = (
+				BB0FE0302B734DD1001E0F88 /* AIUserInfoController.swift */,
+				BB0FE0312B734DD1001E0F88 /* AIUserInfoController.xib */,
+			);
+			path = AIUserInfoController;
+			sourceTree = "<group>";
+		};
 		BB10FAEC2AFE232300F18D65 /* LineInspector */ = {
 		BB10FAEC2AFE232300F18D65 /* LineInspector */ = {
 			isa = PBXGroup;
 			isa = PBXGroup;
 			children = (
 			children = (
@@ -10523,6 +10653,7 @@
 		BB2C6A7128F2652500478A33 /* Class */ = {
 		BB2C6A7128F2652500478A33 /* Class */ = {
 			isa = PBXGroup;
 			isa = PBXGroup;
 			children = (
 			children = (
+				BB0FE01F2B734DD1001E0F88 /* AIInfo */,
 				ADFCEB582B4FBFC50001EBAF /* AD */,
 				ADFCEB582B4FBFC50001EBAF /* AD */,
 				ADFCEB2F2B4F77CC0001EBAF /* KMFileManager */,
 				ADFCEB2F2B4F77CC0001EBAF /* KMFileManager */,
 				BB42C7EB2B46421B003FF2D4 /* README.md */,
 				BB42C7EB2B46421B003FF2D4 /* README.md */,
@@ -11421,6 +11552,8 @@
 			children = (
 			children = (
 				BB8810C82B4F97CF00AFA63E /* VerificationManager.h */,
 				BB8810C82B4F97CF00AFA63E /* VerificationManager.h */,
 				BB8810C92B4F97CF00AFA63E /* VerificationManager.m */,
 				BB8810C92B4F97CF00AFA63E /* VerificationManager.m */,
+				BB0FE05E2B7351AA001E0F88 /* AIInfoManager.h */,
+				BB0FE05F2B7351AA001E0F88 /* AIInfoManager.m */,
 			);
 			);
 			path = VerificationManager;
 			path = VerificationManager;
 			sourceTree = "<group>";
 			sourceTree = "<group>";
@@ -13010,11 +13143,14 @@
 				AD3AAD792B0DCEB600DE5FE7 /* KMCompareSaveView.xib in Resources */,
 				AD3AAD792B0DCEB600DE5FE7 /* KMCompareSaveView.xib in Resources */,
 				ADBC2D15299CCD10006280C8 /* KMTextfieldButton.xib in Resources */,
 				ADBC2D15299CCD10006280C8 /* KMTextfieldButton.xib in Resources */,
 				ADFCEB4B2B4FBA440001EBAF /* ProRemoteConfigDefaults.plist in Resources */,
 				ADFCEB4B2B4FBA440001EBAF /* ProRemoteConfigDefaults.plist in Resources */,
+				BB0FE0342B734DD1001E0F88 /* AIConfigWindowController.xib in Resources */,
 				BBD1F77F296F9BE000343885 /* KMPageEditSettingBaseWindowController.xib in Resources */,
 				BBD1F77F296F9BE000343885 /* KMPageEditSettingBaseWindowController.xib in Resources */,
 				BBB3769E2B10A7FD009539CC /* a_4a.png in Resources */,
 				BBB3769E2B10A7FD009539CC /* a_4a.png in Resources */,
 				BB24D4AA2977BE6700041659 /* KMRedactConfirmWindowController.xib in Resources */,
 				BB24D4AA2977BE6700041659 /* KMRedactConfirmWindowController.xib in Resources */,
 				ADDF838C2B391A5D00A81A4E /* DSignatureFileListCellView.xib in Resources */,
 				ADDF838C2B391A5D00A81A4E /* DSignatureFileListCellView.xib in Resources */,
+				BB0FE0552B734DD1001E0F88 /* AIUserInfoController.xib in Resources */,
 				BBAFC84D298519F700D0648E /* KMSavePanelAccessoryController.xib in Resources */,
 				BBAFC84D298519F700D0648E /* KMSavePanelAccessoryController.xib in Resources */,
+				BB0FE0402B734DD1001E0F88 /* AITypeChooseView.xib in Resources */,
 				F3A9DC81294309D80074E5D2 /* CPDFListEditAnnotationViewController.xib in Resources */,
 				F3A9DC81294309D80074E5D2 /* CPDFListEditAnnotationViewController.xib in Resources */,
 				ADBC375829CAE95700D93208 /* KMComparativeOutlineSectionCell.xib in Resources */,
 				ADBC375829CAE95700D93208 /* KMComparativeOutlineSectionCell.xib in Resources */,
 				ADDF83982B391A5D00A81A4E /* PDFCertExportAccessoryView.xib in Resources */,
 				ADDF83982B391A5D00A81A4E /* PDFCertExportAccessoryView.xib in Resources */,
@@ -13056,6 +13192,7 @@
 				9F0CB4622966C9E200007028 /* KMFormPropertPanelViewController.xib in Resources */,
 				9F0CB4622966C9E200007028 /* KMFormPropertPanelViewController.xib in Resources */,
 				BB5F8A1929BB15AD00365ADB /* pic_mail.pdf in Resources */,
 				BB5F8A1929BB15AD00365ADB /* pic_mail.pdf in Resources */,
 				9FDD0F962952FF4D000C4DAD /* $metadata.json in Resources */,
 				9FDD0F962952FF4D000C4DAD /* $metadata.json in Resources */,
+				BB0FE05B2B734DD1001E0F88 /* AIImage.xcassets in Resources */,
 				AD0FA4F529A8582C00EDEB50 /* KMComparativeTableView.xib in Resources */,
 				AD0FA4F529A8582C00EDEB50 /* KMComparativeTableView.xib in Resources */,
 				BB7648E829ECECBF00931039 /* Color.xcassets in Resources */,
 				BB7648E829ECECBF00931039 /* Color.xcassets in Resources */,
 				BB4F7E7D2B0C45DE0077EC8C /* KMNoteOutlineFilterViewController.xib in Resources */,
 				BB4F7E7D2B0C45DE0077EC8C /* KMNoteOutlineFilterViewController.xib in Resources */,
@@ -13210,6 +13347,7 @@
 				9F8539EB2947131F00DF644E /* KMChromiumTabView.xib in Resources */,
 				9F8539EB2947131F00DF644E /* KMChromiumTabView.xib in Resources */,
 				BB8F454A295A9CDC0037EA22 /* KMHeaderFooterListController.xib in Resources */,
 				BB8F454A295A9CDC0037EA22 /* KMHeaderFooterListController.xib in Resources */,
 				9F853A082947137500DF644E /* newtab.pdf in Resources */,
 				9F853A082947137500DF644E /* newtab.pdf in Resources */,
+				BB0FE04F2B734DD1001E0F88 /* AIPurchaseWindowController.xib in Resources */,
 				8997011128F40842009AF911 /* KMOutlineViewController.xib in Resources */,
 				8997011128F40842009AF911 /* KMOutlineViewController.xib in Resources */,
 				BBAC26AC2AFE31F400563A08 /* KMBatchOperateAddPasswordViewController.xib in Resources */,
 				BBAC26AC2AFE31F400563A08 /* KMBatchOperateAddPasswordViewController.xib in Resources */,
 				BB1BFF752AEA0B38003EB179 /* KMBatchOperateLeftViewController.xib in Resources */,
 				BB1BFF752AEA0B38003EB179 /* KMBatchOperateLeftViewController.xib in Resources */,
@@ -13254,6 +13392,7 @@
 				BBC3480F29558DC1008D2CD1 /* KMBackgroundController.xib in Resources */,
 				BBC3480F29558DC1008D2CD1 /* KMBackgroundController.xib in Resources */,
 				BB1B0AE32B4FC6E900889528 /* KMOpenFileGuideToolbar.xib in Resources */,
 				BB1B0AE32B4FC6E900889528 /* KMOpenFileGuideToolbar.xib in Resources */,
 				BBC4F9EE2AEB58470098A1A8 /* KMAlertWindowController.xib in Resources */,
 				BBC4F9EE2AEB58470098A1A8 /* KMAlertWindowController.xib in Resources */,
+				BB0FE03A2B734DD1001E0F88 /* AITipIconView.xib in Resources */,
 				BB10FAF22AFE23BE00F18D65 /* LineInspector.xib in Resources */,
 				BB10FAF22AFE23BE00F18D65 /* LineInspector.xib in Resources */,
 				ADF6B8792A48155E0090CB78 /* KMComparativeViewCollectionItem.xib in Resources */,
 				ADF6B8792A48155E0090CB78 /* KMComparativeViewCollectionItem.xib in Resources */,
 				BB0B2CD82B04AE560088FFD8 /* LeftSideView.xib in Resources */,
 				BB0B2CD82B04AE560088FFD8 /* LeftSideView.xib in Resources */,
@@ -13421,6 +13560,7 @@
 				9F0CB4C12977C06300007028 /* KMPropertiesPanelColorSubVC.xib in Resources */,
 				9F0CB4C12977C06300007028 /* KMPropertiesPanelColorSubVC.xib in Resources */,
 				BB1B0AD52B4FC6E900889528 /* KMFunctionGuideSingleController.xib in Resources */,
 				BB1B0AD52B4FC6E900889528 /* KMFunctionGuideSingleController.xib in Resources */,
 				8997011228F40842009AF911 /* KMOutlineViewController.xib in Resources */,
 				8997011228F40842009AF911 /* KMOutlineViewController.xib in Resources */,
+				BB0FE0562B734DD1001E0F88 /* AIUserInfoController.xib in Resources */,
 				9FF816E22AFA5BA80087EFC5 /* KMAnnotationTableViewController.xib in Resources */,
 				9FF816E22AFA5BA80087EFC5 /* KMAnnotationTableViewController.xib in Resources */,
 				BB1B0AE72B4FC6E900889528 /* KMOpenFileGuideProperty.xib in Resources */,
 				BB1B0AE72B4FC6E900889528 /* KMOpenFileGuideProperty.xib in Resources */,
 				BBB3769C2B10A7FD009539CC /* a_2a.png in Resources */,
 				BBB3769C2B10A7FD009539CC /* a_2a.png in Resources */,
@@ -13634,6 +13774,7 @@
 				9F8810A12B5762BD00F69815 /* KMAnnotationButtonOptionsViewController.xib in Resources */,
 				9F8810A12B5762BD00F69815 /* KMAnnotationButtonOptionsViewController.xib in Resources */,
 				89D2D2FF294C806000BFF5FE /* KMPDFThumbnailItem.xib in Resources */,
 				89D2D2FF294C806000BFF5FE /* KMPDFThumbnailItem.xib in Resources */,
 				BBA9223C2B4E97540061057A /* KMPurchaseLimitWindowController.xib in Resources */,
 				BBA9223C2B4E97540061057A /* KMPurchaseLimitWindowController.xib in Resources */,
+				BB0FE0352B734DD1001E0F88 /* AIConfigWindowController.xib in Resources */,
 				ADE8BC3429F9261900570F89 /* KMSearchCellView.xib in Resources */,
 				ADE8BC3429F9261900570F89 /* KMSearchCellView.xib in Resources */,
 				8931684D296E436B0073EA59 /* KMSignatureWindowController.xib in Resources */,
 				8931684D296E436B0073EA59 /* KMSignatureWindowController.xib in Resources */,
 				ADFCEB4C2B4FBA440001EBAF /* ProRemoteConfigDefaults.plist in Resources */,
 				ADFCEB4C2B4FBA440001EBAF /* ProRemoteConfigDefaults.plist in Resources */,
@@ -13667,6 +13808,7 @@
 				BB254D5B2B2A985A00C37B3B /* KMTTSWindowController.xib in Resources */,
 				BB254D5B2B2A985A00C37B3B /* KMTTSWindowController.xib in Resources */,
 				BB183DD52B4EAD5400F99C7E /* Ubuntu-Bold.ttf in Resources */,
 				BB183DD52B4EAD5400F99C7E /* Ubuntu-Bold.ttf in Resources */,
 				AD8810B629A846B100178CA1 /* KMVerficationCodeWindowController.xib in Resources */,
 				AD8810B629A846B100178CA1 /* KMVerficationCodeWindowController.xib in Resources */,
+				BB0FE03B2B734DD1001E0F88 /* AITipIconView.xib in Resources */,
 				BB2EDF74296ECE17003BCF58 /* KMPageEditThumbnailItem.xib in Resources */,
 				BB2EDF74296ECE17003BCF58 /* KMPageEditThumbnailItem.xib in Resources */,
 				BB897232294B08DE0045787C /* KMWatermarkViewController.xib in Resources */,
 				BB897232294B08DE0045787C /* KMWatermarkViewController.xib in Resources */,
 				ADFA8F012B5649AE002595A4 /* KMAutoFlowOptionsSheetController.xib in Resources */,
 				ADFA8F012B5649AE002595A4 /* KMAutoFlowOptionsSheetController.xib in Resources */,
@@ -13741,6 +13883,7 @@
 				AD1D48532AFB8510007AC1F0 /* KMMergeTableViewCell.xib in Resources */,
 				AD1D48532AFB8510007AC1F0 /* KMMergeTableViewCell.xib in Resources */,
 				ADBC2CFF299CA6C7006280C8 /* KMPrintDuplexPrintingSetView.xib in Resources */,
 				ADBC2CFF299CA6C7006280C8 /* KMPrintDuplexPrintingSetView.xib in Resources */,
 				89E4E7392964148E002DBA6F /* KMAnnotationPropertiesViewController.xib in Resources */,
 				89E4E7392964148E002DBA6F /* KMAnnotationPropertiesViewController.xib in Resources */,
+				BB0FE05C2B734DD1001E0F88 /* AIImage.xcassets in Resources */,
 				BB8810A42B4F7D1000AFA63E /* KMVerificationActivateViewController.xib in Resources */,
 				BB8810A42B4F7D1000AFA63E /* KMVerificationActivateViewController.xib in Resources */,
 				9F56648B2988B16F00020985 /* KMTextfieldVC.xib in Resources */,
 				9F56648B2988B16F00020985 /* KMTextfieldVC.xib in Resources */,
 				BB9695B729BDB03E00FD68D3 /* InfoWindow.xib in Resources */,
 				BB9695B729BDB03E00FD68D3 /* InfoWindow.xib in Resources */,
@@ -13779,6 +13922,7 @@
 				9F3D818B29A0A9A70087B5AD /* KMDesignButton.xib in Resources */,
 				9F3D818B29A0A9A70087B5AD /* KMDesignButton.xib in Resources */,
 				9F1F82E72934D5240092C4B4 /* KMHomeExtractActionViewController.xib in Resources */,
 				9F1F82E72934D5240092C4B4 /* KMHomeExtractActionViewController.xib in Resources */,
 				9F0CB49329683DEE00007028 /* KMPropertiesPanelLineSubVC.xib in Resources */,
 				9F0CB49329683DEE00007028 /* KMPropertiesPanelLineSubVC.xib in Resources */,
+				BB0FE0502B734DD1001E0F88 /* AIPurchaseWindowController.xib in Resources */,
 				BB46CF492AFB7E5C00281EDF /* InitialUserDefaults.plist in Resources */,
 				BB46CF492AFB7E5C00281EDF /* InitialUserDefaults.plist in Resources */,
 				BB8F454B295A9CDC0037EA22 /* KMHeaderFooterListController.xib in Resources */,
 				BB8F454B295A9CDC0037EA22 /* KMHeaderFooterListController.xib in Resources */,
 				AD85D1B12AF09C79000F4D28 /* KMHomeQuickToolsWindowCollectionViewItem.xib in Resources */,
 				AD85D1B12AF09C79000F4D28 /* KMHomeQuickToolsWindowCollectionViewItem.xib in Resources */,
@@ -13832,6 +13976,7 @@
 				89E9B3FA295BE2EC00AEFA61 /* KMEditPDFTextPropertyViewController.xib in Resources */,
 				89E9B3FA295BE2EC00AEFA61 /* KMEditPDFTextPropertyViewController.xib in Resources */,
 				9F853A032947137500DF644E /* default-icon.pdf in Resources */,
 				9F853A032947137500DF644E /* default-icon.pdf in Resources */,
 				BBC348182955920B008D2CD1 /* KMBackgroundPropertyController.xib in Resources */,
 				BBC348182955920B008D2CD1 /* KMBackgroundPropertyController.xib in Resources */,
+				BB0FE0412B734DD1001E0F88 /* AITypeChooseView.xib in Resources */,
 				BB3EAEB1293E3D6000D92407 /* KMConvertBaseWindowController.xib in Resources */,
 				BB3EAEB1293E3D6000D92407 /* KMConvertBaseWindowController.xib in Resources */,
 				ADBC372E29CA951E00D93208 /* KMComparativeOutlineView.xib in Resources */,
 				ADBC372E29CA951E00D93208 /* KMComparativeOutlineView.xib in Resources */,
 				ADDF83752B391A5D00A81A4E /* CDSignatureDrawViewController.xib in Resources */,
 				ADDF83752B391A5D00A81A4E /* CDSignatureDrawViewController.xib in Resources */,
@@ -14008,11 +14153,14 @@
 				BBF62C762B0347D1007B7E86 /* SplitWindowController.xib in Resources */,
 				BBF62C762B0347D1007B7E86 /* SplitWindowController.xib in Resources */,
 				ADFCEB4D2B4FBA440001EBAF /* ProRemoteConfigDefaults.plist in Resources */,
 				ADFCEB4D2B4FBA440001EBAF /* ProRemoteConfigDefaults.plist in Resources */,
 				ADC63E4D2A49BEDD00854E02 /* KMSubscribeWaterMarkCollectionItem.xib in Resources */,
 				ADC63E4D2A49BEDD00854E02 /* KMSubscribeWaterMarkCollectionItem.xib in Resources */,
+				BB0FE0362B734DD1001E0F88 /* AIConfigWindowController.xib in Resources */,
 				BB5DF1F62959C9F00025CDA1 /* KMHeaderFooterPropertyMainController.xib in Resources */,
 				BB5DF1F62959C9F00025CDA1 /* KMHeaderFooterPropertyMainController.xib in Resources */,
 				AD3AAD722B0DCC6800DE5FE7 /* KMCompareSaveWindow.xib in Resources */,
 				AD3AAD722B0DCC6800DE5FE7 /* KMCompareSaveWindow.xib in Resources */,
 				9F221ED429A85D3700978A59 /* KMDesignBase.xib in Resources */,
 				9F221ED429A85D3700978A59 /* KMDesignBase.xib in Resources */,
 				ADDF838E2B391A5D00A81A4E /* DSignatureFileListCellView.xib in Resources */,
 				ADDF838E2B391A5D00A81A4E /* DSignatureFileListCellView.xib in Resources */,
+				BB0FE0572B734DD1001E0F88 /* AIUserInfoController.xib in Resources */,
 				BB8F4544295A98960037EA22 /* KMHeaderFooterPropertyController.xib in Resources */,
 				BB8F4544295A98960037EA22 /* KMHeaderFooterPropertyController.xib in Resources */,
+				BB0FE0422B734DD1001E0F88 /* AITypeChooseView.xib in Resources */,
 				89E4E7312963FBA2002DBA6F /* KMPropertiesViewPopController.xib in Resources */,
 				89E4E7312963FBA2002DBA6F /* KMPropertiesViewPopController.xib in Resources */,
 				BB3AAB9529878CE000992A5A /* KMWatermarkAdjectivePropertyMainController.xib in Resources */,
 				BB3AAB9529878CE000992A5A /* KMWatermarkAdjectivePropertyMainController.xib in Resources */,
 				ADDF839A2B391A5D00A81A4E /* PDFCertExportAccessoryView.xib in Resources */,
 				ADDF839A2B391A5D00A81A4E /* PDFCertExportAccessoryView.xib in Resources */,
@@ -14054,6 +14202,7 @@
 				AD6260702A9D968B006C6413 /* KMEditPDFAssets.xcassets in Resources */,
 				AD6260702A9D968B006C6413 /* KMEditPDFAssets.xcassets in Resources */,
 				899700E428F3A9F2009AF911 /* KMHomeWindowController.xib in Resources */,
 				899700E428F3A9F2009AF911 /* KMHomeWindowController.xib in Resources */,
 				BBC348402955A60B008D2CD1 /* KMBackgroundPropertyInfoController.xib in Resources */,
 				BBC348402955A60B008D2CD1 /* KMBackgroundPropertyInfoController.xib in Resources */,
+				BB0FE05D2B734DD1001E0F88 /* AIImage.xcassets in Resources */,
 				9F0201832A1BAC1600C9B673 /* KMAIRewritingVC.xib in Resources */,
 				9F0201832A1BAC1600C9B673 /* KMAIRewritingVC.xib in Resources */,
 				BB96A0B62AFCD56B00559E24 /* KMToolCompareWindowController.xib in Resources */,
 				BB96A0B62AFCD56B00559E24 /* KMToolCompareWindowController.xib in Resources */,
 				9FDD0F9E2952FF4D000C4DAD /* comp-light.json in Resources */,
 				9FDD0F9E2952FF4D000C4DAD /* comp-light.json in Resources */,
@@ -14208,6 +14357,7 @@
 				9F8539D029430BF300DF644E /* KMBrowserWindowController.xib in Resources */,
 				9F8539D029430BF300DF644E /* KMBrowserWindowController.xib in Resources */,
 				ADE8BC2C29F7CDB000570F89 /* KMPageNumberDisplayView.xib in Resources */,
 				ADE8BC2C29F7CDB000570F89 /* KMPageNumberDisplayView.xib in Resources */,
 				BBFD2B182AEFAC9C0016C456 /* KMBatchOperateBaseViewController.xib in Resources */,
 				BBFD2B182AEFAC9C0016C456 /* KMBatchOperateBaseViewController.xib in Resources */,
+				BB0FE0512B734DD1001E0F88 /* AIPurchaseWindowController.xib in Resources */,
 				BBFE6E622930809A00142C01 /* KMMergeCollectionPageViewItem.xib in Resources */,
 				BBFE6E622930809A00142C01 /* KMMergeCollectionPageViewItem.xib in Resources */,
 				ADE86AE22B0AF4B600414DFA /* KMCompareContentSettingWindowController.xib in Resources */,
 				ADE86AE22B0AF4B600414DFA /* KMCompareContentSettingWindowController.xib in Resources */,
 				9F1F82B9292DEF370092C4B4 /* KMCloudDocumentsViewController.xib in Resources */,
 				9F1F82B9292DEF370092C4B4 /* KMCloudDocumentsViewController.xib in Resources */,
@@ -14252,6 +14402,7 @@
 				BB1B0AE52B4FC6E900889528 /* KMOpenFileGuideToolbar.xib in Resources */,
 				BB1B0AE52B4FC6E900889528 /* KMOpenFileGuideToolbar.xib in Resources */,
 				89752E092939DB42003FF08E /* KMToolbarViewController.xib in Resources */,
 				89752E092939DB42003FF08E /* KMToolbarViewController.xib in Resources */,
 				ADE86A862B0222B300414DFA /* KMSecurityView.xib in Resources */,
 				ADE86A862B0222B300414DFA /* KMSecurityView.xib in Resources */,
+				BB0FE03C2B734DD1001E0F88 /* AITipIconView.xib in Resources */,
 				9FE0BBE92B0EFBA300CD1CAC /* KMAnnotationFontWindowController.xib in Resources */,
 				9FE0BBE92B0EFBA300CD1CAC /* KMAnnotationFontWindowController.xib in Resources */,
 				BBA8B7A82935CD740097D183 /* KMRemovePasswordAlertWindowController.xib in Resources */,
 				BBA8B7A82935CD740097D183 /* KMRemovePasswordAlertWindowController.xib in Resources */,
 				AD1CA4362A0640FC0070541F /* KMAnnotationScreenHeadView.xib in Resources */,
 				AD1CA4362A0640FC0070541F /* KMAnnotationScreenHeadView.xib in Resources */,
@@ -14627,6 +14778,7 @@
 				BB7FF5072A60E84400901C2D /* KMEnumExtensions.swift in Sources */,
 				BB7FF5072A60E84400901C2D /* KMEnumExtensions.swift in Sources */,
 				9FB221072B19BD8B00A5B208 /* KMGeneralAnnotationViewController.swift in Sources */,
 				9FB221072B19BD8B00A5B208 /* KMGeneralAnnotationViewController.swift in Sources */,
 				F3F0B27329B8ACD000722957 /* CPDFListViewDragObject.m in Sources */,
 				F3F0B27329B8ACD000722957 /* CPDFListViewDragObject.m in Sources */,
+				BB0FE0462B734DD1001E0F88 /* AIInfoConfig.swift in Sources */,
 				ADAC0DE52AC2B04900FD4F52 /* KMNoteTypeImageView.swift in Sources */,
 				ADAC0DE52AC2B04900FD4F52 /* KMNoteTypeImageView.swift in Sources */,
 				9F8810952B56877C00F69815 /* KMAnnotationChoiceWidgetOptionsViewController.swift in Sources */,
 				9F8810952B56877C00F69815 /* KMAnnotationChoiceWidgetOptionsViewController.swift in Sources */,
 				9F8539BE2943085A00DF644E /* KMBrowser.swift in Sources */,
 				9F8539BE2943085A00DF644E /* KMBrowser.swift in Sources */,
@@ -14769,6 +14921,7 @@
 				BB8115FF2992682F0008F536 /* KMSecureLimitAlertView.swift in Sources */,
 				BB8115FF2992682F0008F536 /* KMSecureLimitAlertView.swift in Sources */,
 				ADDEEA662AD3C4BE00EF675D /* KMPDFSignatureImageView.swift in Sources */,
 				ADDEEA662AD3C4BE00EF675D /* KMPDFSignatureImageView.swift in Sources */,
 				BBB14A5B2978EBBE00936EDB /* KMRedactMutilPageFlagContentView.swift in Sources */,
 				BBB14A5B2978EBBE00936EDB /* KMRedactMutilPageFlagContentView.swift in Sources */,
+				BB0FE0582B734DD1001E0F88 /* KMAIRequestServerManager.swift in Sources */,
 				9F72D2032994A3B800DCACF1 /* KMDesignToken+Notification.swift in Sources */,
 				9F72D2032994A3B800DCACF1 /* KMDesignToken+Notification.swift in Sources */,
 				ADDF83A72B391A5D00A81A4E /* DSignatureApperanceManager.swift in Sources */,
 				ADDF83A72B391A5D00A81A4E /* DSignatureApperanceManager.swift in Sources */,
 				AD2D74AD29F0CEB300EDC5E4 /* KMCancellationWindowController.swift in Sources */,
 				AD2D74AD29F0CEB300EDC5E4 /* KMCancellationWindowController.swift in Sources */,
@@ -14913,6 +15066,7 @@
 				BB147035299DC0D200784A6A /* OIDRegistrationResponse.m in Sources */,
 				BB147035299DC0D200784A6A /* OIDRegistrationResponse.m in Sources */,
 				9FDD0F7C2952F2D8000C4DAD /* KMBaseParser.swift in Sources */,
 				9FDD0F7C2952F2D8000C4DAD /* KMBaseParser.swift in Sources */,
 				9FD0D2A72AD4EFB000DA3FF8 /* KMSavePanelAccessoryController.swift in Sources */,
 				9FD0D2A72AD4EFB000DA3FF8 /* KMSavePanelAccessoryController.swift in Sources */,
+				BB0FE0522B734DD1001E0F88 /* AIUserInfoController.swift in Sources */,
 				ADE86AEE2B0AF56200414DFA /* KMCompareCoveringSettingView.swift in Sources */,
 				ADE86AEE2B0AF56200414DFA /* KMCompareCoveringSettingView.swift in Sources */,
 				BB2C6AC928F4085200478A33 /* CPDFListView.m in Sources */,
 				BB2C6AC928F4085200478A33 /* CPDFListView.m in Sources */,
 				BBBC087E2B2A93DB009B237F /* KMToolbarMainItemView.swift in Sources */,
 				BBBC087E2B2A93DB009B237F /* KMToolbarMainItemView.swift in Sources */,
@@ -14960,6 +15114,7 @@
 				BB31DA622AFA3088006D63CB /* KMPreferenceController.swift in Sources */,
 				BB31DA622AFA3088006D63CB /* KMPreferenceController.swift in Sources */,
 				9FD0D2AF2AD51BCC00DA3FF8 /* CPDFListEditAnnotationViewController.swift in Sources */,
 				9FD0D2AF2AD51BCC00DA3FF8 /* CPDFListEditAnnotationViewController.swift in Sources */,
 				ADAFDA422AE8F3C400F084BC /* KMAdvertisementTimeStampConversion.swift in Sources */,
 				ADAFDA422AE8F3C400F084BC /* KMAdvertisementTimeStampConversion.swift in Sources */,
+				BB10F1E42B736F11008EAF7E /* FMTrackEventManager.swift in Sources */,
 				9F0CB4E92986559400007028 /* KMDesignToken+PaddingBottom.swift in Sources */,
 				9F0CB4E92986559400007028 /* KMDesignToken+PaddingBottom.swift in Sources */,
 				ADDDCE272B43A32A005B4AB5 /* AppSandboxFileAccessOpenSavePanelDelegate.m in Sources */,
 				ADDDCE272B43A32A005B4AB5 /* AppSandboxFileAccessOpenSavePanelDelegate.m in Sources */,
 				BB570ADB2B512C90005E7E4A /* KMLeftSideViewController+Thumbnail.swift in Sources */,
 				BB570ADB2B512C90005E7E4A /* KMLeftSideViewController+Thumbnail.swift in Sources */,
@@ -15039,6 +15194,7 @@
 				BB3198162AC55E6D00107371 /* CPDFDocument+KMExtension.swift in Sources */,
 				BB3198162AC55E6D00107371 /* CPDFDocument+KMExtension.swift in Sources */,
 				BB1B0ADA2B4FC6E900889528 /* KMOpenFileGuideToolbar.swift in Sources */,
 				BB1B0ADA2B4FC6E900889528 /* KMOpenFileGuideToolbar.swift in Sources */,
 				ADE86A802B02220700414DFA /* KMSecurityView.swift in Sources */,
 				ADE86A802B02220700414DFA /* KMSecurityView.swift in Sources */,
+				BB0FE03D2B734DD1001E0F88 /* AITipIconView.swift in Sources */,
 				BB4A94912B04926700940F8B /* KMGOCROperation.swift in Sources */,
 				BB4A94912B04926700940F8B /* KMGOCROperation.swift in Sources */,
 				BBEFD0242AFA065F003FABD8 /* KMBatchAddHeaderFooterOperation.swift in Sources */,
 				BBEFD0242AFA065F003FABD8 /* KMBatchAddHeaderFooterOperation.swift in Sources */,
 				894A00F22976314C0070ED83 /* KMPDFViewPanelSetViewController.swift in Sources */,
 				894A00F22976314C0070ED83 /* KMPDFViewPanelSetViewController.swift in Sources */,
@@ -15183,11 +15339,13 @@
 				BB2F9AAB2AFCADA900F9DD93 /* KMProfileCellView.swift in Sources */,
 				BB2F9AAB2AFCADA900F9DD93 /* KMProfileCellView.swift in Sources */,
 				BB49ED15293F489500C82CA2 /* KMConvertImageSettingView.swift in Sources */,
 				BB49ED15293F489500C82CA2 /* KMConvertImageSettingView.swift in Sources */,
 				ADBC375D29CC61E100D93208 /* KMReadModelView.swift in Sources */,
 				ADBC375D29CC61E100D93208 /* KMReadModelView.swift in Sources */,
+				BB0FE0372B734DD1001E0F88 /* AIConfigWindowController.swift in Sources */,
 				BB6013902AD3AFF000A76FB2 /* NSPopover+KMExtension.swift in Sources */,
 				BB6013902AD3AFF000A76FB2 /* NSPopover+KMExtension.swift in Sources */,
 				BB2EDF79296ECE17003BCF58 /* KMPageEditThumbnailItem.swift in Sources */,
 				BB2EDF79296ECE17003BCF58 /* KMPageEditThumbnailItem.swift in Sources */,
 				899700E828F3E4D3009AF911 /* MainWindowController.swift in Sources */,
 				899700E828F3E4D3009AF911 /* MainWindowController.swift in Sources */,
 				BB6DD81C29348F31001F0544 /* KMSecureTextFiled.swift in Sources */,
 				BB6DD81C29348F31001F0544 /* KMSecureTextFiled.swift in Sources */,
 				BB8F4572295ACE380037EA22 /* KMHeaderFooterAdjectiveListCell.swift in Sources */,
 				BB8F4572295ACE380037EA22 /* KMHeaderFooterAdjectiveListCell.swift in Sources */,
+				BB0FE04C2B734DD1001E0F88 /* AIPurchaseWindowController.swift in Sources */,
 				9FCFEC8C2AD10A4400EAD2CB /* KMTextFieldSheetController.swift in Sources */,
 				9FCFEC8C2AD10A4400EAD2CB /* KMTextFieldSheetController.swift in Sources */,
 				BB00300F298CA383002DD1A0 /* KMPreferenceSegementControl.swift in Sources */,
 				BB00300F298CA383002DD1A0 /* KMPreferenceSegementControl.swift in Sources */,
 				ADD1B7062946CBB600C3FFF7 /* KMBaseTextFormatter.swift in Sources */,
 				ADD1B7062946CBB600C3FFF7 /* KMBaseTextFormatter.swift in Sources */,
@@ -15243,6 +15401,7 @@
 				BB1A916A2AFB7868005E5FD8 /* KMConvertWindowController.swift in Sources */,
 				BB1A916A2AFB7868005E5FD8 /* KMConvertWindowController.swift in Sources */,
 				BB147044299DC0D200784A6A /* OIDURLQueryComponent.m in Sources */,
 				BB147044299DC0D200784A6A /* OIDURLQueryComponent.m in Sources */,
 				9F88109D2B5762BD00F69815 /* KMAnnotationButtonOptionsViewController.swift in Sources */,
 				9F88109D2B5762BD00F69815 /* KMAnnotationButtonOptionsViewController.swift in Sources */,
+				BB0FE0602B7351AA001E0F88 /* AIInfoManager.m in Sources */,
 				ADDF83442B391A5C00A81A4E /* DSignatureManager.swift in Sources */,
 				ADDF83442B391A5C00A81A4E /* DSignatureManager.swift in Sources */,
 				9FDD0FB7295D5230000C4DAD /* KMToolbarController.swift in Sources */,
 				9FDD0FB7295D5230000C4DAD /* KMToolbarController.swift in Sources */,
 				9F1FE4F929406E4700E952CA /* CTTabStripView.m in Sources */,
 				9F1FE4F929406E4700E952CA /* CTTabStripView.m in Sources */,
@@ -15388,6 +15547,7 @@
 				BBC8A7712B06408600FA9377 /* KMBotaSearchViewController.swift in Sources */,
 				BBC8A7712B06408600FA9377 /* KMBotaSearchViewController.swift in Sources */,
 				BB1A34A8295EA30100B80B3E /* NSBitmapImageRep_SKExtensions.m in Sources */,
 				BB1A34A8295EA30100B80B3E /* NSBitmapImageRep_SKExtensions.m in Sources */,
 				9F0CB4FD298655F600007028 /* KMDesignToken+BorderColor.swift in Sources */,
 				9F0CB4FD298655F600007028 /* KMDesignToken+BorderColor.swift in Sources */,
+				BB0FE0432B734DD1001E0F88 /* AITypeChooseView.swift in Sources */,
 				BBB1A3A629F6B66400E54E47 /* NSPanel+KMExtension.swift in Sources */,
 				BBB1A3A629F6B66400E54E47 /* NSPanel+KMExtension.swift in Sources */,
 				BB3A81AC2AC2A4E4006FC66C /* NSTextView+KMExtension.swift in Sources */,
 				BB3A81AC2AC2A4E4006FC66C /* NSTextView+KMExtension.swift in Sources */,
 				BB65A0802AF8FE7A003A27A0 /* KMBatchOperateRemoveHeaderFooterViewController.swift in Sources */,
 				BB65A0802AF8FE7A003A27A0 /* KMBatchOperateRemoveHeaderFooterViewController.swift in Sources */,
@@ -15715,6 +15875,7 @@
 				AD58F4202B1DC29100299EE0 /* KMPrintViewModel.swift in Sources */,
 				AD58F4202B1DC29100299EE0 /* KMPrintViewModel.swift in Sources */,
 				BB65A0552AF8B90F003A27A0 /* KMDisplayPreferences.swift in Sources */,
 				BB65A0552AF8B90F003A27A0 /* KMDisplayPreferences.swift in Sources */,
 				BB74DA7C2AC41DE9006EDFE7 /* NSString+KMExtension.swift in Sources */,
 				BB74DA7C2AC41DE9006EDFE7 /* NSString+KMExtension.swift in Sources */,
+				BB0FE0382B734DD1001E0F88 /* AIConfigWindowController.swift in Sources */,
 				ADDEEA972AD7A0F300EF675D /* TextFieldFormatter.swift in Sources */,
 				ADDEEA972AD7A0F300EF675D /* TextFieldFormatter.swift in Sources */,
 				BB3198172AC55E6D00107371 /* CPDFDocument+KMExtension.swift in Sources */,
 				BB3198172AC55E6D00107371 /* CPDFDocument+KMExtension.swift in Sources */,
 				BB1B0A9E2B4FB88100889528 /* IAPProductsManager.m in Sources */,
 				BB1B0A9E2B4FB88100889528 /* IAPProductsManager.m in Sources */,
@@ -15874,6 +16035,7 @@
 				ADE3C1C229A4C13700793B13 /* KMPrintAccessoryController_OC.m in Sources */,
 				ADE3C1C229A4C13700793B13 /* KMPrintAccessoryController_OC.m in Sources */,
 				89752E1A2941FD48003FF08E /* KMSearchCellView.swift in Sources */,
 				89752E1A2941FD48003FF08E /* KMSearchCellView.swift in Sources */,
 				AD3AAD1C2B0B5B4400DE5FE7 /* KMCompareCoveringWindowController.swift in Sources */,
 				AD3AAD1C2B0B5B4400DE5FE7 /* KMCompareCoveringWindowController.swift in Sources */,
+				BB0FE0612B7351AA001E0F88 /* AIInfoManager.m in Sources */,
 				9F0CB50A2986563300007028 /* KMDesignToken+BorderBottom.swift in Sources */,
 				9F0CB50A2986563300007028 /* KMDesignToken+BorderBottom.swift in Sources */,
 				ADDF83662B391A5C00A81A4E /* DSignatureFromFileViewController.swift in Sources */,
 				ADDF83662B391A5C00A81A4E /* DSignatureFromFileViewController.swift in Sources */,
 				BBA5429D29F13A140041BAD0 /* KMMemorandumPattern.swift in Sources */,
 				BBA5429D29F13A140041BAD0 /* KMMemorandumPattern.swift in Sources */,
@@ -15890,6 +16052,7 @@
 				BBD9222C2B50D50A00DB9585 /* iRate.m in Sources */,
 				BBD9222C2B50D50A00DB9585 /* iRate.m in Sources */,
 				ADDEEA4A2AD38BDB00EF675D /* KMSignatureHelpViewController.swift in Sources */,
 				ADDEEA4A2AD38BDB00EF675D /* KMSignatureHelpViewController.swift in Sources */,
 				BB003027298CF7EC002DD1A0 /* KMPreferenceDisplayController.swift in Sources */,
 				BB003027298CF7EC002DD1A0 /* KMPreferenceDisplayController.swift in Sources */,
+				BB0FE03E2B734DD1001E0F88 /* AITipIconView.swift in Sources */,
 				F36AD77829642FE80015AD53 /* CPDFListView+UndoManager.m in Sources */,
 				F36AD77829642FE80015AD53 /* CPDFListView+UndoManager.m in Sources */,
 				BB89726A294DB41D0045787C /* KMWatermarkAdjectivePositionView.swift in Sources */,
 				BB89726A294DB41D0045787C /* KMWatermarkAdjectivePositionView.swift in Sources */,
 				BB1B0ACC2B4FC6E900889528 /* KMFunctionGuideWindowController.swift in Sources */,
 				BB1B0ACC2B4FC6E900889528 /* KMFunctionGuideWindowController.swift in Sources */,
@@ -16036,6 +16199,7 @@
 				ADFCEB762B4FC1660001EBAF /* KMAdsWebView.swift in Sources */,
 				ADFCEB762B4FC1660001EBAF /* KMAdsWebView.swift in Sources */,
 				BB4EEF3529764166003A3537 /* KMRedactPropertyWindowController.swift in Sources */,
 				BB4EEF3529764166003A3537 /* KMRedactPropertyWindowController.swift in Sources */,
 				BBB3FF992B567D0300145C4A /* KMApplication.swift in Sources */,
 				BBB3FF992B567D0300145C4A /* KMApplication.swift in Sources */,
+				BB0FE04D2B734DD1001E0F88 /* AIPurchaseWindowController.swift in Sources */,
 				BB8F4561295AA39F0037EA22 /* KMHeaderFooterModel.swift in Sources */,
 				BB8F4561295AA39F0037EA22 /* KMHeaderFooterModel.swift in Sources */,
 				BBFEF7142B3A766C00C28AC0 /* KMSystemMenu.swift in Sources */,
 				BBFEF7142B3A766C00C28AC0 /* KMSystemMenu.swift in Sources */,
 				BBB9B326299A5D6D004F3235 /* GTMKeychain_macOS.m in Sources */,
 				BBB9B326299A5D6D004F3235 /* GTMKeychain_macOS.m in Sources */,
@@ -16195,6 +16359,7 @@
 				BB332D542995D8B500CABB58 /* KMCloudDocumentTools.swift in Sources */,
 				BB332D542995D8B500CABB58 /* KMCloudDocumentTools.swift in Sources */,
 				BBA93D3429BF0ECE0044E0DD /* SKKeychain.m in Sources */,
 				BBA93D3429BF0ECE0044E0DD /* SKKeychain.m in Sources */,
 				9FCFEC752AC56ECE00EAD2CB /* CPDFListStampAnnotation.swift in Sources */,
 				9FCFEC752AC56ECE00EAD2CB /* CPDFListStampAnnotation.swift in Sources */,
+				BB0FE0442B734DD1001E0F88 /* AITypeChooseView.swift in Sources */,
 				BBC8DC712B57854800270C98 /* KMSecondaryPDFView.swift in Sources */,
 				BBC8DC712B57854800270C98 /* KMSecondaryPDFView.swift in Sources */,
 				9F0CB5162986566D00007028 /* KMDesignToken+BorderRadiusTopLeft.swift in Sources */,
 				9F0CB5162986566D00007028 /* KMDesignToken+BorderRadiusTopLeft.swift in Sources */,
 				AD867F8729D94F5100F00440 /* KMBOTAOutlineView.swift in Sources */,
 				AD867F8729D94F5100F00440 /* KMBOTAOutlineView.swift in Sources */,
@@ -16282,6 +16447,7 @@
 				BB4DD04C299B296500E80DF6 /* KMCloudPathControl.swift in Sources */,
 				BB4DD04C299B296500E80DF6 /* KMCloudPathControl.swift in Sources */,
 				AD867F9129D9554F00F00440 /* KMBOTAOutlineItem.swift in Sources */,
 				AD867F9129D9554F00F00440 /* KMBOTAOutlineItem.swift in Sources */,
 				BB2A984B2B26A99A00647AF3 /* KMBatchAddWatermarkOperation.swift in Sources */,
 				BB2A984B2B26A99A00647AF3 /* KMBatchAddWatermarkOperation.swift in Sources */,
+				BB0FE0472B734DD1001E0F88 /* AIInfoConfig.swift in Sources */,
 				BB4A94A52B04DA0C00940F8B /* KMGOCRManagerNew.swift in Sources */,
 				BB4A94A52B04DA0C00940F8B /* KMGOCRManagerNew.swift in Sources */,
 				BB0A823329C00400002C5C1B /* KMCommonEnum.swift in Sources */,
 				BB0A823329C00400002C5C1B /* KMCommonEnum.swift in Sources */,
 				BB3198132AC5142900107371 /* NSMenu+KMExtension.swift in Sources */,
 				BB3198132AC5142900107371 /* NSMenu+KMExtension.swift in Sources */,
@@ -16438,6 +16604,7 @@
 				BB10FAF72AFE2C2900F18D65 /* KMNumberArrayFormatter.swift in Sources */,
 				BB10FAF72AFE2C2900F18D65 /* KMNumberArrayFormatter.swift in Sources */,
 				BBD7FE082A13241C00F96075 /* KMOutlineEditViewController.swift in Sources */,
 				BBD7FE082A13241C00F96075 /* KMOutlineEditViewController.swift in Sources */,
 				BB1B0AF32B4FC6E900889528 /* KMFunctionGuideNameItemView.swift in Sources */,
 				BB1B0AF32B4FC6E900889528 /* KMFunctionGuideNameItemView.swift in Sources */,
+				BB0FE0592B734DD1001E0F88 /* KMAIRequestServerManager.swift in Sources */,
 				BB8F4558295AA1270037EA22 /* KMHeaderFooterPropertyInfoController.swift in Sources */,
 				BB8F4558295AA1270037EA22 /* KMHeaderFooterPropertyInfoController.swift in Sources */,
 				AD88108E29A760D100178CA1 /* KMRegisterPresenter.swift in Sources */,
 				AD88108E29A760D100178CA1 /* KMRegisterPresenter.swift in Sources */,
 				BB146FB5299DC0D100784A6A /* GTLRUtilities.m in Sources */,
 				BB146FB5299DC0D100784A6A /* GTLRUtilities.m in Sources */,
@@ -16471,6 +16638,7 @@
 				AD199DDE2B200FA300D56FEE /* KMPrintPosterView.swift in Sources */,
 				AD199DDE2B200FA300D56FEE /* KMPrintPosterView.swift in Sources */,
 				BBBB6CCF2AD13E210035AA66 /* CPDFButtonWidgetAnnotation+PDFListView.swift in Sources */,
 				BBBB6CCF2AD13E210035AA66 /* CPDFButtonWidgetAnnotation+PDFListView.swift in Sources */,
 				F359916A29261F0E000D25DE /* CPDFListView+Tool.m in Sources */,
 				F359916A29261F0E000D25DE /* CPDFListView+Tool.m in Sources */,
+				BB0FE0532B734DD1001E0F88 /* AIUserInfoController.swift in Sources */,
 				BBD7FE072A1323F500F96075 /* KMCustomTableRowView.swift in Sources */,
 				BBD7FE072A1323F500F96075 /* KMCustomTableRowView.swift in Sources */,
 				ADDF836F2B391A5C00A81A4E /* CDSignatureTextViewController.swift in Sources */,
 				ADDF836F2B391A5C00A81A4E /* CDSignatureTextViewController.swift in Sources */,
 				BB90E4F72AF3B71800B04B9F /* KMPDFWatermarkData.swift in Sources */,
 				BB90E4F72AF3B71800B04B9F /* KMPDFWatermarkData.swift in Sources */,
@@ -16583,6 +16751,7 @@
 				BB146FD0299DC0D100784A6A /* GTMMIMEDocument.m in Sources */,
 				BB146FD0299DC0D100784A6A /* GTMMIMEDocument.m in Sources */,
 				AD055E262B70B3C10035F824 /* KMBookmarkController.swift in Sources */,
 				AD055E262B70B3C10035F824 /* KMBookmarkController.swift in Sources */,
 				AD3AAD142B0B5B2700DE5FE7 /* KMCompareContentWindowController.swift in Sources */,
 				AD3AAD142B0B5B2700DE5FE7 /* KMCompareContentWindowController.swift in Sources */,
+				BB10F1E52B736F11008EAF7E /* FMTrackEventManager.swift in Sources */,
 				9F705F8E291E579F005199AD /* KMHistoryFileTableView.swift in Sources */,
 				9F705F8E291E579F005199AD /* KMHistoryFileTableView.swift in Sources */,
 				9F0CB49029683DEE00007028 /* KMPropertiesPanelLineSubVC.swift in Sources */,
 				9F0CB49029683DEE00007028 /* KMPropertiesPanelLineSubVC.swift in Sources */,
 				AD53B6FF29AC5FCD00D61E81 /* KMLightMemberToken.swift in Sources */,
 				AD53B6FF29AC5FCD00D61E81 /* KMLightMemberToken.swift in Sources */,
@@ -16838,6 +17007,7 @@
 				BB35732F2AF50068004CDA92 /* KMBatchOperateConvertViewController.swift in Sources */,
 				BB35732F2AF50068004CDA92 /* KMBatchOperateConvertViewController.swift in Sources */,
 				AD055E3B2B7209280035F824 /* KMFileBookmark.swift in Sources */,
 				AD055E3B2B7209280035F824 /* KMFileBookmark.swift in Sources */,
 				89D2D2E0294C451400BFF5FE /* KMThumbnailViewController.swift in Sources */,
 				89D2D2E0294C451400BFF5FE /* KMThumbnailViewController.swift in Sources */,
+				BB0FE0622B7351AA001E0F88 /* AIInfoManager.m in Sources */,
 				ADDEEA642AD3A6E700EF675D /* KMPDFSignatureTextView.swift in Sources */,
 				ADDEEA642AD3A6E700EF675D /* KMPDFSignatureTextView.swift in Sources */,
 				9FAAA334290BD0A20046FFCE /* KMHistoryFileCollectionViewItem.swift in Sources */,
 				9FAAA334290BD0A20046FFCE /* KMHistoryFileCollectionViewItem.swift in Sources */,
 				89752DF82938A236003FF08E /* PublicKey.swift in Sources */,
 				89752DF82938A236003FF08E /* PublicKey.swift in Sources */,
@@ -16893,6 +17063,7 @@
 				BBEFD01E2AF9E5AA003FABD8 /* KMBatchOperateAddHeaderFooterViewController.swift in Sources */,
 				BBEFD01E2AF9E5AA003FABD8 /* KMBatchOperateAddHeaderFooterViewController.swift in Sources */,
 				9F1FE50729406E4700E952CA /* CTTabStripDragController.m in Sources */,
 				9F1FE50729406E4700E952CA /* CTTabStripDragController.m in Sources */,
 				AD3AAD912B1034B400DE5FE7 /* KMHeaderFooterView.swift in Sources */,
 				AD3AAD912B1034B400DE5FE7 /* KMHeaderFooterView.swift in Sources */,
+				BB0FE04E2B734DD1001E0F88 /* AIPurchaseWindowController.swift in Sources */,
 				ADE86A942B0226AD00414DFA /* KMRemovePasswordView.swift in Sources */,
 				ADE86A942B0226AD00414DFA /* KMRemovePasswordView.swift in Sources */,
 				BB65A0562AF8B90F003A27A0 /* KMDisplayPreferences.swift in Sources */,
 				BB65A0562AF8B90F003A27A0 /* KMDisplayPreferences.swift in Sources */,
 				BB146FEC299DC0D100784A6A /* GTLRDuration.m in Sources */,
 				BB146FEC299DC0D100784A6A /* GTLRDuration.m in Sources */,
@@ -16998,6 +17169,7 @@
 				BB49ED10293F462E00C82CA2 /* KMConvertImageWindowController.swift in Sources */,
 				BB49ED10293F462E00C82CA2 /* KMConvertImageWindowController.swift in Sources */,
 				BBF38A60294F42FF0086D025 /* KMWatermarkAdjectiveStepper.swift in Sources */,
 				BBF38A60294F42FF0086D025 /* KMWatermarkAdjectiveStepper.swift in Sources */,
 				BB2F184C2A0C911B0003F65E /* KMBaseWindowController.swift in Sources */,
 				BB2F184C2A0C911B0003F65E /* KMBaseWindowController.swift in Sources */,
+				BB0FE05A2B734DD1001E0F88 /* KMAIRequestServerManager.swift in Sources */,
 				AD1D48112AFB1907007AC1F0 /* KMCompressView.swift in Sources */,
 				AD1D48112AFB1907007AC1F0 /* KMCompressView.swift in Sources */,
 				BBA93D2F29BEBAA60044E0DD /* KMPreferenceEnum.swift in Sources */,
 				BBA93D2F29BEBAA60044E0DD /* KMPreferenceEnum.swift in Sources */,
 				BB89726B294DB41D0045787C /* KMWatermarkAdjectivePositionView.swift in Sources */,
 				BB89726B294DB41D0045787C /* KMWatermarkAdjectivePositionView.swift in Sources */,
@@ -17016,6 +17188,7 @@
 				BB6EA2A82B70B8F3000D4490 /* KMConvertComparePayViewController.m in Sources */,
 				BB6EA2A82B70B8F3000D4490 /* KMConvertComparePayViewController.m in Sources */,
 				BBB9B318299A5D6D004F3235 /* KMDropboxManager.m in Sources */,
 				BBB9B318299A5D6D004F3235 /* KMDropboxManager.m in Sources */,
 				BB74DA7D2AC41DE9006EDFE7 /* NSString+KMExtension.swift in Sources */,
 				BB74DA7D2AC41DE9006EDFE7 /* NSString+KMExtension.swift in Sources */,
+				BB0FE0482B734DD1001E0F88 /* AIInfoConfig.swift in Sources */,
 				9FCFEC6A2AC2EAD500EAD2CB /* CPDFListViewColorMenuItemView.swift in Sources */,
 				9FCFEC6A2AC2EAD500EAD2CB /* CPDFListViewColorMenuItemView.swift in Sources */,
 				BB8F4559295AA1270037EA22 /* KMHeaderFooterPropertyInfoController.swift in Sources */,
 				BB8F4559295AA1270037EA22 /* KMHeaderFooterPropertyInfoController.swift in Sources */,
 				9FF816F02AFA5D840087EFC5 /* KMTableDataManager.swift in Sources */,
 				9FF816F02AFA5D840087EFC5 /* KMTableDataManager.swift in Sources */,
@@ -17291,6 +17464,7 @@
 				AD1D48502AFB8506007AC1F0 /* KMMergeTableViewCell.swift in Sources */,
 				AD1D48502AFB8506007AC1F0 /* KMMergeTableViewCell.swift in Sources */,
 				BB49ECF8293F44DC00C82CA2 /* KMConvertExcelWindowController.swift in Sources */,
 				BB49ECF8293F44DC00C82CA2 /* KMConvertExcelWindowController.swift in Sources */,
 				9FBC48BA299B44C600CA39D7 /* KMSecondaryViewController.m in Sources */,
 				9FBC48BA299B44C600CA39D7 /* KMSecondaryViewController.m in Sources */,
+				BB0FE0542B734DD1001E0F88 /* AIUserInfoController.swift in Sources */,
 				AD1CA3F92A05FCB60070541F /* KMAnnotationScreenViewController.swift in Sources */,
 				AD1CA3F92A05FCB60070541F /* KMAnnotationScreenViewController.swift in Sources */,
 				BBBAECFE2B57713F00266BD3 /* KMTransitionInfo.swift in Sources */,
 				BBBAECFE2B57713F00266BD3 /* KMTransitionInfo.swift in Sources */,
 				9F1FE4EC29406E4700E952CA /* NSBezierPath+MCAdditions.m in Sources */,
 				9F1FE4EC29406E4700E952CA /* NSBezierPath+MCAdditions.m in Sources */,
@@ -17300,6 +17474,7 @@
 				BBFA1CCB2B60967A0053AD4A /* KMScreenShotHandler.swift in Sources */,
 				BBFA1CCB2B60967A0053AD4A /* KMScreenShotHandler.swift in Sources */,
 				BBD1F77E296F9BE000343885 /* KMPageEditSettingBaseWindowController.swift in Sources */,
 				BBD1F77E296F9BE000343885 /* KMPageEditSettingBaseWindowController.swift in Sources */,
 				9F080B25298FCB0D00FC27DA /* KMDesignToken+Action.swift in Sources */,
 				9F080B25298FCB0D00FC27DA /* KMDesignToken+Action.swift in Sources */,
+				BB0FE03F2B734DD1001E0F88 /* AITipIconView.swift in Sources */,
 				BB67EE1F2B54FFEF00573BF0 /* ASIFormDataRequest.m in Sources */,
 				BB67EE1F2B54FFEF00573BF0 /* ASIFormDataRequest.m in Sources */,
 				ADDF838B2B391A5D00A81A4E /* DSignatureFileListCellView.swift in Sources */,
 				ADDF838B2B391A5D00A81A4E /* DSignatureFileListCellView.swift in Sources */,
 				9F81ADC829B9B12C002251F4 /* NSButton+DesignToken.swift in Sources */,
 				9F81ADC829B9B12C002251F4 /* NSButton+DesignToken.swift in Sources */,
@@ -17385,6 +17560,7 @@
 				ADD1B6C92942E83000C3FFF7 /* KMPrintBottomView.swift in Sources */,
 				ADD1B6C92942E83000C3FFF7 /* KMPrintBottomView.swift in Sources */,
 				ADD1B7042946C8AD00C3FFF7 /* KMBaseTextField.swift in Sources */,
 				ADD1B7042946C8AD00C3FFF7 /* KMBaseTextField.swift in Sources */,
 				BB1B0AD92B4FC6E900889528 /* KMOpenFileGuideProperty.swift in Sources */,
 				BB1B0AD92B4FC6E900889528 /* KMOpenFileGuideProperty.swift in Sources */,
+				BB0FE0452B734DD1001E0F88 /* AITypeChooseView.swift in Sources */,
 				9FD0FA2B29CD3ED400F2AB0D /* KMRightSideEmptyVC.swift in Sources */,
 				9FD0FA2B29CD3ED400F2AB0D /* KMRightSideEmptyVC.swift in Sources */,
 				BB3A66A92B078CA400575343 /* KMNoteOutlineView.swift in Sources */,
 				BB3A66A92B078CA400575343 /* KMNoteOutlineView.swift in Sources */,
 				BB6B43682A04919200E02B54 /* KMBaseViewController.swift in Sources */,
 				BB6B43682A04919200E02B54 /* KMBaseViewController.swift in Sources */,
@@ -17516,6 +17692,7 @@
 				9FD0FA3329CD947000F2AB0D /* KMOpacityPanel.swift in Sources */,
 				9FD0FA3329CD947000F2AB0D /* KMOpacityPanel.swift in Sources */,
 				9FBC489D2996500300CA39D7 /* KMDocumentController.swift in Sources */,
 				9FBC489D2996500300CA39D7 /* KMDocumentController.swift in Sources */,
 				ADAFDA182AE8DD6600F084BC /* KMAdvertisementCollectionHeadView.swift in Sources */,
 				ADAFDA182AE8DD6600F084BC /* KMAdvertisementCollectionHeadView.swift in Sources */,
+				BB0FE0392B734DD1001E0F88 /* AIConfigWindowController.swift in Sources */,
 				BB1A34AA295EA30100B80B3E /* NSBitmapImageRep_SKExtensions.m in Sources */,
 				BB1A34AA295EA30100B80B3E /* NSBitmapImageRep_SKExtensions.m in Sources */,
 				BB31DA602AFA1B03006D63CB /* KMFontWell.swift in Sources */,
 				BB31DA602AFA1B03006D63CB /* KMFontWell.swift in Sources */,
 				9F0CB4A9296CF19600007028 /* KMPropertiesPanelListMenuSubVC.swift in Sources */,
 				9F0CB4A9296CF19600007028 /* KMPropertiesPanelListMenuSubVC.swift in Sources */,
@@ -17544,6 +17721,7 @@
 				9FF94F1329A7476000B1EF69 /* KMDesignPropertySelector.swift in Sources */,
 				9FF94F1329A7476000B1EF69 /* KMDesignPropertySelector.swift in Sources */,
 				9F39B9462A661ED500930ACA /* KMHomeScrollView.swift in Sources */,
 				9F39B9462A661ED500930ACA /* KMHomeScrollView.swift in Sources */,
 				BBB9B315299A5D6D004F3235 /* DropboxModel.m in Sources */,
 				BBB9B315299A5D6D004F3235 /* DropboxModel.m in Sources */,
+				BB10F1E62B736F11008EAF7E /* FMTrackEventManager.swift in Sources */,
 				9F0CB51B2986568000007028 /* KMDesignToken+BorderRadiusTopRight.swift in Sources */,
 				9F0CB51B2986568000007028 /* KMDesignToken+BorderRadiusTopRight.swift in Sources */,
 				BB1B0ACD2B4FC6E900889528 /* KMFunctionGuideWindowController.swift in Sources */,
 				BB1B0ACD2B4FC6E900889528 /* KMFunctionGuideWindowController.swift in Sources */,
 				8942F7BD29222C7E00389627 /* KMBookCellView.swift in Sources */,
 				8942F7BD29222C7E00389627 /* KMBookCellView.swift in Sources */,
@@ -18031,6 +18209,7 @@
 					"$(PROJECT_DIR)/PDF\\ Master/Third\\ Pard\\ Library/FirebaseAnalytics/FirebaseRemoteConfig",
 					"$(PROJECT_DIR)/PDF\\ Master/Third\\ Pard\\ Library/FirebaseAnalytics/FirebaseRemoteConfig",
 					"$(PROJECT_DIR)/PDF\\ Master/Class/PDFTools/Convert/Library",
 					"$(PROJECT_DIR)/PDF\\ Master/Class/PDFTools/Convert/Library",
 					"$(PROJECT_DIR)/PDF\\ Master/Class/PDFTools/Convert/Library",
 					"$(PROJECT_DIR)/PDF\\ Master/Class/PDFTools/Convert/Library",
+					"$(PROJECT_DIR)/PDF\\ Master/Class/AIInfo/Resources",
 				);
 				);
 				GCC_C_LANGUAGE_STANDARD = gnu99;
 				GCC_C_LANGUAGE_STANDARD = gnu99;
 				GCC_PREPROCESSOR_DEFINITIONS = (
 				GCC_PREPROCESSOR_DEFINITIONS = (
@@ -18128,6 +18307,7 @@
 					"$(PROJECT_DIR)/PDF\\ Master/Third\\ Pard\\ Library/FirebaseAnalytics/FirebaseRemoteConfig",
 					"$(PROJECT_DIR)/PDF\\ Master/Third\\ Pard\\ Library/FirebaseAnalytics/FirebaseRemoteConfig",
 					"$(PROJECT_DIR)/PDF\\ Master/Class/PDFTools/Convert/Library",
 					"$(PROJECT_DIR)/PDF\\ Master/Class/PDFTools/Convert/Library",
 					"$(PROJECT_DIR)/PDF\\ Master/Class/PDFTools/Convert/Library",
 					"$(PROJECT_DIR)/PDF\\ Master/Class/PDFTools/Convert/Library",
+					"$(PROJECT_DIR)/PDF\\ Master/Class/AIInfo/Resources",
 				);
 				);
 				GCC_C_LANGUAGE_STANDARD = gnu99;
 				GCC_C_LANGUAGE_STANDARD = gnu99;
 				GCC_PREPROCESSOR_DEFINITIONS = "VERSION_FREE=1";
 				GCC_PREPROCESSOR_DEFINITIONS = "VERSION_FREE=1";
@@ -18267,6 +18447,7 @@
 					"\"$(SRCROOT)/PDF Master/Class/PDFTools/Convert/Library/ComDocumentAIKit.framework\"",
 					"\"$(SRCROOT)/PDF Master/Class/PDFTools/Convert/Library/ComDocumentAIKit.framework\"",
 					"$(PROJECT_DIR)/PDF\\ Master/Class/PDFTools/Convert/Library",
 					"$(PROJECT_DIR)/PDF\\ Master/Class/PDFTools/Convert/Library",
 					"$(PROJECT_DIR)/PDF\\ Master/Class/PDFTools/Convert/Library",
 					"$(PROJECT_DIR)/PDF\\ Master/Class/PDFTools/Convert/Library",
+					"$(PROJECT_DIR)/PDF\\ Master/Class/AIInfo/Resources",
 				);
 				);
 				GCC_PREPROCESSOR_DEFINITIONS = (
 				GCC_PREPROCESSOR_DEFINITIONS = (
 					"DEBUG=1",
 					"DEBUG=1",
@@ -18328,6 +18509,7 @@
 					"\"$(SRCROOT)/PDF Master/Class/PDFTools/Convert/Library/ComDocumentAIKit.framework\"",
 					"\"$(SRCROOT)/PDF Master/Class/PDFTools/Convert/Library/ComDocumentAIKit.framework\"",
 					"$(PROJECT_DIR)/PDF\\ Master/Class/PDFTools/Convert/Library",
 					"$(PROJECT_DIR)/PDF\\ Master/Class/PDFTools/Convert/Library",
 					"$(PROJECT_DIR)/PDF\\ Master/Class/PDFTools/Convert/Library",
 					"$(PROJECT_DIR)/PDF\\ Master/Class/PDFTools/Convert/Library",
+					"$(PROJECT_DIR)/PDF\\ Master/Class/AIInfo/Resources",
 				);
 				);
 				GCC_PREPROCESSOR_DEFINITIONS = "VERSION_PRO=1";
 				GCC_PREPROCESSOR_DEFINITIONS = "VERSION_PRO=1";
 				GENERATE_INFOPLIST_FILE = YES;
 				GENERATE_INFOPLIST_FILE = YES;
@@ -18550,6 +18732,7 @@
 					"$(PROJECT_DIR)/PDF\\ Master/Third\\ Pard\\ Library/FirebaseAnalytics/FirebaseRemoteConfig",
 					"$(PROJECT_DIR)/PDF\\ Master/Third\\ Pard\\ Library/FirebaseAnalytics/FirebaseRemoteConfig",
 					"$(PROJECT_DIR)/PDF\\ Master/Class/PDFTools/Convert/Library",
 					"$(PROJECT_DIR)/PDF\\ Master/Class/PDFTools/Convert/Library",
 					"$(PROJECT_DIR)/PDF\\ Master/Class/PDFTools/Convert/Library",
 					"$(PROJECT_DIR)/PDF\\ Master/Class/PDFTools/Convert/Library",
+					"$(PROJECT_DIR)/PDF\\ Master/Class/AIInfo/Resources",
 				);
 				);
 				GCC_PREPROCESSOR_DEFINITIONS = (
 				GCC_PREPROCESSOR_DEFINITIONS = (
 					"DEBUG=1",
 					"DEBUG=1",
@@ -18730,6 +18913,7 @@
 					"$(PROJECT_DIR)/PDF\\ Master/Third\\ Pard\\ Library/FirebaseAnalytics/FirebaseRemoteConfig",
 					"$(PROJECT_DIR)/PDF\\ Master/Third\\ Pard\\ Library/FirebaseAnalytics/FirebaseRemoteConfig",
 					"$(PROJECT_DIR)/PDF\\ Master/Class/PDFTools/Convert/Library",
 					"$(PROJECT_DIR)/PDF\\ Master/Class/PDFTools/Convert/Library",
 					"$(PROJECT_DIR)/PDF\\ Master/Class/PDFTools/Convert/Library",
 					"$(PROJECT_DIR)/PDF\\ Master/Class/PDFTools/Convert/Library",
+					"$(PROJECT_DIR)/PDF\\ Master/Class/AIInfo/Resources",
 				);
 				);
 				GCC_PREPROCESSOR_DEFINITIONS = "VERSION_DMG=1";
 				GCC_PREPROCESSOR_DEFINITIONS = "VERSION_DMG=1";
 				GENERATE_INFOPLIST_FILE = YES;
 				GENERATE_INFOPLIST_FILE = YES;

+ 0 - 0
PDF Office/PDF Reader Pro.xcodeproj/xcuserdata/kdanmobile.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist


Alguns arquivos não foram mostrados porque muitos arquivos mudaram nesse diff