Переглянути джерело

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

# Conflicts:
#	PDF Office/PDF Reader Pro.xcodeproj/xcuserdata/kdanmobile.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist
niehaoyu 1 рік тому
батько
коміт
68519d5b94
100 змінених файлів з 86827 додано та 259 видалено
  1. 918 0
      PDF Office/PDF Master/Class/AIInfo/AIConfigWindowController/AIConfigWindowController.swift
  2. 676 0
      PDF Office/PDF Master/Class/AIInfo/AIConfigWindowController/AIConfigWindowController.xib
  3. 84 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/AIChooseFile.imageset/AIChooseFile.pdf
  4. 22 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/AIChooseFile.imageset/Contents.json
  5. 84 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/AIChooseFile.imageset/ic.pdf
  6. 103 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/AICreditIcon.imageset/AICreditIcon.pdf
  7. 12 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/AICreditIcon.imageset/Contents.json
  8. 2981 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/AIDMGBG.imageset/AIDMGA.pdf
  9. 74550 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/AIDMGBG.imageset/AIDMGB.pdf
  10. 22 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/AIDMGBG.imageset/Contents.json
  11. 140 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/AIProofreading.imageset/AIProofreading.pdf
  12. 140 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/AIProofreading.imageset/AIProofreading12.pdf
  13. 22 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/AIProofreading.imageset/Contents.json
  14. 22 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/AIRewriting.imageset/Contents.json
  15. 154 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/AIRewriting.imageset/icon-3.pdf
  16. 154 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/AIRewriting.imageset/icon-4.pdf
  17. 22 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/AISummarize.imageset/Contents.json
  18. 143 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/AISummarize.imageset/icon-2.pdf
  19. 143 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/AISummarize.imageset/icon.pdf
  20. 22 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/AITranslate.imageset/Contents.json
  21. 175 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/AITranslate.imageset/icon-5.pdf
  22. 175 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/AITranslate.imageset/icon-6.pdf
  23. 105 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/AIchange.imageset/AIchange.pdf
  24. 12 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/AIchange.imageset/Contents.json
  25. 95 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/AItime.imageset/AItime.pdf
  26. 22 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/AItime.imageset/Contents.json
  27. 99 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/AItime.imageset/time.pdf
  28. 6 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/Contents.json
  29. 12 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/aiIconA.imageset/Contents.json
  30. 157 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/aiIconA.imageset/aiIconA.pdf
  31. 22 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/aiInfoIcon.imageset/Contents.json
  32. 94 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/aiInfoIcon.imageset/aiInfoIcon.pdf
  33. 94 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/aiInfoIcon.imageset/ic.pdf
  34. 12 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/aiPDF_Clear.imageset/Contents.json
  35. 172 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/aiPDF_Clear.imageset/aiPDF_Clear.pdf
  36. 12 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/aiTipBtnA.imageset/Contents.json
  37. BIN
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/aiTipBtnA.imageset/aiTipBtnA.pdf
  38. 22 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/ai_Appstore.imageset/Contents.json
  39. BIN
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/ai_Appstore.imageset/ai_Appstore.png
  40. BIN
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/ai_Appstore.imageset/img.png
  41. 12 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/ai_proofreading_empty.imageset/Contents.json
  42. 144 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/ai_proofreading_empty.imageset/ai_proofreading_empty.pdf
  43. 12 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/ai_rewriting_empty.imageset/Contents.json
  44. 158 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/ai_rewriting_empty.imageset/ai_rewriting_empty.pdf
  45. 12 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/ai_summary_Empty.imageset/Contents.json
  46. 147 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/ai_summary_Empty.imageset/aiFileEmpty.pdf
  47. 12 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/ai_translate_empty.imageset/Contents.json
  48. 181 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/ai_translate_empty.imageset/ai_translate_empty.pdf
  49. 21 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/creditEmptyIcon.imageset/Contents.json
  50. BIN
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/creditEmptyIcon.imageset/creditEmptyIcon.pdf
  51. 12 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/ic_btn_arrow_down.imageset/Contents.json
  52. 73 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/ic_btn_arrow_down.imageset/ic_btn_arrow_down.pdf
  53. 22 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/ic_else_alert.imageset/Contents.json
  54. 90 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/ic_else_alert.imageset/ic_else_alert 1.pdf
  55. 90 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/ic_else_alert.imageset/ic_else_alert.pdf
  56. 22 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/ic_else_info_large.imageset/Contents.json
  57. 93 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/ic_else_info_large.imageset/ic_else_info_large 1.pdf
  58. 93 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/ic_else_info_large.imageset/ic_else_info_large.pdf
  59. 12 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/img_licensecode_successful.imageset/Contents.json
  60. 86 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/img_licensecode_successful.imageset/img_licensecode_successful.pdf
  61. 12 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/pop-btn.imageset/Contents.json
  62. BIN
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/pop-btn.imageset/pop-btn.pdf
  63. 12 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/pop-btn_hover.imageset/Contents.json
  64. BIN
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/pop-btn_hover.imageset/pop-btn_hover.pdf
  65. 22 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/robot-gray.imageset/Contents.json
  66. 187 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/robot-gray.imageset/robot-gray 1.pdf
  67. 187 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/robot-gray.imageset/robot-gray.pdf
  68. 12 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/vipAbleIcon.imageset/Contents.json
  69. 81 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/vipAbleIcon.imageset/vipAbleIcon.pdf
  70. BIN
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/whatNew_AIGuide.imageset/AIGuide.png
  71. 12 0
      PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/whatNew_AIGuide.imageset/Contents.json
  72. 29 0
      PDF Office/PDF Master/Class/AIInfo/AIInfoConfig.swift
  73. 307 0
      PDF Office/PDF Master/Class/AIInfo/AIPurchaseWindowController/AIPurchaseWindowController.swift
  74. 218 0
      PDF Office/PDF Master/Class/AIInfo/AIPurchaseWindowController/AIPurchaseWindowController.xib
  75. 55 0
      PDF Office/PDF Master/Class/AIInfo/AITipIcon/AITipIconView.swift
  76. 54 0
      PDF Office/PDF Master/Class/AIInfo/AITipIcon/AITipIconView.xib
  77. 137 0
      PDF Office/PDF Master/Class/AIInfo/AITypeChooseView/AITypeChooseView.swift
  78. 279 0
      PDF Office/PDF Master/Class/AIInfo/AITypeChooseView/AITypeChooseView.xib
  79. 313 0
      PDF Office/PDF Master/Class/AIInfo/AIUserInfoController/AIUserInfoController.swift
  80. 480 0
      PDF Office/PDF Master/Class/AIInfo/AIUserInfoController/AIUserInfoController.xib
  81. 654 0
      PDF Office/PDF Master/Class/AIInfo/KMAIRequestServerManager.swift
  82. 29 23
      PDF Office/PDF Master/Class/ChromiumTabs/KMBrowserWindowController.swift
  83. 1 1
      PDF Office/PDF Master/Class/Common/Category/NSObject+KMExtension.swift
  84. 2 0
      PDF Office/PDF Master/Class/GuideInfo/KMGuideConfig.swift
  85. 123 123
      PDF Office/PDF Master/Class/Home/ViewController/KMAIRewritingVC.swift
  86. 2 2
      PDF Office/PDF Master/Class/Home/ViewController/KMHomeViewController.swift
  87. 18 18
      PDF Office/PDF Master/Class/KMAdvertisement/Manager/KMAdvertisementManager.swift
  88. 3 3
      PDF Office/PDF Master/Class/KMLightMember/Manager/KMRequestServerManager.swift
  89. 8 0
      PDF Office/PDF Master/Class/PDFWindowController/Side/LeftSide/KMLeftSideViewController+Action.swift
  90. 3 5
      PDF Office/PDF Master/Class/PDFWindowController/Side/LeftSide/KMLeftSideViewController.swift
  91. 3 3
      PDF Office/PDF Master/Class/PDFWindowController/Side/RightSide/AnnotationProperty/ViewController/PageDisplay/KMPageDisplayCustomThemesCollectionViewItem.xib
  92. 15 5
      PDF Office/PDF Master/Class/PDFWindowController/Side/RightSide/AnnotationProperty/ViewController/PageDisplay/KMPageDisplayThemeCollectionViewItem.swift
  93. 8 5
      PDF Office/PDF Master/Class/PDFWindowController/Side/RightSide/AnnotationProperty/ViewController/PageDisplay/KMPageDisplayThemeCollectionViewItem.xib
  94. 22 27
      PDF Office/PDF Master/Class/PDFWindowController/Toolbar/KMToolbarController.swift
  95. 5 41
      PDF Office/PDF Master/Class/PDFWindowController/ViewController/KMMainViewController+MenuAction.swift
  96. 8 0
      PDF Office/PDF Master/Class/PDFWindowController/ViewController/KMMainViewController+UI.swift
  97. 58 0
      PDF Office/PDF Master/Class/Purchase/DMG/Verification/VerificationManager/AIInfoManager.h
  98. 458 0
      PDF Office/PDF Master/Class/Purchase/DMG/Verification/VerificationManager/AIInfoManager.m
  99. 18 3
      PDF Office/PDF Master/Class/Purchase/DMG/Verification/VerificationManager/VerificationManager.h
  100. 0 0
      PDF Office/PDF Master/Class/Purchase/DMG/Verification/VerificationManager/VerificationManager.m

+ 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
+  }
+}

Різницю між файлами не показано, бо вона завелика
+ 2981 - 0
PDF Office/PDF Master/Class/AIInfo/AIImage.xcassets/AIDMGBG.imageset/AIDMGA.pdf


Різницю між файлами не показано, бо вона завелика
+ 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);
+                }
+            }
+        }
+    }
+}

+ 29 - 23
PDF Office/PDF Master/Class/ChromiumTabs/KMBrowserWindowController.swift

@@ -153,29 +153,7 @@ import Cocoa
             self.window?.appearance = .init(named: .darkAqua)
         }
         
-        Task { @MainActor in
-//            self.interfaceThemeDidChanged(self.window?.appearance?.name ?? .aqua)
-            self.updateViewColor()
-            
-//            _themeChanged
-//            let selector = NSSelectorFromString("_themeChanged:")
-//            let mainWindow = self.window
-//            var responder = mainWindow?.firstResponder
-//            
-//            while (responder != nil) {
-//                KMPrint("res: \(responder)")
-//                
-//                if self.isEqual(to: responder) {
-//                    responder = responder?.nextResponder
-//                    continue
-//                }
-//                if let res = responder?.responds(to: selector), res {
-//                    responder?.perform(selector, with: sender)
-//                }
-//                
-//                responder = responder!.nextResponder
-//            }
-        }
+        self.interfaceThemeDidChanged(self.window?.appearance?.name ?? .aqua)
     }
     
     override func updateViewColor() {
@@ -456,6 +434,34 @@ import Cocoa
     }
 }
 
+// MARK: - KMInterfaceThemeChangedProtocol
+
+extension KMBrowserWindowController: KMInterfaceThemeChangedProtocol {
+    func interfaceThemeDidChanged(_ appearance: NSAppearance.Name) {
+        Task { @MainActor in
+            self.updateViewColor()
+            
+            let selector = #selector(interfaceThemeDidChanged)
+            let mainWindow = self.window
+            var responder = mainWindow?.firstResponder
+
+            while (responder != nil) {
+//                KMPrint("res: \(responder)")
+//
+                if self.isEqual(to: responder) {
+                    responder = responder?.nextResponder
+                    continue
+                }
+                if let res = responder?.responds(to: selector), res {
+                    responder?.perform(selector, with: appearance)
+                }
+
+                responder = responder!.nextResponder
+            }
+        }
+    }
+}
+
 // MARK: - KMToolbarRightViewDelegate
 
 extension KMBrowserWindowController: KMToolbarRightViewDelegate {

+ 1 - 1
PDF Office/PDF Master/Class/Common/Category/NSObject+KMExtension.swift

@@ -672,7 +672,7 @@ extension NSApplication {
 }
 
 @objc protocol KMInterfaceThemeChangedProtocol: NSObjectProtocol {
-    @objc optional func interfaceThemeChanged(_ appearance: NSAppearance.Name)
+    @objc optional func interfaceThemeDidChanged(_ appearance: NSAppearance.Name)
 }
 
 // MARK: - NSOutlineView

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

@@ -28,6 +28,8 @@ let kKMGuideInfoCustomColorKey   = "kKMGuideInfoCustomColorKey"
     case openFileNormalToolbar  = 9
     case convertGuide           = 10//转档功能
     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
 
-@objc enum KMAIRewritingState : Int {
-    case AIRewriting = 0
-    case AIErrorCorrection
-}
+//@objc enum KMAIRewritingState : Int {
+//    case AIRewriting = 0
+//    case AIErrorCorrection
+//}
 
 class KMAIRewritingVC: NSViewController {
 
@@ -37,7 +37,7 @@ class KMAIRewritingVC: NSViewController {
     @IBOutlet weak var errorImageView: NSImageView!
     @IBOutlet weak var errorLabel: NSTextField!
     
-    var state: KMAIRewritingState = .AIRewriting
+    var state: KMAIRewritingState = .rewrite
     
     var _uiState: KMAITranslationState = .None
     
@@ -97,7 +97,7 @@ class KMAIRewritingVC: NSViewController {
     
     func initLocalization() -> Void {
         switch self.state {
-        case .AIRewriting:
+        case .rewrite:
             self.aiRewritingLabel.stringValue = NSLocalizedString("AI Rewriting", comment: "")
             self.aiRewritingSubLabel.stringValue = NSLocalizedString("Limited to 150 characters per session, 5 times per month", comment: "")
             self.rewritingLabel.stringValue = NSLocalizedString("Rewrite", comment: "")
@@ -109,18 +109,18 @@ class KMAIRewritingVC: NSViewController {
             self.resultTextView.string = self.aiRewritingResultStr
             self.emptyImageView.image = NSImage(named: "ic_ai_rewriting_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
+//        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:
             break
         }
@@ -220,11 +220,11 @@ class KMAIRewritingVC: NSViewController {
             self.rewritingBox.borderColor = NSColor.km_init(hex: "#F3465B")
             self.emptyImageView.isHidden = true
             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 {
             self.rewritingBox.fillColor = NSColor.km_init(hex: "#BDDFFD")
             self.rewritingBox.borderWidth = 0.0
@@ -243,65 +243,65 @@ class KMAIRewritingVC: NSViewController {
     }
     
     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() {
@@ -310,11 +310,11 @@ class KMAIRewritingVC: NSViewController {
         progress.window?.contentView?.wantsLayer = true
         progress.window?.contentView?.layer?.backgroundColor = NSColor.km_init(hex: "#36383B").cgColor
         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
             self.hiddenProgressWindow()
@@ -385,24 +385,24 @@ class KMAIRewritingVC: NSViewController {
                 
                 self.resultTextView.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 {
                 let result: String = result!.message
                 
                 DispatchQueue.main.async {
                     self.resultTextView.string = ""
                     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
                 }
             }
@@ -455,39 +455,39 @@ extension KMAIRewritingVC: NSTextFieldDelegate {
         self.wordsLabel.stringValue = String(format: "%d/150", object.stringValue.count)
         
         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 {
             self.uiState = .None
         }
         
         if object.stringValue.count > 150 {
             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 {
-            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.rightBottomBox.contentView = nil
             self.rightFullBox.contentView = self.aiRewritingViewController.view
-            self.aiRewritingViewController.state = .AIRewriting
+//            self.aiRewritingViewController.state = .AIRewriting
             self.aiRewritingViewController.initLocalization()
             self.aiRewritingViewController.acquisition_uiState()
             
@@ -516,7 +516,7 @@ import Cocoa
             self.rightTopBox.contentView = nil
             self.rightBottomBox.contentView = nil
             self.rightFullBox.contentView = self.aiRewritingViewController.view
-            self.aiRewritingViewController.state = .AIErrorCorrection
+//            self.aiRewritingViewController.state = .AIErrorCorrection
             self.aiRewritingViewController.initLocalization()
             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.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)
         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,
                                      "content": content,
                                      "version": version,

+ 8 - 0
PDF Office/PDF Master/Class/PDFWindowController/Side/LeftSide/KMLeftSideViewController+Action.swift

@@ -226,6 +226,14 @@ extension KMLeftSideViewController {
     }
 }
 
+// MARK: - KMInterfaceThemeChangedProtocol
+
+extension KMLeftSideViewController: KMInterfaceThemeChangedProtocol {
+    func interfaceThemeDidChanged(_ appearance: NSAppearance.Name) {
+        self.updateViewColor()
+    }
+}
+
 // MARK: - NSMenuDelegate
 
 extension KMLeftSideViewController: NSMenuDelegate {

+ 3 - 5
PDF Office/PDF Master/Class/PDFWindowController/Side/LeftSide/KMLeftSideViewController.swift

@@ -58,7 +58,7 @@ class KMLeftSideViewController: KMSideViewController {
         self.reloadThumbnailSize()
         self.reloadSnapshotSize()
         
-        DistributedNotificationCenter.default().addObserver(self, selector: #selector(_themeChanged), name: NSApplication.interfaceThemeChangedNotification, object: nil)
+//        DistributedNotificationCenter.default().addObserver(self, selector: #selector(interfaceThemeDidChanged), name: NSApplication.interfaceThemeChangedNotification, object: nil)
         self.isDisplayPageSize = UserDefaults.standard.bool(forKey: "kKMThumbnailDisplayPageSizeKey")
     }
     
@@ -1104,10 +1104,8 @@ extension KMLeftSideViewController {
 // MARK: - Private Methods
 
 extension KMLeftSideViewController {
-    @objc private func _themeChanged(_ notification: NSNotification) {
-        DispatchQueue.main.asyncAfter(deadline: .now()+0.3) {
-            self._updateViewColor()
-        }
+    func updateViewColor() {
+        self._updateViewColor()
     }
     
     private func _updateViewColor() {

+ 3 - 3
PDF Office/PDF Master/Class/PDFWindowController/Side/RightSide/AnnotationProperty/ViewController/PageDisplay/KMPageDisplayCustomThemesCollectionViewItem.xib

@@ -1,8 +1,8 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="22154" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="22155" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
     <dependencies>
         <deployment identifier="macosx"/>
-        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="22154"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="22155"/>
         <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
     </dependencies>
     <objects>
@@ -21,7 +21,7 @@
             <rect key="frame" x="0.0" y="0.0" width="58" height="64"/>
             <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
             <subviews>
-                <box misplaced="YES" boxType="custom" borderWidth="0.0" cornerRadius="6" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="Arc-B8-K9d" customClass="KMThemesBox" customModule="PDF_Master" customModuleProvider="target">
+                <box misplaced="YES" boxType="custom" borderWidth="0.0" cornerRadius="6" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="Arc-B8-K9d" customClass="KMThemesBox" customModule="PDF_Reader_Pro" customModuleProvider="target">
                     <rect key="frame" x="0.0" y="6" width="58" height="64"/>
                     <view key="contentView" id="xu5-Vf-7O3">
                         <rect key="frame" x="0.0" y="0.0" width="58" height="64"/>

+ 15 - 5
PDF Office/PDF Master/Class/PDFWindowController/Side/RightSide/AnnotationProperty/ViewController/PageDisplay/KMPageDisplayThemeCollectionViewItem.swift

@@ -39,6 +39,16 @@ class KMPageDisplayThemeCollectionViewItem: NSCollectionViewItem {
         return image
     }
     
+    @IBAction func closeButtonAction(_ sender: Any) {
+        if !IAPProductsManager.default().isAvailableAllFunction() {
+            KMPurchaseCompareWindowController.sharedInstance().showWindow(nil)
+            return
+        }
+        if let callback = itemCallBack {
+            callback(Int(itemInteger.rawValue))
+        }
+    }
+    
     func themesCollectionCellItem(item:NSInteger, itemData:[NSColor]) {
         let size = CGSize(width: 20, height: 20)
         itemInteger = KMPDFViewMode(rawValue: UInt(item)) ?? .normal
@@ -74,11 +84,11 @@ class KMPageDisplayThemeCollectionViewItem: NSCollectionViewItem {
 
             if mouseEntered {
                 if self.itemInteger.rawValue > 3 {
-//                    if !IAPProductsManager.defaultManager.isAvailableAllFunction {
-//                        self.closeButton.isHidden = true
-//                    } else {
-//                        self.closeButton.isHidden = false
-//                    }
+                    if !IAPProductsManager.default().isAvailableAllFunction() {
+                        self.closeButton.isHidden = true
+                    } else {
+                        self.closeButton.isHidden = false
+                    }
                 }
             } else {
                 self.closeButton.isHidden = true

+ 8 - 5
PDF Office/PDF Master/Class/PDFWindowController/Side/RightSide/AnnotationProperty/ViewController/PageDisplay/KMPageDisplayThemeCollectionViewItem.xib

@@ -1,12 +1,12 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="22154" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="22155" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
     <dependencies>
         <deployment identifier="macosx"/>
-        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="22154"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="22155"/>
         <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
     </dependencies>
     <objects>
-        <customObject id="-2" userLabel="File's Owner" customClass="KMPageDisplayThemeCollectionViewItem" customModule="PDF_Master" customModuleProvider="target">
+        <customObject id="-2" userLabel="File's Owner" customClass="KMPageDisplayThemeCollectionViewItem" customModule="PDF_Reader_Pro" customModuleProvider="target">
             <connections>
                 <outlet property="closeButton" destination="Ho0-7o-Web" id="Q0K-3U-jPF"/>
                 <outlet property="itemImageView" destination="PPa-Or-WHl" id="TAf-zw-q64"/>
@@ -19,10 +19,10 @@
         <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
         <customObject id="-3" userLabel="Application" customClass="NSObject"/>
         <customView identifier="KMPageDisplayThemeCollectionViewItem" misplaced="YES" id="3SZ-T6-0pc">
-            <rect key="frame" x="0.0" y="0.0" width="58" height="64"/>
+            <rect key="frame" x="0.0" y="0.0" width="58" height="58"/>
             <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
             <subviews>
-                <box boxType="custom" borderWidth="0.0" cornerRadius="6" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="6e1-NQ-e52" customClass="KMBox" customModule="PDF_Master" customModuleProvider="target">
+                <box boxType="custom" borderWidth="0.0" cornerRadius="6" title="Box" translatesAutoresizingMaskIntoConstraints="NO" id="6e1-NQ-e52" customClass="KMBox" customModule="PDF_Reader_Pro" customModuleProvider="target">
                     <rect key="frame" x="0.0" y="0.0" width="58" height="58"/>
                     <view key="contentView" id="S4n-a2-gfe">
                         <rect key="frame" x="0.0" y="0.0" width="58" height="58"/>
@@ -54,6 +54,9 @@
                                     <constraint firstAttribute="height" constant="16" id="GlF-Cn-mfR"/>
                                     <constraint firstAttribute="width" constant="16" id="NhD-gS-6jN"/>
                                 </constraints>
+                                <connections>
+                                    <action selector="closeButtonAction:" target="-2" id="ovH-wL-YJe"/>
+                                </connections>
                             </button>
                             <imageView hidden="YES" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="Gmv-j8-3Dr">
                                 <rect key="frame" x="38" y="38" width="20" height="20"/>

+ 22 - 27
PDF Office/PDF Master/Class/PDFWindowController/Toolbar/KMToolbarController.swift

@@ -785,22 +785,20 @@ extension KMToolbarController: KMToolbarViewControllerDelegate {
     }
     
     func toolbarViewController(_ viewController: KMToolbarViewController, itemDidClick toolbarItem: KMToolbarItemView) {
-        if self.lastItemBox != nil {
-            //  && toolMode.isToolMode()
-            if (toolbarItem.isSelected) {
-                // no nothings
-            } else {
-                self.lastItemBox.isSelected = false
+        let itemIdentifier = toolbarItem.itemIdentifier
+        if itemIdentifier != KMRightControlToolbarItemIdentifier {
+            if self.lastItemBox != nil {
+                if (toolbarItem.isSelected) {
+                    // no nothings
+                } else {
+                    let p_itemIdentifier = parentIdentifier(itemIdentifier ?? "")
+                    if p_itemIdentifier != self.lastItemBox.itemIdentifier {
+                        self.lastItemBox.isSelected = false
+                    }
+                }
             }
         }
         
-        if self.lastChildItemBox != nil {
-//            if toolMode == .editPDF {
-//                if !self.lastItemBox.isSelected {
-//                    self.lastChildItemBox.isSelected = false
-//                }
-//            }
-        }
         self.delegate?.toolbarViewController?(viewController, itemDidClick: toolbarItem)
     }
     
@@ -813,23 +811,20 @@ extension KMToolbarController: KMToolbarViewControllerDelegate {
     }
     
     func toolbarViewController(_ viewController: KMToolbarViewController, menuItemDidClick toolbarItem: KMToolbarItemView, index: Int, info: Any?) {
-        if self.lastItemBox != nil {
-            //  && toolMode.isToolMode()
-            if (toolbarItem.isSelected) {
-                // no nothings
-            } else {
-                self.lastItemBox.isSelected = false
+        let itemIdentifier = toolbarItem.itemIdentifier
+        if itemIdentifier != KMRightControlToolbarItemIdentifier {
+            if self.lastItemBox != nil {
+                if (toolbarItem.isSelected) {
+                    // no nothings
+                } else {
+                    let p_itemIdentifier = parentIdentifier(itemIdentifier ?? "")
+                    if p_itemIdentifier != self.lastItemBox.itemIdentifier {
+                        self.lastItemBox.isSelected = false
+                    }
+                }
             }
         }
         
-        if self.lastChildItemBox != nil {
-//            if toolMode == .editPDF {
-//                if !self.lastItemBox.isSelected {
-//                    self.lastChildItemBox.isSelected = false
-//                }
-//            }
-        }
-        
         self.delegate?.toolbarViewController?(viewController, menuItemDidClick: toolbarItem, index: index, info: info)
     }
 }

+ 5 - 41
PDF Office/PDF Master/Class/PDFWindowController/ViewController/KMMainViewController+MenuAction.swift

@@ -476,61 +476,25 @@ extension KMMainViewController {
     @IBAction func menuItemAction_squre(_ sender: Any) {
         UserDefaults.standard.set(6, forKey: KMToolBarToolPDFShapeStyle)
 
-        if (self.listView.annotationType == .square) {
-            self.toolbarController.clickItem(KMToolbarSquareAnnotationItemIdentifier)
-        } else {
-            if (self.listView.annotationType == .circle || self.listView.annotationType == .line || self.listView.annotationType == .arrow) {
-                self.listView.annotationType = .square
-                self.rightSideViewController.annotationProperties.annotationMode = .square
-            } else {
-                self.toolbarController.clickItem(KMToolbarSquareAnnotationItemIdentifier)
-            }
-        }
+        self.toolbarController.clickItem(KMToolbarSquareAnnotationItemIdentifier)
     }
 
     @IBAction func menuItemAction_circle(_ sender: Any) {
         UserDefaults.standard.set(7, forKey: KMToolBarToolPDFShapeStyle)
 
-        if (self.listView.annotationType == .circle) { // 取消
-            self.toolbarController.clickItem(KMToolbarSquareAnnotationItemIdentifier)
-        } else {
-            if (self.listView.annotationType == .square || self.listView.annotationType == .line || self.listView.annotationType == .arrow) { // 切换
-                self.listView.annotationType = .circle
-                self.rightSideViewController.annotationProperties.annotationMode = .circle
-            } else { // 选中
-                self.toolbarController.clickItem(KMToolbarSquareAnnotationItemIdentifier)
-            }
-        }
+        self.toolbarController.clickItem(KMToolbarCircleAnnotationItemIdentifier)
     }
     
     @IBAction func menuItemAction_arrow(_ sender: Any) {
         UserDefaults.standard.set(5, forKey: KMToolBarToolPDFShapeStyle)
 
-        if (self.listView.annotationType == .arrow) { // 取消
-            self.toolbarController.clickItem(KMToolbarSquareAnnotationItemIdentifier)
-        } else { // 选中
-            if (self.listView.annotationType == .square || self.listView.annotationType == .circle || self.listView.annotationType == .line) { // 切换
-                self.listView.annotationType = .arrow
-                self.rightSideViewController.annotationProperties.annotationMode = .arrow
-            } else {
-                self.toolbarController.clickItem(KMToolbarSquareAnnotationItemIdentifier)
-            }
-        }
+        self.toolbarController.clickItem(KMToolbarArrowAnnotationItemIdentifier)
     }
     
     @IBAction func menuItemAction_line(_ sender: Any) {
         UserDefaults.standard.set(4, forKey: KMToolBarToolPDFShapeStyle)
-
-        if (self.listView.annotationType == .line) { // 取消
-            self.toolbarController.clickItem(KMToolbarSquareAnnotationItemIdentifier)
-        } else { // 选中
-            if (self.listView.annotationType == .square || self.listView.annotationType == .circle || self.listView.annotationType == .arrow) { // 切换
-                self.listView.annotationType = .line
-                self.rightSideViewController.annotationProperties.annotationMode = .line
-            } else {
-                self.toolbarController.clickItem(KMToolbarSquareAnnotationItemIdentifier)
-            }
-        }
+        
+        self.toolbarController.clickItem(KMToolbarLineAnnotationItemIdentifier)
     }
 
     // link

+ 8 - 0
PDF Office/PDF Master/Class/PDFWindowController/ViewController/KMMainViewController+UI.swift

@@ -705,3 +705,11 @@ extension KMMainViewController {
 //        KMPreferenceManager.shared.highlightLinks = !highlightLinks
 //    }
 }
+
+// MARK: - KMInterfaceThemeChangedProtocol
+
+extension KMMainViewController: KMInterfaceThemeChangedProtocol {
+    func interfaceThemeDidChanged(_ appearance: NSAppearance.Name) {
+        
+    }
+}

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

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


Деякі файли не було показано, через те що забагато файлів було змінено